Skip to content

Instantly share code, notes, and snippets.

@Lanse505
Last active March 31, 2020 15:46
Show Gist options
  • Save Lanse505/8cdb80ec8f3c590e21ce760e13d53611 to your computer and use it in GitHub Desktop.
Save Lanse505/8cdb80ec8f3c590e21ce760e13d53611 to your computer and use it in GitHub Desktop.
package com.teamacronymcoders.essence.api.knowledge;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.common.util.INBTSerializable;
import java.util.List;
import java.util.UUID;
public interface IKnowledgeHolder extends INBTSerializable<CompoundNBT> {
void addPlayerUUID(PlayerEntity player);
void addKnowledge(PlayerEntity player, Knowledge<?>... knowledge);
void removeKnowledge(PlayerEntity player, Knowledge<?>... knowledge);
void clearKnowledge(PlayerEntity player);
List<Knowledge<?>> getKnowledgeAsList(UUID uuid);
List<Knowledge<?>> getKnowledgeAsList(PlayerEntity player);
Knowledge<?>[] getKnowledgeAsArray(UUID uuid);
Knowledge<?>[] getKnowledgeAsArray(PlayerEntity player);
}
package com.teamacronymcoders.essence.api.knowledge;
import com.teamacronymcoders.essence.api.knowledge.event.KnowledgeEvent;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.INBTSerializable;
import java.util.*;
public class KnowledgeHolder implements IKnowledgeHolder, INBTSerializable<CompoundNBT> {
private static final String PLAYER_UUID = "Player_UUID";
private static final String PLAYER_KNOWLEDGE = "Player_Knowledge";
private static final String PLAYER_INSTANCES = "Player_Knowledge_Instances";
private Map<UUID, List<Knowledge<?>>> playerToKnowledgeMap;
public KnowledgeHolder() {
this.playerToKnowledgeMap = new HashMap<>();
}
@Override
public void addPlayerUUID(PlayerEntity player) {
if (!playerToKnowledgeMap.containsKey(player.getUniqueID())) {
playerToKnowledgeMap.put(player.getUniqueID(), new ArrayList<>());
}
}
@Override
public void addKnowledge(PlayerEntity player, Knowledge<?>... knowledge) {
ServerPlayerEntity serverPlayer = null;
List<Knowledge<?>> knowledges = playerToKnowledgeMap.get(player.getUniqueID());
if (player instanceof ServerPlayerEntity) {
serverPlayer = (ServerPlayerEntity) player;
}
for (Knowledge<?> instance : knowledge) {
boolean notCancelled = false;
if (!MinecraftForge.EVENT_BUS.post(new KnowledgeEvent.addPre(player, instance)) && !knowledges.contains(instance)) {
knowledges.add(instance);
notCancelled = true;
}
if (notCancelled) {
if (serverPlayer != null) {
MinecraftForge.EVENT_BUS.post(new KnowledgeEvent.addPost(serverPlayer, instance));
}
}
}
}
@Override
public void removeKnowledge(PlayerEntity player, Knowledge<?>... knowledge) {
List<Knowledge<?>> knowledges = playerToKnowledgeMap.get(player.getUniqueID());
for (Knowledge<?> instance : knowledge) {
MinecraftForge.EVENT_BUS.post(new KnowledgeEvent.remove(player, instance));
knowledges.remove(instance);
}
}
@Override
public List<Knowledge<?>> getKnowledgeAsList(UUID uuid) {
return playerToKnowledgeMap.get(uuid);
}
public List<Knowledge<?>> getKnowledgeAsList(PlayerEntity player) {
return playerToKnowledgeMap.get(player.getUniqueID());
}
@Override
public Knowledge<?>[] getKnowledgeAsArray(UUID uuid) {
return (Knowledge<?>[]) playerToKnowledgeMap.get(uuid).toArray();
}
@Override
public Knowledge<?>[] getKnowledgeAsArray(PlayerEntity player) {
return (Knowledge<?>[]) playerToKnowledgeMap.get(player.getUniqueID()).toArray();
}
@Override
public void clearKnowledge(PlayerEntity player) {
playerToKnowledgeMap.get(player.getUniqueID()).clear();
}
@Override
public CompoundNBT serializeNBT() {
final CompoundNBT nbt = new CompoundNBT();
final ListNBT listNBT = new ListNBT();
for (Map.Entry<UUID, List<Knowledge<?>>> entry : playerToKnowledgeMap.entrySet()) {
final CompoundNBT entryNBT = new CompoundNBT();
final ListNBT knowledge = new ListNBT();
entryNBT.putUniqueId(PLAYER_UUID, entry.getKey());
for (Knowledge<?> knowledges : entry.getValue()) {
listNBT.add(knowledges.serializeNBT());
}
entryNBT.put(PLAYER_KNOWLEDGE, knowledge);
listNBT.add(entryNBT);
}
nbt.put(PLAYER_INSTANCES, listNBT);
return nbt;
}
@Override
public void deserializeNBT(CompoundNBT nbt) {
final ListNBT instances = nbt.getList(PLAYER_INSTANCES, Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < instances.size(); i++) {
final CompoundNBT compoundNBT = instances.getCompound(i);
final UUID uuid = compoundNBT.getUniqueId(PLAYER_UUID);
final ListNBT knowledges = compoundNBT.getList(PLAYER_KNOWLEDGE, Constants.NBT.TAG_COMPOUND);
for (int j = 0; j < knowledges.size(); j++) {
final Knowledge<?> knowledge = new Knowledge<>();
knowledge.deserializeNBT(knowledges.getCompound(j));
if (playerToKnowledgeMap.computeIfAbsent(uuid, entry -> new ArrayList<>()).stream().noneMatch(tracked -> tracked == knowledge)) {
playerToKnowledgeMap.get(uuid).add(knowledge);
}
}
}
}
}
package com.teamacronymcoders.essence.util;
import com.hrznstudio.titanium.event.handler.EventManager;
import com.teamacronymcoders.essence.api.capabilities.EssenceCapability;
import com.teamacronymcoders.essence.api.knowledge.KnowledgeProvider;
import com.teamacronymcoders.essence.api.modified.IModifiedBlock;
import com.teamacronymcoders.essence.api.modified.IModifiedTool;
import com.teamacronymcoders.essence.api.recipe.tool.AxeStrippingRecipe;
import com.teamacronymcoders.essence.api.recipe.tool.HoeTillingRecipe;
import com.teamacronymcoders.essence.api.recipe.tool.ShovelPathingRecipe;
import com.teamacronymcoders.essence.capability.block.BlockModifierProvider;
import com.teamacronymcoders.essence.capability.itemstack.ItemStackModifierProvider;
import com.teamacronymcoders.essence.container.PortableCrafterContainer;
import com.teamacronymcoders.essence.serializable.loot.FieryLootModifier;
import com.teamacronymcoders.essence.serializable.recipe.infusion.InfusionTableSerializableRecipe;
import com.teamacronymcoders.essence.util.command.EssenceCommands;
import net.minecraft.block.Block;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipeSerializer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraft.world.dimension.OverworldDimension;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.common.loot.GlobalLootModifierSerializer;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
import static com.teamacronymcoders.essence.Essence.MODID;
public class EssenceEventHandlers {
public static void setup() {
setupRegistries();
setupModifierCapabilities();
setupKnowledgeCapabilities();
setupServer();
}
// Registration Handlers
private static void setupRegistries() {
EventManager.mod(RegistryEvent.Register.class)
.filter(register -> register.getGenericType().equals(IRecipeSerializer.class))
.process(register -> {
register.getRegistry().registerAll(
AxeStrippingRecipe.SERIALIZER,
HoeTillingRecipe.SERIALIZER,
InfusionTableSerializableRecipe.SERIALIZER,
ShovelPathingRecipe.SERIALIZER
);
}).subscribe();
EventManager.mod(RegistryEvent.Register.class)
.filter(register -> register.getGenericType().equals(GlobalLootModifierSerializer.class))
.process(register -> {
register.getRegistry().registerAll(
new FieryLootModifier.Serializer().setRegistryName(new ResourceLocation(MODID, "fiery_modifier"))
);
}).subscribe();
EventManager.mod(RegistryEvent.Register.class)
.filter(register -> register.getGenericType().equals(ContainerType.class))
.process(register -> {
register.getRegistry().registerAll(
IForgeContainerType.create(PortableCrafterContainer::new).setRegistryName(new ResourceLocation(MODID, "portable_crafter"))
);
}).subscribe();
}
private static void setupModifierCapabilities() {
EventManager.forge(AttachCapabilitiesEvent.class)
.filter(attach -> attach.getObject() instanceof ItemStack)
.process(attach -> {
if (attach.getObject() instanceof IModifiedTool) {
attach.addCapability(new ResourceLocation(MODID, "item_modifier_holder"), new ItemStackModifierProvider((ItemStack) attach.getObject()));
}
}).subscribe();
EventManager.forge(AttachCapabilitiesEvent.class)
.filter(attach -> attach.getObject() instanceof Block)
.process(attach -> {
if (attach.getObject() instanceof IModifiedBlock) {
attach.addCapability(new ResourceLocation(MODID, "block_modifier_holder"), new BlockModifierProvider());
}
}).subscribe();
}
private static void setupKnowledgeCapabilities() {
EventManager.forge(AttachCapabilitiesEvent.class)
.filter(attach -> attach.getObject() instanceof World && ((World) attach.getObject()).getDimension() instanceof OverworldDimension)
.process(attach -> {
attach.addCapability(new ResourceLocation(MODID, "knowledge"), new KnowledgeProvider());
}).subscribe();
EventManager.mod(EntityJoinWorldEvent.class)
.filter(join -> join.getEntity() instanceof PlayerEntity && join.getWorld().getDimension() instanceof OverworldDimension)
.process(join -> {
join.getWorld().getCapability(EssenceCapability.KNOWLEDGE).ifPresent(holder -> {
holder.addPlayerUUID((PlayerEntity) join.getEntity());
});
}).subscribe();
}
// Server Handlers
public static void setupServer() {
EventManager.forge(FMLServerStartingEvent.class)
.process(starting -> EssenceCommands.registerCommands(starting.getCommandDispatcher()))
.subscribe();
}
}
package com.teamacronymcoders.essence;
import com.hrznstudio.titanium.event.handler.EventManager;
import com.hrznstudio.titanium.module.ModuleController;
import com.hrznstudio.titanium.network.CompoundSerializableDataHandler;
import com.hrznstudio.titanium.recipe.generator.BlockItemModelGeneratorProvider;
import com.hrznstudio.titanium.recipe.serializer.JSONSerializableDataHandler;
import com.hrznstudio.titanium.tab.AdvancedTitaniumTab;
import com.teamacronymcoders.essence.api.capabilities.NBTCapabilityStorage;
import com.teamacronymcoders.essence.api.knowledge.IKnowledgeHolder;
import com.teamacronymcoders.essence.api.knowledge.KnowledgeHolder;
import com.teamacronymcoders.essence.api.recipe.infusion.SerializableModifier;
import com.teamacronymcoders.essence.capability.block.BlockModifierHolder;
import com.teamacronymcoders.essence.capability.itemstack.ItemStackModifierHolder;
import com.teamacronymcoders.essence.client.EssenceClientProxy;
import com.teamacronymcoders.essence.client.render.InfusionPedestalTESR;
import com.teamacronymcoders.essence.client.render.InfusionTableTESR;
import com.teamacronymcoders.essence.item.misc.wrench.EssenceWrench;
import com.teamacronymcoders.essence.item.misc.wrench.WrenchModeEnum;
import com.teamacronymcoders.essence.item.tool.EssenceShear;
import com.teamacronymcoders.essence.serializable.advancement.criterion.EssenceAdvancements;
import com.teamacronymcoders.essence.serializable.loot.condition.MatchModifier;
import com.teamacronymcoders.essence.serializable.provider.EssenceRecipeProvider;
import com.teamacronymcoders.essence.serializable.provider.EssenceSerializableProvider;
import com.teamacronymcoders.essence.serializable.provider.EssenceTagProvider;
import com.teamacronymcoders.essence.serializable.provider.EssenceToolRecipeProvider;
import com.teamacronymcoders.essence.util.*;
import com.teamacronymcoders.essence.util.config.EssenceGeneralConfig;
import com.teamacronymcoders.essence.util.config.EssenceModifierConfig;
import com.teamacronymcoders.essence.util.config.EssenceWorldGenConfig;
import com.teamacronymcoders.essence.util.helper.EssenceColorHelper;
import com.teamacronymcoders.essence.util.helper.EssenceItemstackModifierHelpers;
import com.teamacronymcoders.essence.util.network.PacketHandler;
import com.teamacronymcoders.essence.util.network.message.PacketItemStack;
import com.teamacronymcoders.essence.util.registration.EssenceFeatureRegistration;
import com.teamacronymcoders.essence.util.registration.EssenceKnowledgeRegistration;
import com.teamacronymcoders.essence.util.registration.EssenceModifierRegistration;
import com.teamacronymcoders.essence.util.registration.EssenceSoundRegistration;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.inventory.container.PlayerContainer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.storage.loot.conditions.LootConditionManager;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.client.event.RenderTooltipEvent;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import top.theillusivec4.curios.api.CuriosAPI;
import top.theillusivec4.curios.api.imc.CurioIMCMessage;
import java.awt.*;
import java.util.Collections;
import java.util.Random;
import java.util.function.Supplier;
@Mod("essence")
public class Essence extends ModuleController {
public static final String MODID = "essence";
public static final Random RANDOM = new Random();
public static final Logger LOGGER = LogManager.getLogger("Essence");
public static final AdvancedTitaniumTab CORE_TAB = new AdvancedTitaniumTab("essence_core", true) {
@Override
public boolean hasScrollbar() {
return true;
}
};
public static final AdvancedTitaniumTab TOOL_TAB = new AdvancedTitaniumTab("essence_tools", true) {
@Override
public boolean hasScrollbar() {
return true;
}
};
public static Essence instance;
public static EssenceCommonProxy proxy = DistExecutor.runForDist(() -> getClientProxy(), () -> EssenceCommonProxy::new);
public static PacketHandler handler = new PacketHandler();
public final String versionNumber;
@OnlyIn(Dist.CLIENT)
private static Supplier<EssenceCommonProxy> getClientProxy() {
return EssenceClientProxy::new;
}
public Essence() {
instance = this;
versionNumber = ModLoadingContext.get().getActiveContainer().getModInfo().getVersion().toString();
handler.init();
IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();
JSONSerializableDataHandler.map(SerializableModifier.class, EssenceSerializableObjectHandler::writeSerializableModifier, EssenceSerializableObjectHandler::readSerializableModifier);
JSONSerializableDataHandler.map(SerializableModifier[].class, EssenceSerializableObjectHandler::writeSerializableModifierArray, EssenceSerializableObjectHandler::readSerializableModifierArray);
JSONSerializableDataHandler.map(BlockState.class, EssenceSerializableObjectHandler::writeBlockState, EssenceSerializableObjectHandler::readBlockState);
CompoundSerializableDataHandler.map(SerializableModifier.class, EssenceSerializableObjectHandler::readSerializableModifier, EssenceSerializableObjectHandler::writeSerializableModifier);
CompoundSerializableDataHandler.map(SerializableModifier[].class, EssenceSerializableObjectHandler::readSerializableModifierArray, EssenceSerializableObjectHandler::writeSerializableModifierArray);
CompoundSerializableDataHandler.map(BlockState.class, EssenceSerializableObjectHandler::readBlockState, EssenceSerializableObjectHandler::writeBlockState);
eventBus.addListener(this::setup);
eventBus.addListener(this::clientSetup);
eventBus.addListener(this::setupCuriosIMC);
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, EssenceGeneralConfig.initialize(), "essence/general.toml");
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, EssenceWorldGenConfig.initialize(), "essence/worldgen.toml");
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, EssenceModifierConfig.initialize(), "essence/modifiers.toml");
EssenceFeatureRegistration.register(eventBus);
EssenceModifierRegistration.register(eventBus);
EssenceKnowledgeRegistration.register(eventBus);
EssenceSoundRegistration.register(eventBus);
EssenceAdvancements.setup();
EssenceEventHandlers.setup();
setupCreativeTabIcons();
DistExecutor.runWhenOn(Dist.CLIENT, () -> this::setupClientEventHandlers);
}
@Override
protected void initModules() {
addModule(EssenceModules.CORE);
addModule(EssenceModules.TOOLS);
}
@Override
public void addDataProvider(GatherDataEvent event) {
super.addDataProvider(event);
event.getGenerator().addProvider(new EssenceTagProvider.Items(event.getGenerator()));
event.getGenerator().addProvider(new EssenceTagProvider.Blocks(event.getGenerator()));
event.getGenerator().addProvider(new EssenceRecipeProvider(event.getGenerator()));
event.getGenerator().addProvider(new EssenceToolRecipeProvider(event.getGenerator()));
event.getGenerator().addProvider(new EssenceSerializableProvider(event.getGenerator()));
event.getGenerator().addProvider(new BlockItemModelGeneratorProvider(event.getGenerator(), MODID));
}
private void setupCuriosIMC(final InterModEnqueueEvent event) {
InterModComms.sendTo("curios", CuriosAPI.IMC.REGISTER_TYPE, () -> new CurioIMCMessage("backpack").setSize(1).setEnabled(true).setHidden(false));
InterModComms.sendTo("curios", CuriosAPI.IMC.REGISTER_ICON, () -> new Tuple<>("backpack", new ResourceLocation(MODID, "items/curios/empty_backpack_slot")));
}
private void setup(final FMLCommonSetupEvent event) {
CapabilityManager.INSTANCE.register(IKnowledgeHolder.class, NBTCapabilityStorage.create(CompoundNBT.class), KnowledgeHolder::new);
CapabilityManager.INSTANCE.register(ItemStackModifierHolder.class, NBTCapabilityStorage.create(ListNBT.class), ItemStackModifierHolder::new);
CapabilityManager.INSTANCE.register(BlockModifierHolder.class, NBTCapabilityStorage.create(ListNBT.class), BlockModifierHolder::new);
LootConditionManager.registerCondition(new MatchModifier.Serializer());
// TODO: Rework Worldgen Configs...
//EssenceGeneration.addFeaturesToWorldGen();
// TODO: Fix Dispenser Behaviour
//EssenceDispenseBehaviours.init();
}
@SuppressWarnings("unchecked")
private void clientSetup(final FMLClientSetupEvent event) {
RenderTypeLookup.setRenderLayer(EssenceObjectHolders.ESSENCE_WOOD_LEAVES, RenderType.getCutout());
RenderTypeLookup.setRenderLayer(EssenceObjectHolders.ESSENCE_WOOD_SAPLING, RenderType.getCutout());
RenderTypeLookup.setRenderLayer(EssenceObjectHolders.INFUSION_TABLE, RenderType.getTranslucent());
RenderTypeLookup.setRenderLayer(EssenceObjectHolders.INFUSION_PEDESTAL, RenderType.getTranslucent());
ClientRegistry.bindTileEntityRenderer(EssenceObjectHolders.INFUSION_TABLE.getTileEntityType(), InfusionTableTESR::new);
ClientRegistry.bindTileEntityRenderer(EssenceObjectHolders.INFUSION_PEDESTAL.getTileEntityType(), InfusionPedestalTESR::new);
// TODO: Reimplement once I get this working
//ScreenManager.registerFactory(PortableCrafterContainer.type, PortableCrafterContainerScreen::new);
}
private void setupCreativeTabIcons() {
CORE_TAB.addIconStacks(
new ItemStack(EssenceObjectHolders.ESSENCE_FLUID.getBucketFluid()),
new ItemStack(EssenceObjectHolders.ESSENCE_WOOD_SAPLING),
new ItemStack(EssenceObjectHolders.ESSENCE_WOOD_LEAVES),
new ItemStack(EssenceObjectHolders.ESSENCE_WOOD_LOG),
new ItemStack(EssenceObjectHolders.ESSENCE_WOOD_PLANKS)
);
TOOL_TAB.addIconStacks(
new ItemStack(EssenceObjectHolders.ESSENCE_AXE),
new ItemStack(EssenceObjectHolders.ESSENCE_PICKAXE),
new ItemStack(EssenceObjectHolders.ESSENCE_SHOVEL),
new ItemStack(EssenceObjectHolders.ESSENCE_SWORD),
new ItemStack(EssenceObjectHolders.ESSENCE_HOE),
new ItemStack(EssenceObjectHolders.ESSENCE_OMNITOOL));
}
@OnlyIn(Dist.CLIENT)
private void setupClientEventHandlers() {
// Atlas Texture Handler
EventManager.mod(TextureStitchEvent.Pre.class)
.filter(stitch -> stitch.getMap().getTextureLocation().equals(PlayerContainer.LOCATION_BLOCKS_TEXTURE))
.process(stitch -> {
stitch.addSprite(InfusionTableTESR.BOOK_TEXTURE);
}).subscribe();
// Rainbow Tooltip Handler
EventManager.forge(RenderTooltipEvent.Color.class)
.process(color -> {
boolean isShear = color.getStack().getItem() instanceof EssenceShear;
boolean hasRainbow = EssenceItemstackModifierHelpers.hasRainbowModifier(color.getStack());
if (isShear && hasRainbow) {
EssenceShear shear = (EssenceShear) color.getStack().getItem();
int rainbowVal = shear.getRainbowVal();
if (rainbowVal > 599) {
rainbowVal = 0;
}
Color colorVal = EssenceColorHelper.getColor(rainbowVal);
Color colorVal3 = EssenceColorHelper.getColor(rainbowVal + 60);
color.setBorderStart(colorVal.getRGB());
color.setBorderEnd(colorVal3.getRGB());
shear.setRainbowVal(rainbowVal + 1);
}
}).subscribe();
// Wrench-Mode Handler
EventManager.forge(InputEvent.MouseScrollEvent.class)
.process(scroll -> {
Minecraft minecraft = Minecraft.getInstance();
if (minecraft.player != null && minecraft.player.isShiftKeyDown()) {
ItemStack stack = minecraft.player.getHeldItemMainhand();
if (stack.getItem() instanceof EssenceWrench) {
double scrolling = scroll.getScrollDelta();
if (scrolling != 0) {
EssenceWrench wrench = (EssenceWrench) stack.getItem();
WrenchModeEnum mode = wrench.getMode();
WrenchModeEnum newMode = WrenchModeEnum.cycleMode(mode.ordinal());
wrench.setMode(newMode);
minecraft.player.sendStatusMessage(new TranslationTextComponent("wrench.mode.tooltip").appendText(": ").appendSibling(new TranslationTextComponent(newMode.getLocaleName())), true);
handler.sendToServer(new PacketItemStack(Hand.MAIN_HAND, Collections.singletonList(newMode)));
scroll.setCanceled(true);
}
}
}
}).subscribe();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment