2018-09-13 12:03:28 -04:00
|
|
|
package noppes.npcs.client;
|
|
|
|
|
|
|
|
|
|
|
2023-01-12 21:33:06 -05:00
|
|
|
import cpw.mods.fml.client.registry.ClientRegistry;
|
|
|
|
|
import cpw.mods.fml.client.registry.RenderingRegistry;
|
|
|
|
|
import cpw.mods.fml.common.FMLCommonHandler;
|
|
|
|
|
import cpw.mods.fml.common.ObfuscationReflectionHelper;
|
2018-09-13 12:03:28 -04:00
|
|
|
import net.minecraft.client.Minecraft;
|
|
|
|
|
import net.minecraft.client.gui.GuiScreen;
|
|
|
|
|
import net.minecraft.client.model.ModelBiped;
|
|
|
|
|
import net.minecraft.client.particle.EntityFX;
|
|
|
|
|
import net.minecraft.client.particle.EntityFlameFX;
|
|
|
|
|
import net.minecraft.client.particle.EntitySmokeFX;
|
|
|
|
|
import net.minecraft.client.renderer.RenderGlobal;
|
|
|
|
|
import net.minecraft.client.renderer.texture.TextureManager;
|
|
|
|
|
import net.minecraft.client.resources.IReloadableResourceManager;
|
|
|
|
|
import net.minecraft.client.settings.KeyBinding;
|
|
|
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
|
import net.minecraft.inventory.Container;
|
|
|
|
|
import net.minecraft.item.Item;
|
2021-10-19 02:49:46 -05:00
|
|
|
import net.minecraft.stats.Achievement;
|
2018-09-13 12:03:28 -04:00
|
|
|
import net.minecraft.util.ChatComponentText;
|
|
|
|
|
import net.minecraft.util.ReportedException;
|
|
|
|
|
import net.minecraft.util.ResourceLocation;
|
|
|
|
|
import net.minecraft.world.World;
|
|
|
|
|
import net.minecraftforge.client.MinecraftForgeClient;
|
|
|
|
|
import net.minecraftforge.common.MinecraftForge;
|
2021-10-19 19:49:43 -05:00
|
|
|
import net.minecraftforge.common.util.FakePlayer;
|
2023-01-12 21:33:06 -05:00
|
|
|
import noppes.npcs.*;
|
|
|
|
|
import noppes.npcs.api.IWorld;
|
|
|
|
|
import noppes.npcs.blocks.tiles.*;
|
2023-03-22 16:06:22 -04:00
|
|
|
import noppes.npcs.client.controllers.*;
|
2018-09-13 12:03:28 -04:00
|
|
|
import noppes.npcs.client.fx.EntityElementalStaffFX;
|
|
|
|
|
import noppes.npcs.client.fx.EntityEnderFX;
|
|
|
|
|
import noppes.npcs.client.fx.EntityRainbowFX;
|
2021-09-30 00:56:49 -05:00
|
|
|
import noppes.npcs.client.gui.*;
|
2022-01-12 04:44:08 -06:00
|
|
|
import noppes.npcs.client.gui.custom.GuiCustom;
|
2023-01-10 16:54:49 -05:00
|
|
|
import noppes.npcs.client.gui.global.*;
|
2023-01-12 21:33:06 -05:00
|
|
|
import noppes.npcs.client.gui.mainmenu.*;
|
|
|
|
|
import noppes.npcs.client.gui.player.*;
|
2018-09-13 12:03:28 -04:00
|
|
|
import noppes.npcs.client.gui.player.companion.GuiNpcCompanionInv;
|
|
|
|
|
import noppes.npcs.client.gui.player.companion.GuiNpcCompanionStats;
|
|
|
|
|
import noppes.npcs.client.gui.player.companion.GuiNpcCompanionTalents;
|
|
|
|
|
import noppes.npcs.client.gui.questtypes.GuiNpcQuestTypeItem;
|
2023-03-15 22:24:47 -05:00
|
|
|
import noppes.npcs.client.gui.GuiNpcRemoteEditor;
|
2023-01-12 21:33:06 -05:00
|
|
|
import noppes.npcs.client.gui.roles.*;
|
2021-09-30 21:44:30 -05:00
|
|
|
import noppes.npcs.client.gui.script.GuiScriptGlobal;
|
2022-05-11 01:10:31 -05:00
|
|
|
import noppes.npcs.client.gui.script.GuiScriptItem;
|
2021-04-27 11:56:36 -04:00
|
|
|
import noppes.npcs.client.model.*;
|
|
|
|
|
import noppes.npcs.client.renderer.*;
|
2023-01-12 21:33:06 -05:00
|
|
|
import noppes.npcs.client.renderer.blocks.*;
|
2023-03-19 02:04:47 -05:00
|
|
|
import noppes.npcs.client.renderer.customitem.CustomItemRenderer;
|
2023-01-07 00:21:08 -05:00
|
|
|
import noppes.npcs.config.ConfigClient;
|
|
|
|
|
import noppes.npcs.config.ConfigMain;
|
2018-09-13 12:03:28 -04:00
|
|
|
import noppes.npcs.config.StringCache;
|
|
|
|
|
import noppes.npcs.constants.EnumGuiType;
|
2022-01-12 04:44:08 -06:00
|
|
|
import noppes.npcs.containers.*;
|
2022-05-24 01:07:50 -05:00
|
|
|
import noppes.npcs.controllers.data.PlayerData;
|
2021-04-27 11:56:36 -04:00
|
|
|
import noppes.npcs.entity.*;
|
2023-03-17 02:36:28 -05:00
|
|
|
import noppes.npcs.entity.data.ModelData;
|
|
|
|
|
import noppes.npcs.entity.data.ModelPartData;
|
2022-05-11 01:10:31 -05:00
|
|
|
import noppes.npcs.items.ItemScripted;
|
2018-09-13 12:03:28 -04:00
|
|
|
import org.lwjgl.input.Keyboard;
|
2024-01-11 03:50:10 -05:00
|
|
|
import tconstruct.client.tabs.InventoryTabCustomNpc;
|
2018-09-13 12:03:28 -04:00
|
|
|
import tconstruct.client.tabs.InventoryTabVanilla;
|
|
|
|
|
import tconstruct.client.tabs.TabRegistry;
|
2023-01-12 21:33:06 -05:00
|
|
|
|
|
|
|
|
import java.io.BufferedWriter;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileWriter;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.util.Random;
|
2018-09-13 12:03:28 -04:00
|
|
|
|
|
|
|
|
public class ClientProxy extends CommonProxy {
|
2024-01-11 03:51:48 -05:00
|
|
|
public static KeyBinding QuestLog;
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public static FontContainer Font;
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public void load() {
|
2023-01-07 00:21:08 -05:00
|
|
|
Font = new FontContainer(ConfigClient.FontType, ConfigClient.FontSize);
|
2018-09-13 12:03:28 -04:00
|
|
|
createFolders();
|
|
|
|
|
CustomNpcs.Channel.register(new PacketHandlerClient());
|
|
|
|
|
CustomNpcs.ChannelPlayer.register(new PacketHandlerPlayer());
|
|
|
|
|
new MusicController();
|
2022-07-13 19:27:27 -05:00
|
|
|
new ScriptSoundController();
|
2018-09-13 12:03:28 -04:00
|
|
|
|
|
|
|
|
RenderingRegistry.registerEntityRenderingHandler(EntityNpcPony.class, new RenderNPCPony());
|
|
|
|
|
RenderingRegistry.registerEntityRenderingHandler(EntityNpcCrystal.class, new RenderNpcCrystal(new ModelNpcCrystal(0.5F)));
|
|
|
|
|
RenderingRegistry.registerEntityRenderingHandler(EntityNpcDragon.class, new RenderNpcDragon(new ModelNpcDragon(0.0F), 0.5F));
|
|
|
|
|
RenderingRegistry.registerEntityRenderingHandler(EntityNpcSlime.class, new RenderNpcSlime(new ModelNpcSlime(16), new ModelNpcSlime(0), 0.25F));
|
|
|
|
|
RenderingRegistry.registerEntityRenderingHandler(EntityProjectile.class, new RenderProjectile());
|
2021-04-27 21:05:00 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
RenderingRegistry.registerEntityRenderingHandler(EntityCustomNpc.class, new RenderCustomNpc());
|
2021-04-27 21:05:00 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
RenderingRegistry.registerEntityRenderingHandler(EntityNPCGolem.class, new RenderNPCHumanMale(
|
|
|
|
|
new ModelNPCGolem(0), new ModelNPCGolem(1F), new ModelNPCGolem(0.5F)));
|
|
|
|
|
FMLCommonHandler.instance().bus().register(new ClientTickHandler());
|
|
|
|
|
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileBlockAnvil.class, new BlockCarpentryBenchRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileMailbox.class, new BlockMailboxRenderer());
|
|
|
|
|
RenderingRegistry.registerBlockHandler(new BlockBorderRenderer());
|
2021-04-30 04:48:06 -04:00
|
|
|
|
2023-01-07 00:21:08 -05:00
|
|
|
if(!ConfigMain.DisableExtraBlock){
|
2018-09-13 12:03:28 -04:00
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileBanner.class, new BlockBannerRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileWallBanner.class, new BlockWallBannerRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileTallLamp.class, new BlockTallLampRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileChair.class, new BlockChairRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileWeaponRack.class, new BlockWeaponRackRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileCrate.class, new BlockCrateRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileCouchWool.class, new BlockCouchWoolRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileCouchWood.class, new BlockCouchWoodRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileTable.class, new BlockTableRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileCandle.class, new BlockCandleRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileLamp.class, new BlockLampRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileStool.class, new BlockStoolRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileBigSign.class, new BlockBigSignRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileBarrel.class, new BlockBarrelRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileCampfire.class, new BlockCampfireRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileTombstone.class, new BlockTombstoneRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileShelf.class, new BlockShelfRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileSign.class, new BlockSignRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileBeam.class, new BlockBeamRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileBook.class, new BlockBookRenderer());
|
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TilePedestal.class, new BlockPedestalRenderer());
|
2024-01-21 10:58:14 +03:00
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileScripted.class, new BlockScriptedRenderer());
|
2018-09-13 12:03:28 -04:00
|
|
|
RenderingRegistry.registerBlockHandler(new BlockBloodRenderer());
|
|
|
|
|
}
|
|
|
|
|
Minecraft mc = Minecraft.getMinecraft();
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2024-01-11 03:51:48 -05:00
|
|
|
QuestLog = new KeyBinding("Quest Log", Keyboard.KEY_L, "key.categories.gameplay");
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2024-01-11 03:51:48 -05:00
|
|
|
ClientRegistry.registerKeyBinding(QuestLog);
|
2018-09-13 12:03:28 -04:00
|
|
|
mc.gameSettings.loadOptions();
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
new PresetController(CustomNpcs.Dir);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-01-07 00:21:08 -05:00
|
|
|
if(ConfigMain.EnableUpdateChecker){
|
2018-09-13 12:03:28 -04:00
|
|
|
VersionChecker checker = new VersionChecker();
|
|
|
|
|
checker.start();
|
|
|
|
|
}
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
ClientCloneController.Instance = new ClientCloneController();
|
2023-03-22 16:06:22 -04:00
|
|
|
ClientTagMapController.Instance = new ClientTagMapController();
|
2018-09-13 12:03:28 -04:00
|
|
|
|
2021-10-19 02:49:46 -05:00
|
|
|
MinecraftForge.EVENT_BUS.register(new ClientEventHandler());
|
|
|
|
|
|
2023-01-07 00:21:08 -05:00
|
|
|
if(ConfigClient.InventoryGuiEnabled){
|
2021-10-19 02:49:46 -05:00
|
|
|
MinecraftForge.EVENT_BUS.register(new TabRegistry());
|
|
|
|
|
|
|
|
|
|
if (TabRegistry.getTabList().size() < 2){
|
|
|
|
|
TabRegistry.registerTab(new InventoryTabVanilla());
|
|
|
|
|
}
|
2024-01-11 03:50:10 -05:00
|
|
|
TabRegistry.registerTab(new InventoryTabCustomNpc());
|
2021-10-19 02:49:46 -05:00
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
|
2021-10-19 19:49:43 -05:00
|
|
|
public FakePlayer getCommandPlayer(IWorld world) {
|
|
|
|
|
return (FakePlayer)(new EntityCustomNpc(world.getMCWorld())).getFakePlayer();
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
private void createFolders() {
|
|
|
|
|
File file = new File(CustomNpcs.Dir,"assets/customnpcs");
|
|
|
|
|
if(!file.exists())
|
|
|
|
|
file.mkdirs();
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
File check = new File(file,"sounds");
|
|
|
|
|
if(!check.exists())
|
|
|
|
|
check.mkdir();
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
File json = new File(file, "sounds.json");
|
|
|
|
|
if(!json.exists()){
|
|
|
|
|
try {
|
|
|
|
|
json.createNewFile();
|
|
|
|
|
BufferedWriter writer = new BufferedWriter(new FileWriter(json));
|
|
|
|
|
writer.write("{\n\n}");
|
|
|
|
|
writer.close();
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
check = new File(file,"textures");
|
|
|
|
|
if(!check.exists())
|
|
|
|
|
check.mkdir();
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
File cache = new File(check,"cache");
|
|
|
|
|
if(!cache.exists())
|
|
|
|
|
cache.mkdir();
|
|
|
|
|
((IReloadableResourceManager)Minecraft.getMinecraft().getResourceManager()).registerReloadListener(new CustomNpcResourceListener());
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 21:44:30 -05:00
|
|
|
public static PlayerData playerData = new PlayerData();
|
|
|
|
|
@Override
|
|
|
|
|
public PlayerData getPlayerData(EntityPlayer player) {
|
|
|
|
|
if (player.getUniqueID() == Minecraft.getMinecraft().thePlayer.getUniqueID()) {
|
|
|
|
|
if (playerData.player != player) {
|
|
|
|
|
playerData.player = player;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return playerData;
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
@Override
|
|
|
|
|
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if (ID > EnumGuiType.values().length)
|
|
|
|
|
return null;
|
|
|
|
|
EnumGuiType gui = EnumGuiType.values()[ID];
|
|
|
|
|
EntityNPCInterface npc = NoppesUtil.getLastNpc();
|
|
|
|
|
Container container = this.getContainer(gui, player, x, y, z, npc);
|
|
|
|
|
return getGui(npc, gui, container, x, y, z);
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-19 02:49:46 -05:00
|
|
|
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
private GuiScreen getGui(EntityNPCInterface npc, EnumGuiType gui, Container container, int x, int y, int z) {
|
2023-05-17 11:43:43 -04:00
|
|
|
if (gui == EnumGuiType.MainMenuDisplay) {
|
|
|
|
|
if (npc != null)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcDisplay(npc);
|
|
|
|
|
else
|
|
|
|
|
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Unable to find npc"));
|
2023-05-17 11:43:43 -04:00
|
|
|
} else if (gui == EnumGuiType.MainMenuStats)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcStats(npc);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.MainMenuInv)
|
|
|
|
|
return new GuiNPCInv(npc, (ContainerNPCInv) container);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.MainMenuAdvanced)
|
|
|
|
|
return new GuiNpcAdvanced(npc);
|
|
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.QuestReward)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcQuestReward(npc, (ContainerNpcQuestReward) container);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.QuestItem)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcQuestTypeItem(npc, (ContainerNpcQuestTypeItem) container);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.MovingPath)
|
|
|
|
|
return new GuiNpcPather(npc);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.ManageFactions)
|
|
|
|
|
return new GuiNPCManageFactions(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-01-10 16:54:49 -05:00
|
|
|
else if (gui == EnumGuiType.ManageTags)
|
|
|
|
|
return new GuiNPCManageTags(npc);
|
|
|
|
|
|
2023-02-06 23:17:05 -06:00
|
|
|
else if (gui == EnumGuiType.ManageAnimations) {
|
2023-03-15 22:24:47 -05:00
|
|
|
EntityCustomNpc animNpc;
|
2023-11-08 22:38:45 -05:00
|
|
|
boolean save;
|
2023-03-15 22:24:47 -05:00
|
|
|
if (npc != null) {
|
|
|
|
|
animNpc = new EntityCustomNpc(npc.worldObj);
|
|
|
|
|
animNpc.copyDataFrom(npc, true);
|
|
|
|
|
animNpc.display.showName = 1;
|
|
|
|
|
animNpc.display.showBossBar = 0;
|
2023-11-08 22:38:45 -05:00
|
|
|
save = true;
|
2023-03-15 22:24:47 -05:00
|
|
|
} else {
|
|
|
|
|
animNpc = new EntityCustomNpc(Minecraft.getMinecraft().theWorld);
|
|
|
|
|
animNpc.display.texture = "customnpcs:textures/entity/humanmale/AnimationBody.png";
|
2023-11-08 22:38:45 -05:00
|
|
|
save = false;
|
2023-03-15 22:24:47 -05:00
|
|
|
}
|
2023-11-08 22:38:45 -05:00
|
|
|
return new GuiNPCManageAnimations(animNpc, save);
|
2023-11-01 21:39:08 -04:00
|
|
|
}
|
|
|
|
|
else if (gui == EnumGuiType.ManageLinked)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNPCManageLinkedNpc(npc);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.ManageTransport)
|
|
|
|
|
return new GuiNPCManageTransporters(npc);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.ManageRecipes)
|
2023-05-17 11:43:43 -04:00
|
|
|
return new GuiNpcManageRecipes(npc, (ContainerManageRecipes) container);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.ManageDialogs)
|
|
|
|
|
return new GuiNPCManageDialogs(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.ManageQuests)
|
|
|
|
|
return new GuiNPCManageQuest(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.ManageBanks)
|
|
|
|
|
return new GuiNPCManageBanks(npc, (ContainerManageBanks) container);
|
2018-09-13 12:03:28 -04:00
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.MainMenuGlobal)
|
|
|
|
|
return new GuiNPCGlobalMainMenu(npc);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.MainMenuAI)
|
|
|
|
|
return new GuiNpcAI(npc);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.PlayerFollowerHire)
|
|
|
|
|
return new GuiNpcFollowerHire(npc, (ContainerNPCFollowerHire) container);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.PlayerFollower)
|
|
|
|
|
return new GuiNpcFollower(npc, (ContainerNPCFollower) container);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.PlayerTrader)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNPCTrader(npc, (ContainerNPCTrader) container);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.PlayerBankSmall || gui == EnumGuiType.PlayerBankUnlock || gui == EnumGuiType.PlayerBankUprade || gui == EnumGuiType.PlayerBankLarge)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNPCBankChest(npc, (ContainerNPCBankInterface) container);
|
|
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.PlayerTransporter)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiTransportSelection(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-11-16 15:17:52 -05:00
|
|
|
else if (gui == EnumGuiType.Script)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiScript(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2022-05-11 01:10:31 -05:00
|
|
|
else if (gui == EnumGuiType.ScriptItem)
|
2023-03-16 04:27:19 -05:00
|
|
|
return new GuiScriptItem();
|
2022-05-11 01:10:31 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.PlayerAnvil)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcCarpentryBench((ContainerCarpentryBench) container);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.SetupFollower)
|
2023-05-17 11:43:43 -04:00
|
|
|
return new GuiNpcFollowerSetup(npc, (ContainerNPCFollowerSetup) container);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.SetupItemGiver)
|
|
|
|
|
return new GuiNpcItemGiver(npc, (ContainerNpcItemGiver) container);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.SetupTrader)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcTraderSetup(npc, (ContainerNPCTraderSetup) container);
|
|
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.SetupTransporter)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcTransporter(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.SetupBank)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcBankSetup(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.NpcRemote && Minecraft.getMinecraft().currentScreen == null)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiNpcRemoteEditor();
|
|
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.ScriptEvent && Minecraft.getMinecraft().currentScreen == null)
|
2021-09-30 21:44:30 -05:00
|
|
|
return new GuiScriptGlobal();
|
2021-09-30 00:56:49 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.PlayerMailman)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiMailmanWrite((ContainerMail) container, x == 1, y == 1);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.PlayerMailbox)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiMailbox();
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.MerchantAdd)
|
2018-09-13 12:03:28 -04:00
|
|
|
return new GuiMerchantAdd();
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
else if (gui == EnumGuiType.Crate)
|
|
|
|
|
return new GuiCrate((ContainerCrate) container);
|
2018-09-13 12:03:28 -04:00
|
|
|
|
|
|
|
|
else if(gui == EnumGuiType.NpcDimensions)
|
|
|
|
|
return new GuiNpcDimension();
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if(gui == EnumGuiType.Border)
|
|
|
|
|
return new GuiBorderBlock(x, y, z);
|
|
|
|
|
|
|
|
|
|
else if(gui == EnumGuiType.BigSign)
|
|
|
|
|
return new GuiBigSign(x, y, z);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.RedstoneBlock)
|
|
|
|
|
return new GuiNpcRedstoneBlock(x, y, z);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if(gui == EnumGuiType.MobSpawner)
|
|
|
|
|
return new GuiNpcMobSpawner(x, y, z);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if(gui == EnumGuiType.MobSpawnerMounter)
|
|
|
|
|
return new GuiNpcMobSpawnerMounter(x, y, z);
|
|
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.Waypoint)
|
|
|
|
|
return new GuiNpcWaypoint(x, y, z);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.Companion)
|
|
|
|
|
return new GuiNpcCompanionStats(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.CompanionTalent)
|
|
|
|
|
return new GuiNpcCompanionTalents(npc);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
else if (gui == EnumGuiType.CompanionInv)
|
|
|
|
|
return new GuiNpcCompanionInv(npc, (ContainerNPCCompanion) container);
|
2022-01-12 04:44:08 -06:00
|
|
|
|
|
|
|
|
else if (gui == EnumGuiType.CustomGui)
|
|
|
|
|
return new GuiCustom((ContainerCustomGui)container);
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
return null;
|
|
|
|
|
}
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
@Override
|
|
|
|
|
public void openGui(int i, int j, int k, EnumGuiType gui, EntityPlayer player) {
|
|
|
|
|
Minecraft minecraft = Minecraft.getMinecraft();
|
|
|
|
|
if(minecraft.thePlayer != player)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
GuiScreen guiscreen = getGui(null, gui, null, i, j, k);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
|
|
|
|
|
if (guiscreen != null) {
|
|
|
|
|
minecraft.displayGuiScreen(guiscreen);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void openGui(EntityNPCInterface npc, EnumGuiType gui) {
|
|
|
|
|
openGui(npc, gui, 0, 0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void openGui(EntityNPCInterface npc, EnumGuiType gui, int x, int y, int z) {
|
|
|
|
|
Minecraft minecraft = Minecraft.getMinecraft();
|
|
|
|
|
|
|
|
|
|
Container container = this.getContainer(gui, minecraft.thePlayer, x, y, z, npc);
|
|
|
|
|
GuiScreen guiscreen = getGui(npc, gui,container, x, y, z);
|
|
|
|
|
|
|
|
|
|
if (guiscreen != null) {
|
|
|
|
|
minecraft.displayGuiScreen(guiscreen);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void openGui(EntityPlayer player, Object guiscreen) {
|
|
|
|
|
Minecraft minecraft = Minecraft.getMinecraft();
|
|
|
|
|
if(!player.worldObj.isRemote || !(guiscreen instanceof GuiScreen))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (guiscreen != null) {
|
|
|
|
|
minecraft.displayGuiScreen((GuiScreen)guiscreen);
|
|
|
|
|
}
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void spawnParticle(EntityLivingBase player, String string, Object... ob) {
|
|
|
|
|
if(string.equals("Spell")){
|
|
|
|
|
int color = (Integer) ob[0];
|
|
|
|
|
int number = (Integer) ob[1];
|
2021-10-19 02:49:46 -05:00
|
|
|
for(int i = 0; i < number; i++){
|
|
|
|
|
Random rand = player.worldObj.rand;
|
2018-09-13 12:03:28 -04:00
|
|
|
double x = (rand.nextDouble() - 0.5D) * (double)player.width;
|
|
|
|
|
double y = player.getEyeHeight();
|
|
|
|
|
double z = (rand.nextDouble() - 0.5D) * (double)player.width;
|
2021-10-19 02:49:46 -05:00
|
|
|
|
|
|
|
|
double f = (rand.nextDouble() - 0.5D) * 2D;
|
|
|
|
|
double f1 = -rand.nextDouble();
|
|
|
|
|
double f2 = (rand.nextDouble() - 0.5D) * 2D;
|
|
|
|
|
|
|
|
|
|
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityElementalStaffFX(player, x, y, z, f, f1, f2, color));
|
|
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
else if(string.equals("ModelData")){
|
|
|
|
|
ModelData data = (ModelData) ob[0];
|
|
|
|
|
ModelPartData particles = (ModelPartData) ob[1];
|
|
|
|
|
EntityCustomNpc npc = (EntityCustomNpc) player;
|
|
|
|
|
Minecraft minecraft = Minecraft.getMinecraft();
|
|
|
|
|
double height = npc.getYOffset() + data.getBodyY();
|
|
|
|
|
Random rand = npc.getRNG();
|
|
|
|
|
if(particles.type == 0){
|
|
|
|
|
for(int i = 0; i< 2; i++){
|
|
|
|
|
EntityEnderFX fx = new EntityEnderFX(npc, (rand.nextDouble() - 0.5D) * (double)player.width, (rand.nextDouble() * (double)player.height) - height - 0.25D, (rand.nextDouble() - 0.5D) * (double)player.width, (rand.nextDouble() - 0.5D) * 2D, -rand.nextDouble(), (rand.nextDouble() - 0.5D) * 2D, particles);
|
|
|
|
|
minecraft.effectRenderer.addEffect(fx);
|
|
|
|
|
}
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
else if(particles.type == 1){
|
2021-10-19 02:49:46 -05:00
|
|
|
for(int i = 0; i < 2; i++){
|
|
|
|
|
double x = player.posX + (rand.nextDouble() - 0.5D) * 0.9;
|
|
|
|
|
double y = (player.posY + rand.nextDouble() * 1.9) - 0.25D - height;
|
|
|
|
|
double z = player.posZ + (rand.nextDouble() - 0.5D) * 0.9;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double f = (rand.nextDouble() - 0.5D) * 2D;
|
|
|
|
|
double f1 = -rand.nextDouble();
|
|
|
|
|
double f2 = (rand.nextDouble() - 0.5D) * 2D;
|
|
|
|
|
|
|
|
|
|
minecraft.effectRenderer.addEffect(new EntityRainbowFX(player.worldObj, x, y, z, f, f1, f2));
|
|
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private ModelSkirtArmor model = new ModelSkirtArmor();
|
|
|
|
|
|
|
|
|
|
public ModelBiped getSkirtModel() {
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean hasClient() {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public EntityPlayer getPlayer() {
|
|
|
|
|
return Minecraft.getMinecraft().thePlayer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void registerItem(Item item) {
|
2022-05-11 01:10:31 -05:00
|
|
|
if (item instanceof ItemScripted) {
|
|
|
|
|
MinecraftForgeClient.registerItemRenderer(item, new CustomItemRenderer());
|
|
|
|
|
} else {
|
|
|
|
|
MinecraftForgeClient.registerItemRenderer(item, new NpcItemRenderer());
|
|
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void bindTexture(ResourceLocation location) {
|
|
|
|
|
try{
|
|
|
|
|
if(location == null)
|
|
|
|
|
return;
|
2021-10-19 02:49:46 -05:00
|
|
|
TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager();
|
|
|
|
|
if(location != null)
|
|
|
|
|
texturemanager.bindTexture((ResourceLocation) location);
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
catch(NullPointerException ex){
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
catch(ReportedException ex){
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void spawnParticle(String particle, double x, double y, double z,
|
2021-10-19 02:49:46 -05:00
|
|
|
double motionX, double motionY, double motionZ, float scale) {
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
RenderGlobal render = Minecraft.getMinecraft().renderGlobal;
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
EntityFX fx = render.doSpawnParticle(particle, x, y, z, motionX, motionY, motionZ);
|
|
|
|
|
if(fx == null)
|
|
|
|
|
return;
|
|
|
|
|
|
2021-10-19 02:49:46 -05:00
|
|
|
if (particle.equals("flame")){
|
|
|
|
|
ObfuscationReflectionHelper.setPrivateValue(EntityFlameFX.class, (EntityFlameFX)fx, scale, 0);
|
|
|
|
|
}
|
|
|
|
|
else if (particle.equals("smoke")){
|
|
|
|
|
ObfuscationReflectionHelper.setPrivateValue(EntitySmokeFX.class, (EntitySmokeFX)fx, scale, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getAchievementDesc(Achievement achievement) {
|
|
|
|
|
return achievement.getDescription();
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
|
2021-11-16 10:41:04 -06:00
|
|
|
@Override
|
|
|
|
|
public boolean isGUIOpen(){
|
|
|
|
|
return Minecraft.getMinecraft().currentScreen != null;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public static class FontContainer {
|
|
|
|
|
private StringCache textFont = null;
|
|
|
|
|
public boolean useCustomFont = true;
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
private FontContainer(){
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public FontContainer(String fontType, int fontSize) {
|
|
|
|
|
textFont = new StringCache();
|
2023-07-30 15:47:03 -04:00
|
|
|
textFont.setDefaultFont("Arial Unicode MS", fontSize, true);
|
2018-09-13 12:03:28 -04:00
|
|
|
useCustomFont = !fontType.equalsIgnoreCase("minecraft");
|
2021-10-19 02:49:46 -05:00
|
|
|
try {
|
|
|
|
|
if(!useCustomFont || fontType.isEmpty() || fontType.equalsIgnoreCase("default"))
|
|
|
|
|
textFont.setCustomFont(new ResourceLocation("customnpcs","OpenSans.ttf"), fontSize, true);
|
|
|
|
|
else
|
|
|
|
|
textFont.setDefaultFont(fontType, fontSize, true);
|
2018-09-13 12:03:28 -04:00
|
|
|
} catch (Exception e) {
|
2023-07-30 15:47:03 -04:00
|
|
|
LogWriter.info("Failed loading font so using Arial Unicode MS");
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int height(){
|
|
|
|
|
if(useCustomFont)
|
|
|
|
|
return textFont.fontHeight;
|
|
|
|
|
return Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT;
|
|
|
|
|
}
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public int width(String text){
|
|
|
|
|
if(useCustomFont)
|
|
|
|
|
return textFont.getStringWidth(text);
|
|
|
|
|
return Minecraft.getMinecraft().fontRenderer.getStringWidth(text);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public FontContainer copy() {
|
|
|
|
|
FontContainer font = new FontContainer();
|
|
|
|
|
font.textFont = textFont;
|
|
|
|
|
font.useCustomFont = useCustomFont;
|
|
|
|
|
return font;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void drawString(String text, int x, int y, int color) {
|
|
|
|
|
if(useCustomFont){
|
|
|
|
|
textFont.renderString(text, x, y, color, true);
|
|
|
|
|
textFont.renderString(text, x, y, color, false);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(text, x, y, color);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String getName() {
|
|
|
|
|
if(!useCustomFont)
|
|
|
|
|
return "Minecraft";
|
|
|
|
|
return textFont.usedFont().getFontName();
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-10-19 02:49:46 -05:00
|
|
|
}
|