Skip to content

Instantly share code, notes, and snippets.

@Lanse505
Created June 29, 2020 16:08
Show Gist options
  • Save Lanse505/d603c0699d6be8e2391a90f07af9c8b3 to your computer and use it in GitHub Desktop.
Save Lanse505/d603c0699d6be8e2391a90f07af9c8b3 to your computer and use it in GitHub Desktop.
package com.hrznstudio.titanium.entity;
import com.google.common.collect.Lists;
import com.hrznstudio.titanium.api.IFactory;
import com.hrznstudio.titanium.api.client.IScreenAddon;
import com.hrznstudio.titanium.api.client.IScreenAddonProvider;
import com.hrznstudio.titanium.container.addon.IContainerAddon;
import com.hrznstudio.titanium.container.addon.IContainerAddonProvider;
import com.hrznstudio.titanium.network.IButtonHandler;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.common.capabilities.Capability;
import javax.annotation.Nonnull;
import java.util.List;
public class LivingEntityHarness implements IContainerAddonProvider, IScreenAddonProvider, IButtonHandler {
private final LivingEntity entity;
private final IButtonHandler buttonHandler;
private final Capability<?>[] capabilities;
private final IScreenAddonProvider defaultProvider;
public LivingEntityHarness(LivingEntity entity, IScreenAddonProvider defaultProvider, IButtonHandler buttonHandler, Capability<?>... capabilities) {
this.entity = entity;
this.defaultProvider = defaultProvider;
this.buttonHandler = buttonHandler;
this.capabilities = capabilities;
}
@Nonnull
@Override
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
List<IFactory<? extends IScreenAddon>> screenAddons = Lists.newArrayList();
if (defaultProvider != null) screenAddons.addAll(defaultProvider.getScreenAddons());
for (Capability<?> capability : capabilities) {
screenAddons.addAll(entity.getCapability(capability)
.filter(cap -> cap instanceof IScreenAddonProvider)
.map(cap -> (IScreenAddonProvider)cap)
.map(IScreenAddonProvider::getScreenAddons)
.orElseGet(Lists::newArrayList));
}
return screenAddons;
}
@Nonnull
@Override
public List<IFactory<? extends IContainerAddon>> getContainerAddons() {
List<IFactory<? extends IContainerAddon>> containerAddons = Lists.newArrayList();
for (Capability<?> capability : capabilities) {
containerAddons.addAll(entity.getCapability(capability)
.filter(cap -> cap instanceof IContainerAddonProvider)
.map(cap -> (IContainerAddonProvider)cap)
.map(IContainerAddonProvider::getContainerAddons)
.orElseGet(Lists::newArrayList));
}
return containerAddons;
}
@Override
public void handleButtonMessage(int id, PlayerEntity playerEntity, CompoundNBT compound) {
if (buttonHandler != null) {
buttonHandler.handleButtonMessage(id, playerEntity, compound);
}
}
}
package com.hrznstudio.titanium.entity;
import com.google.common.collect.Maps;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.Item;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
public class LivingEntityHarnessRegistry {
private static final LivingEntityHarnessRegistry INSTANCE = new LivingEntityHarnessRegistry();
private final Map<Item, Function<LivingEntity, LivingEntityHarness>> harnessCreators;
public LivingEntityHarnessRegistry() {
harnessCreators = Maps.newHashMap();
}
public static void register(Item item, Function<LivingEntity, LivingEntityHarness> harnessCreator) {
getHarnessCreators().put(item, harnessCreator);
}
public static Map<Item, Function<LivingEntity, LivingEntityHarness>> getHarnessCreators() {
return getInstance().harnessCreators;
}
public static Optional<LivingEntityHarness> createItemStackHarness(LivingEntity livingEntity) {
return Optional.of(livingEntity.getType())
.map(getHarnessCreators()::get)
.map(harnessCreator -> harnessCreator.apply(livingEntity));
}
public static LivingEntityHarnessRegistry getInstance() {
return INSTANCE;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment