Created
June 29, 2020 16:08
-
-
Save Lanse505/d603c0699d6be8e2391a90f07af9c8b3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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