Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions src/main/java/gregtech/common/EventHandlers.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 {

Expand All @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -87,7 +82,6 @@ public class MetaTileEntityCharcoalPileIgniter extends MultiblockControllerBase

public MetaTileEntityCharcoalPileIgniter(ResourceLocation metaTileEntityId) {
super(metaTileEntityId);
MinecraftForge.EVENT_BUS.register(MetaTileEntityCharcoalPileIgniter.class);
}

@Override
Expand Down Expand Up @@ -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));
}
Expand Down Expand Up @@ -481,65 +475,6 @@ public <T> T getCapability(Capability<T> 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;
Expand Down
Loading