Skip to content

Commit

Permalink
enhance teleporterMKII
Browse files Browse the repository at this point in the history
  • Loading branch information
Keriils committed Aug 7, 2024
1 parent 56af101 commit fc444b5
Show file tree
Hide file tree
Showing 10 changed files with 354 additions and 3 deletions.
15 changes: 15 additions & 0 deletions src/main/java/com/xir/NHUtilities/ClientProxy.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
package com.xir.NHUtilities;

import com.xir.NHUtilities.client.KeyBindings;
import com.xir.NHUtilities.client.KeyInputHandler;

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;

public class ClientProxy extends CommonProxy {

@Override
public void init(FMLInitializationEvent event) {
super.init(event);
FMLCommonHandler.instance()
.bus()
.register(new KeyInputHandler());
KeyBindings.init();
}
}
122 changes: 122 additions & 0 deletions src/main/java/com/xir/NHUtilities/Mixins/DE_GUITeleporter_Mixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package com.xir.NHUtilities.Mixins;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import com.brandon3055.brandonscore.common.utills.Teleporter;
import com.brandon3055.draconicevolution.client.gui.GUITeleporter;
import com.brandon3055.draconicevolution.common.ModItems;
import com.brandon3055.draconicevolution.common.items.tools.TeleporterMKII;
import com.brandon3055.draconicevolution.common.utills.InventoryUtils;

// Before modifying this code, please comment out the annotation below.
@SuppressWarnings("all")
@Mixin(value = GUITeleporter.class, remap = false)
public abstract class DE_GUITeleporter_Mixin {

@Shadow
private ItemStack teleporterItem;

@Shadow
private EntityPlayer player;

@Shadow
protected List<Teleporter.TeleportLocation> locations = new ArrayList<Teleporter.TeleportLocation>(0);

@Shadow
private int tick = 0;

@Shadow
private int selected = 0;

@Shadow
private int selectionOffset = 0;

@Shadow
private boolean showFuelLight = true;

private GUITeleporter theGUITeleporter = (GUITeleporter) ((Object) this);

private boolean isBaubles = false;

@Shadow
protected abstract void readDataFromItem(ItemStack teleporter);

private Teleporter.TeleportLocation getLocationSafely(int index) {
if (index < locations.size() && index >= 0) return locations.get(index);
return new Teleporter.TeleportLocation(0, 0, 0, 0, 0, 0, EnumChatFormatting.DARK_RED + "[Index Error]");
}

@Inject(method = "<init>", at = @At("TAIL"), cancellable = false)
private void setBaubles(EntityPlayer player, CallbackInfo ci) {
Optional<ItemStack> playerBaublesInventory = InventoryUtils
.getItemInPlayerBaublesInventory(player, TeleporterMKII.class);
if (player.getHeldItem() != null && player.getHeldItem()
.getItem() == ModItems.teleporterMKII) {
isBaubles = false;
} else if (playerBaublesInventory.isPresent()) {
teleporterItem = playerBaublesInventory.get();
readDataFromItem(playerBaublesInventory.get());
isBaubles = true;
}
}

/**
* @author Keriils
* @reason the simpler method
*/
@Overwrite(remap = false)
public void updateScreen() {
if (handOrBaubles()) {
theGUITeleporter.mc.displayGuiScreen(null);
theGUITeleporter.mc.setIngameFocus();
}

if (tick % 5 == 0 && locations.size() > 0
&& getLocationSafely(selected + selectionOffset).getDimensionName()
.equals("")
&& banHand()) {
if (isBaubles) {
readDataFromItem(
InventoryUtils.getItemInPlayerBaublesInventory(player, TeleporterMKII.class)
.get());
} else {
readDataFromItem(player.getHeldItem());
}
}

tick++;
if (tick >= 10) {
tick = 0;
showFuelLight = !showFuelLight;
}
}

private boolean handOrBaubles() {
if (player.isDead) return true;
if (!isBaubles) {
return player.getCurrentEquippedItem() == null || !player.getCurrentEquippedItem()
.isItemEqual(new ItemStack(ModItems.teleporterMKII));
}
return false;
}

private boolean banHand() {
if (isBaubles) return true;
return player.getHeldItem() != null && player.getHeldItem()
.getItem() == ModItems.teleporterMKII;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package com.xir.NHUtilities.Mixins;

import com.brandon3055.brandonscore.common.utills.InfoHelper;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;

import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import org.spongepowered.asm.mixin.Mixin;

import com.brandon3055.draconicevolution.common.items.tools.TeleporterMKII;

import baubles.api.BaubleType;
import baubles.api.IBauble;
import cpw.mods.fml.common.Optional;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.List;

// Before modifying this code, please comment out the annotation below.
@SuppressWarnings("all")
@Mixin(value = TeleporterMKII.class, remap = false)
@Optional.Interface(iface = "baubles.api.IBauble", modid = "Baubles")
public class DE_TeleporterMKII_Mixin implements IBauble {

@Inject(
method = "addInformation",
at = @At(value = "INVOKE", target = "Ljava/util/List;add(Ljava/lang/Object;)Z",ordinal = 3,shift = At.Shift.AFTER)
)
private void addInfo(ItemStack teleporter, EntityPlayer player, List list2, boolean extraInformation, CallbackInfo ci) {
if (InfoHelper.holdShiftForDetails(list2)){
list2.add(
EnumChatFormatting.GOLD + ""
+ EnumChatFormatting.ITALIC
+ StatCollector.translateToLocal("info.teleporterInfBaubles.txt"));
list2.add(
EnumChatFormatting.GOLD + ""
+ EnumChatFormatting.ITALIC
+ StatCollector.translateToLocal("info.teleporterInfBaublesButton.txt"));
}
}

@Override
@Optional.Method(modid = "Baubles")
public BaubleType getBaubleType(ItemStack itemstack) {
return BaubleType.UNIVERSAL;
}

@Override
@Optional.Method(modid = "Baubles")
public void onWornTick(ItemStack itemstack, EntityLivingBase player) {

}

@Override
@Optional.Method(modid = "Baubles")
public void onEquipped(ItemStack itemstack, EntityLivingBase player) {

}

@Override
@Optional.Method(modid = "Baubles")
public void onUnequipped(ItemStack itemstack, EntityLivingBase player) {

}

@Override
@Optional.Method(modid = "Baubles")
public boolean canEquip(ItemStack itemstack, EntityLivingBase player) {
return true;
}

@Override
@Optional.Method(modid = "Baubles")
public boolean canUnequip(ItemStack itemstack, EntityLivingBase player) {
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.xir.NHUtilities.Mixins;

import java.util.Optional;

import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;

import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;

import com.brandon3055.draconicevolution.common.ModItems;
import com.brandon3055.draconicevolution.common.items.tools.TeleporterMKII;
import com.brandon3055.draconicevolution.common.network.TeleporterPacket;
import com.brandon3055.draconicevolution.common.utills.InventoryUtils;

// Before modifying this code, please comment out the annotation below.
@SuppressWarnings("all")
@Mixin(value = TeleporterPacket.Handler.class, remap = false)
public class DE_TeleporterPacket_Mixin {

@Nullable
private ItemStack getHandOrBaublesTeleporter(EntityPlayerMP instance) {
Optional<ItemStack> playerBaublesInventory = InventoryUtils
.getItemInPlayerBaublesInventory(instance, TeleporterMKII.class);
if (instance.inventory.getCurrentItem() != null && instance.inventory.getCurrentItem()
.getItem() == ModItems.teleporterMKII) {
return instance.inventory.getCurrentItem();
} else if (playerBaublesInventory.isPresent()) {
return playerBaublesInventory.get();
}
return null;
}

@Redirect(
method = "onMessage(Lcom/brandon3055/draconicevolution/common/network/TeleporterPacket;Lcpw/mods/fml/common/network/simpleimpl/MessageContext;)Lcpw/mods/fml/common/network/simpleimpl/IMessage;",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/player/EntityPlayerMP;getHeldItem()Lnet/minecraft/item/ItemStack;"),
require = 1)
private ItemStack getTeleporterMKII(EntityPlayerMP instance) {
return getHandOrBaublesTeleporter(instance);
}
}
7 changes: 6 additions & 1 deletion src/main/java/com/xir/NHUtilities/Mixins/MixinPlugin.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.xir.NHUtilities.Mixins;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

Expand Down Expand Up @@ -31,7 +32,11 @@ public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {

@Override
public List<String> getMixins() {
return List.of();
ArrayList<String> Mixins = new ArrayList<>();
Mixins.add("DE_TeleporterMKII_Mixin");
Mixins.add("DE_TeleporterPacket_Mixin");
Mixins.add("DE_GUITeleporter_Mixin");
return Mixins;
}

@Override
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/xir/NHUtilities/NHUtilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
@Mod(
modid = NHUtilities.MODID,
version = Tags.VERSION,
name = NHUtilities.MOD_Name,
name = NHUtilities.MOD_NAME,
dependencies = "required-before:IC2; " + "required-before:gregtech; ",
acceptedMinecraftVersions = "[1.7.10]")
public class NHUtilities {

public static final String MODID = "NHUtilities";
public static final String MOD_Name = "NH Utilities";
public static final String MOD_NAME = "NH Utilities";
public static final Logger LOG = LogManager.getLogger(MODID);

@Mod.Instance
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/com/xir/NHUtilities/client/KeyBindings.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.xir.NHUtilities.client;

import net.minecraft.client.settings.KeyBinding;

import org.lwjgl.input.Keyboard;

import com.brandon3055.draconicevolution.common.lib.References;

import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public final class KeyBindings {

private KeyBindings() {}

public static final KeyBinding toggleTeleporterMKII;

static {
toggleTeleporterMKII = new KeyBinding("key.toggleTeleporterMKII", Keyboard.KEY_NONE, References.MODNAME);
}

public static void init() {
ClientRegistry.registerKeyBinding(toggleTeleporterMKII);
}
}
50 changes: 50 additions & 0 deletions src/main/java/com/xir/NHUtilities/client/KeyInputHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.xir.NHUtilities.client;

import java.util.Optional;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

import com.brandon3055.draconicevolution.DraconicEvolution;
import com.brandon3055.draconicevolution.client.gui.GuiHandler;
import com.brandon3055.draconicevolution.common.items.tools.TeleporterMKII;
import com.brandon3055.draconicevolution.common.utills.InventoryUtils;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

/**
* Registers keyInput event by external method for draconic evolution teleporterMKII.
* This method can also be used to register other key events for this mod if needed.
*/
public class KeyInputHandler {

@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onKeyInput(InputEvent.KeyInputEvent event) {
if (KeyBindings.toggleTeleporterMKII.isPressed()) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
World world = player.worldObj;
Optional<ItemStack> teleporterMKIIOptional = InventoryUtils
.getItemInPlayerBaublesInventory(player, TeleporterMKII.class);

if (teleporterMKIIOptional.isPresent()) {
if (world.isRemote) {
FMLNetworkHandler.openGui(
player,
DraconicEvolution.instance,
GuiHandler.GUIID_TELEPORTER,
world,
(int) player.posX,
(int) player.posY,
(int) player.posZ);
}
}
}
}
}
3 changes: 3 additions & 0 deletions src/main/resources/assets/NHUtilities/lang/en_US.lang
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
key.toggleTeleporterMKII=Toggle Enhanced Charm of Dislocation GUI
info.teleporterInfBaubles.txt=Support putting in-any-baubles
info.teleporterInfBaublesButton.txt=Support the use of - button - to open the baubles
3 changes: 3 additions & 0 deletions src/main/resources/assets/NHUtilities/lang/zh_CN.lang
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
key.toggleTeleporterMKII=开关高级传送器GUI
info.teleporterInfBaubles.txt=支持放入-任意-饰品栏目
info.teleporterInfBaublesButton.txt=支持使用-按键-打开饰品

0 comments on commit fc444b5

Please sign in to comment.