diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index ecbe6b16097..18f708a5de7 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -2,9 +2,13 @@ import gregtech.api.GTValues; import gregtech.api.block.IWalkingSpeedBonus; +import gregtech.api.capability.IMultiblockController; import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.metaitem.MetaItem; +import gregtech.api.items.metaitem.stats.IItemBehaviour; import gregtech.api.items.toolitem.ToolClasses; import gregtech.api.items.toolitem.ToolHelper; +import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; import gregtech.api.pipenet.longdist.LongDistanceNetwork; import gregtech.api.pipenet.tile.IPipeTile; @@ -19,8 +23,10 @@ import gregtech.common.items.MetaItems; import gregtech.common.items.armor.IStepAssist; import gregtech.common.items.armor.PowerlessJetpack; +import gregtech.common.items.behaviors.LighterBehaviour; import gregtech.common.items.behaviors.ToggleEnergyConsumerBehavior; import gregtech.common.metatileentities.multi.electric.centralmonitor.MetaTileEntityCentralMonitor; +import gregtech.common.metatileentities.primitive.MetaTileEntityCharcoalPileIgniter; import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityOtherPlayerMP; @@ -36,11 +42,17 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Items; import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemFireball; +import net.minecraft.item.ItemFlintAndSteel; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraft.world.EnumDifficulty; import net.minecraftforge.client.event.FOVUpdateEvent; @@ -106,6 +118,60 @@ public static void onPlayerInteractionRightClickBlock(PlayerInteractEvent.RightC } ItemStack stack = event.getItemStack(); + MetaTileEntity mte = null; + if (tileEntity instanceof IGregTechTileEntity) { + mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + } + if (mte instanceof MetaTileEntityCharcoalPileIgniter && ((IMultiblockController) mte).isStructureFormed()) { + if (event.getSide().isClient()) { + event.setCanceled(true); + event.getEntityPlayer().swingArm(EnumHand.MAIN_HAND); + } else if (!mte.isActive()) { + boolean shouldActivate = false; + if (stack.getItem() instanceof ItemFlintAndSteel) { + // flint and steel + stack.damageItem(1, event.getEntityPlayer()); + + // flint and steel sound does not get played when handled like this + event.getWorld().playSound(null, event.getPos(), SoundEvents.ITEM_FLINTANDSTEEL_USE, + SoundCategory.PLAYERS, 1.0F, 1.0F); + + shouldActivate = true; + } else if (stack.getItem() instanceof ItemFireball) { + // fire charge + stack.shrink(1); + + // fire charge sound does not get played when handled like this + event.getWorld().playSound(null, event.getPos(), SoundEvents.ITEM_FIRECHARGE_USE, + SoundCategory.PLAYERS, 1.0F, 1.0F); + + shouldActivate = true; + } else if (stack.getItem() instanceof MetaItem) { + // lighters + MetaItem.MetaValueItem valueItem = ((MetaItem) stack.getItem()).getItem(stack); + if (valueItem != null) { + for (IItemBehaviour behaviour : valueItem.getBehaviours()) { + if (behaviour instanceof LighterBehaviour && + ((LighterBehaviour) behaviour).consumeFuel(event.getEntityPlayer(), stack)) { + // lighter sound does not get played when handled like this + event.getWorld().playSound(null, event.getPos(), SoundEvents.ITEM_FLINTANDSTEEL_USE, + SoundCategory.PLAYERS, 1.0F, 1.0F); + + shouldActivate = true; + break; + } + } + } + } + + if (shouldActivate) { + ((MetaTileEntityCharcoalPileIgniter) mte).setActive(true); + event.setCancellationResult(EnumActionResult.FAIL); + event.setCanceled(true); + } + } + } + if (!stack.isEmpty() && stack.getItem() == Items.FLINT_AND_STEEL) { if (!event.getWorld().isRemote && !event.getEntityPlayer().capabilities.isCreativeMode && GTValues.RNG.nextInt(100) >= ConfigHolder.misc.flintChanceToCreateFire) { diff --git a/src/main/java/gregtech/common/items/behaviors/monitorplugin/FakeGuiPluginBehavior.java b/src/main/java/gregtech/common/items/behaviors/monitorplugin/FakeGuiPluginBehavior.java index 3328ee49a26..7c286d1f85b 100644 --- a/src/main/java/gregtech/common/items/behaviors/monitorplugin/FakeGuiPluginBehavior.java +++ b/src/main/java/gregtech/common/items/behaviors/monitorplugin/FakeGuiPluginBehavior.java @@ -6,7 +6,11 @@ import gregtech.api.gui.ModularUI; import gregtech.api.gui.Widget; import gregtech.api.gui.impl.FakeModularGui; -import gregtech.api.gui.widgets.*; +import gregtech.api.gui.widgets.ClickButtonWidget; +import gregtech.api.gui.widgets.ImageWidget; +import gregtech.api.gui.widgets.LabelWidget; +import gregtech.api.gui.widgets.SimpleTextWidget; +import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.items.behavior.MonitorPluginBaseBehavior; import gregtech.api.items.behavior.ProxyHolderPluginBehavior; import gregtech.api.items.toolitem.ToolClasses; @@ -33,13 +37,15 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; -import java.lang.reflect.Method; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class FakeGuiPluginBehavior extends ProxyHolderPluginBehavior { @@ -51,11 +57,6 @@ public class FakeGuiPluginBehavior extends ProxyHolderPluginBehavior { private BlockPos partPos; private FakeModularUIPluginContainer fakeModularUIContainer; private GregFakePlayer fakePlayer; - private static final Method methodCreateUI = ObfuscationReflectionHelper.findMethod(MetaTileEntity.class, - "createUI", ModularUI.class, EntityPlayer.class); - static { - methodCreateUI.setAccessible(true); - } public void setConfig(int partIndex) { if (this.partIndex == partIndex || partIndex < 0) return; @@ -108,7 +109,7 @@ public void createFakeGui() { } return; } - ModularUI ui = (ModularUI) methodCreateUI.invoke(mte, fakePlayer); + ModularUI ui = mte.getModularUI(fakePlayer); if (ui == null) { fakeModularUIContainer = null; if (this.screen.getWorld().isRemote) { diff --git a/src/main/java/gregtech/common/metatileentities/primitive/MetaTileEntityCharcoalPileIgniter.java b/src/main/java/gregtech/common/metatileentities/primitive/MetaTileEntityCharcoalPileIgniter.java index ecbd0241f1d..bf8cb66f463 100644 --- a/src/main/java/gregtech/common/metatileentities/primitive/MetaTileEntityCharcoalPileIgniter.java +++ b/src/main/java/gregtech/common/metatileentities/primitive/MetaTileEntityCharcoalPileIgniter.java @@ -3,41 +3,36 @@ import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; -import gregtech.api.capability.IMultiblockController; import gregtech.api.capability.IWorkable; -import gregtech.api.items.metaitem.MetaItem; -import gregtech.api.items.metaitem.stats.IItemBehaviour; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; import gregtech.api.metatileentity.multiblock.IMultiblockPart; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; -import gregtech.api.pattern.*; +import gregtech.api.pattern.BlockPattern; +import gregtech.api.pattern.FactoryBlockPattern; +import gregtech.api.pattern.MultiblockShapeInfo; +import gregtech.api.pattern.PatternMatchContext; +import gregtech.api.pattern.TraceabilityPredicate; import gregtech.api.util.Mods; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; import gregtech.client.utils.TooltipHelper; import gregtech.common.blocks.MetaBlocks; -import gregtech.common.items.behaviors.LighterBehaviour; import gregtech.common.metatileentities.MetaTileEntities; import net.minecraft.block.Block; import net.minecraft.client.resources.I18n; import net.minecraft.init.Blocks; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemFireball; -import net.minecraft.item.ItemFlintAndSteel; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.Optional; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -87,7 +82,6 @@ public class MetaTileEntityCharcoalPileIgniter extends MultiblockControllerBase public MetaTileEntityCharcoalPileIgniter(ResourceLocation metaTileEntityId) { super(metaTileEntityId); - MinecraftForge.EVENT_BUS.register(MetaTileEntityCharcoalPileIgniter.class); } @Override @@ -281,7 +275,7 @@ private static boolean isBlockFloor(@NotNull World world, @NotNull BlockPos.Muta return world.getBlockState(pos.move(EnumFacing.DOWN)).getBlock() == Blocks.BRICK_BLOCK; } - private void setActive(boolean active) { + public void setActive(boolean active) { this.isActive = active; writeCustomData(GregtechDataCodes.WORKABLE_ACTIVE, buf -> buf.writeBoolean(this.isActive)); } @@ -481,65 +475,6 @@ public T getCapability(Capability capability, EnumFacing side) { return super.getCapability(capability, side); } - @SubscribeEvent - public static void onItemUse(@NotNull PlayerInteractEvent.RightClickBlock event) { - TileEntity tileEntity = event.getWorld().getTileEntity(event.getPos()); - MetaTileEntity mte = null; - if (tileEntity instanceof IGregTechTileEntity) { - mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); - } - if (mte instanceof MetaTileEntityCharcoalPileIgniter && ((IMultiblockController) mte).isStructureFormed()) { - if (event.getSide().isClient()) { - event.setCanceled(true); - event.getEntityPlayer().swingArm(EnumHand.MAIN_HAND); - } else if (!mte.isActive()) { - boolean shouldActivate = false; - ItemStack stack = event.getItemStack(); - if (stack.getItem() instanceof ItemFlintAndSteel) { - // flint and steel - stack.damageItem(1, event.getEntityPlayer()); - - // flint and steel sound does not get played when handled like this - event.getWorld().playSound(null, event.getPos(), SoundEvents.ITEM_FLINTANDSTEEL_USE, - SoundCategory.PLAYERS, 1.0F, 1.0F); - - shouldActivate = true; - } else if (stack.getItem() instanceof ItemFireball) { - // fire charge - stack.shrink(1); - - // fire charge sound does not get played when handled like this - event.getWorld().playSound(null, event.getPos(), SoundEvents.ITEM_FIRECHARGE_USE, - SoundCategory.PLAYERS, 1.0F, 1.0F); - - shouldActivate = true; - } else if (stack.getItem() instanceof MetaItem) { - // lighters - MetaItem.MetaValueItem valueItem = ((MetaItem) stack.getItem()).getItem(stack); - if (valueItem != null) { - for (IItemBehaviour behaviour : valueItem.getBehaviours()) { - if (behaviour instanceof LighterBehaviour && - ((LighterBehaviour) behaviour).consumeFuel(event.getEntityPlayer(), stack)) { - // lighter sound does not get played when handled like this - event.getWorld().playSound(null, event.getPos(), SoundEvents.ITEM_FLINTANDSTEEL_USE, - SoundCategory.PLAYERS, 1.0F, 1.0F); - - shouldActivate = true; - break; - } - } - } - } - - if (shouldActivate) { - ((MetaTileEntityCharcoalPileIgniter) mte).setActive(true); - event.setCancellationResult(EnumActionResult.FAIL); - event.setCanceled(true); - } - } - } - } - @Override public boolean hasFrontFacing() { return false;