2018-09-13 12:03:28 -04:00
|
|
|
package noppes.npcs;
|
|
|
|
|
|
2023-01-12 21:33:06 -05:00
|
|
|
import cpw.mods.fml.common.network.IGuiHandler;
|
2024-03-24 03:14:11 -05:00
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
|
import net.minecraft.client.Minecraft;
|
2018-09-13 12:03:28 -04:00
|
|
|
import net.minecraft.client.model.ModelBiped;
|
2024-03-24 03:14:11 -05:00
|
|
|
import net.minecraft.entity.Entity;
|
2018-09-13 12:03:28 -04:00
|
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
|
import net.minecraft.inventory.Container;
|
2022-01-12 04:44:08 -06:00
|
|
|
import net.minecraft.inventory.InventoryBasic;
|
2018-09-13 12:03:28 -04:00
|
|
|
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.world.World;
|
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.api.IWorld;
|
2018-09-13 12:03:28 -04:00
|
|
|
import noppes.npcs.blocks.tiles.TileNpcContainer;
|
|
|
|
|
import noppes.npcs.constants.EnumGuiType;
|
2022-01-12 04:44:08 -06:00
|
|
|
import noppes.npcs.containers.*;
|
2024-03-24 03:14:11 -05:00
|
|
|
import noppes.npcs.controllers.data.Animation;
|
2022-05-24 01:07:50 -05:00
|
|
|
import noppes.npcs.controllers.data.PlayerData;
|
2018-09-13 12:03:28 -04:00
|
|
|
import noppes.npcs.entity.EntityNPCInterface;
|
2024-03-24 03:14:11 -05:00
|
|
|
import noppes.npcs.util.MillisTimer;
|
2018-09-13 12:03:28 -04:00
|
|
|
|
2024-03-24 03:26:23 -05:00
|
|
|
import java.util.ConcurrentModificationException;
|
2024-03-24 03:14:11 -05:00
|
|
|
import java.util.HashSet;
|
2021-04-27 11:56:36 -04:00
|
|
|
|
2024-03-24 03:14:11 -05:00
|
|
|
public class CommonProxy implements IGuiHandler {
|
2024-03-24 03:26:23 -05:00
|
|
|
public final static HashSet<Animation> clientPlayingAnimations = new HashSet<>();
|
|
|
|
|
public final static HashSet<Animation> serverPlayingAnimations = new HashSet<>();
|
2024-03-24 03:14:11 -05:00
|
|
|
protected MillisTimer animationTimer = new MillisTimer(1000);
|
|
|
|
|
protected long totalTicks;
|
2018-09-13 12:03:28 -04:00
|
|
|
|
|
|
|
|
public void load() {
|
2024-03-24 03:14:11 -05:00
|
|
|
this.createAnimationThread();
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
CustomNpcs.Channel.register(new PacketHandlerServer());
|
|
|
|
|
CustomNpcs.ChannelPlayer.register(new PacketHandlerPlayer());
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-24 03:14:11 -05:00
|
|
|
protected void createAnimationThread() {
|
|
|
|
|
Thread thread = (new Thread("Animation Thread") { public void run() {
|
|
|
|
|
while (true) {
|
|
|
|
|
if (!CustomNpcs.proxy.hasClient() || !Minecraft.getMinecraft().isGamePaused()) {
|
|
|
|
|
animationTimer.updateTimer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HashSet<Animation> playingAnimations = CustomNpcs.proxy.hasClient() ? clientPlayingAnimations : serverPlayingAnimations;
|
|
|
|
|
for (int i = 0; i < animationTimer.elapsedTicks; ++i) {
|
|
|
|
|
for (Animation animation : playingAnimations) {
|
2024-03-24 03:51:36 -05:00
|
|
|
int tickDuration = animation.currentFrame().tickDuration();
|
|
|
|
|
if (animation.parent.isActive() && totalTicks % tickDuration == 0) {
|
2024-03-24 03:14:11 -05:00
|
|
|
animation.increaseTime();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
totalTicks++;
|
|
|
|
|
}
|
|
|
|
|
totalTicks %= 60 * 60 * 1000;
|
2024-03-24 03:26:23 -05:00
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
clientPlayingAnimations.removeIf(CommonProxy.this::removeAnimation);
|
|
|
|
|
serverPlayingAnimations.removeIf(CommonProxy.this::removeAnimation);
|
|
|
|
|
} catch (ConcurrentModificationException ignored) {}
|
2024-03-24 03:14:11 -05:00
|
|
|
}
|
|
|
|
|
}});
|
|
|
|
|
thread.setDaemon(true);
|
|
|
|
|
thread.start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean removeAnimation(Animation animation) {
|
2024-03-24 03:16:24 -05:00
|
|
|
if (animation.currentFrame() == null || animation.parent == null || animation.parent.animation != animation) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2024-03-24 03:14:11 -05:00
|
|
|
|
|
|
|
|
Entity entity = null;
|
|
|
|
|
if (animation.parent.parent instanceof DataDisplay) {
|
|
|
|
|
entity = ((DataDisplay)animation.parent.parent).npc;
|
|
|
|
|
} else {
|
|
|
|
|
if (animation.parent.parent instanceof PlayerData) {
|
|
|
|
|
entity = ((PlayerData) animation.parent.parent).player;
|
|
|
|
|
} else if (animation.parent.parent instanceof EntityPlayer) {
|
|
|
|
|
entity = (EntityPlayer) animation.parent.parent;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (entity == null) return true;
|
|
|
|
|
|
|
|
|
|
if (CustomNpcs.proxy.hasClient()) {
|
|
|
|
|
return clientRemoveAnimation(entity);
|
|
|
|
|
} else {
|
|
|
|
|
return entity.worldObj == null || !entity.worldObj.loadedEntityList.contains(entity);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
|
|
|
private boolean clientRemoveAnimation(Entity entity) {
|
2024-03-24 18:59:27 -05:00
|
|
|
return Minecraft.getMinecraft().currentScreen == null
|
|
|
|
|
&& !Minecraft.getMinecraft().theWorld.loadedEntityList.contains(entity);
|
2024-03-24 03:14:11 -05:00
|
|
|
}
|
|
|
|
|
|
2021-09-30 21:44:30 -05:00
|
|
|
public PlayerData getPlayerData(EntityPlayer player) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
@Override
|
|
|
|
|
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
|
|
|
if(ID > EnumGuiType.values().length)
|
|
|
|
|
return null;
|
|
|
|
|
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
|
|
|
|
EnumGuiType gui = EnumGuiType.values()[ID];
|
|
|
|
|
return getContainer(gui, player, x, y, z, npc);
|
|
|
|
|
}
|
|
|
|
|
public Container getContainer(EnumGuiType gui,EntityPlayer player, int x, int y, int z,EntityNPCInterface npc){
|
2022-01-12 04:44:08 -06:00
|
|
|
if(gui == EnumGuiType.CustomGui)
|
|
|
|
|
return new ContainerCustomGui(new InventoryBasic("", false, x));
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.MainMenuInv)
|
|
|
|
|
return new ContainerNPCInv(npc, player);
|
|
|
|
|
|
|
|
|
|
if(gui == EnumGuiType.PlayerBankSmall)
|
|
|
|
|
return new ContainerNPCBankSmall(player, x , y);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.PlayerBankUnlock)
|
|
|
|
|
return new ContainerNPCBankUnlock(player, x , y);
|
|
|
|
|
|
|
|
|
|
if(gui == EnumGuiType.PlayerBankUprade)
|
|
|
|
|
return new ContainerNPCBankUpgrade(player, x , y);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.PlayerBankLarge)
|
|
|
|
|
return new ContainerNPCBankLarge(player, x , y);
|
|
|
|
|
|
|
|
|
|
if(gui == EnumGuiType.PlayerFollowerHire)
|
|
|
|
|
return new ContainerNPCFollowerHire(npc, player);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.PlayerFollower)
|
|
|
|
|
return new ContainerNPCFollower(npc, player);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.PlayerTrader)
|
|
|
|
|
return new ContainerNPCTrader(npc, player);
|
|
|
|
|
|
|
|
|
|
if(gui == EnumGuiType.PlayerAnvil)
|
|
|
|
|
return new ContainerCarpentryBench(player.inventory, player.worldObj, x, y, z);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.SetupItemGiver)
|
|
|
|
|
return new ContainerNpcItemGiver(npc, player);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.SetupTrader)
|
|
|
|
|
return new ContainerNPCTraderSetup(npc, player);
|
|
|
|
|
|
|
|
|
|
if(gui == EnumGuiType.SetupFollower)
|
|
|
|
|
return new ContainerNPCFollowerSetup(npc, player);
|
|
|
|
|
|
|
|
|
|
if(gui == EnumGuiType.QuestReward)
|
|
|
|
|
return new ContainerNpcQuestReward(player);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.QuestItem)
|
|
|
|
|
return new ContainerNpcQuestTypeItem(player);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.ManageRecipes)
|
|
|
|
|
return new ContainerManageRecipes(player,x);
|
|
|
|
|
|
|
|
|
|
if(gui == EnumGuiType.ManageBanks)
|
|
|
|
|
return new ContainerManageBanks(player);
|
|
|
|
|
|
|
|
|
|
if(gui == EnumGuiType.MerchantAdd)
|
|
|
|
|
return new ContainerMerchantAdd(player, ServerEventsHandler.Merchant, player.worldObj);
|
|
|
|
|
|
2023-05-17 11:43:43 -04:00
|
|
|
if(gui == EnumGuiType.Crate)
|
|
|
|
|
return new ContainerCrate(player.inventory, (TileNpcContainer)player.worldObj.getTileEntity(x, y, z));
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.PlayerMailman)
|
|
|
|
|
return new ContainerMail(player, x == 1, y == 1);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
if(gui == EnumGuiType.CompanionInv)
|
|
|
|
|
return new ContainerNPCCompanion(npc, player);
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void openGui(EntityNPCInterface npc, EnumGuiType gui) {
|
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void openGui(EntityNPCInterface npc, EnumGuiType gui, int x, int y, int z) {
|
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void openGui(int i, int j, int k, EnumGuiType gui, EntityPlayer player) {
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void openGui(EntityPlayer player, Object guiscreen) {
|
|
|
|
|
// TODO Auto-generated method stub
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void spawnParticle(EntityLivingBase player, String string, Object... ob) {
|
|
|
|
|
// TODO Auto-generated method stub
|
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 null; }
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public boolean hasClient() {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public EntityPlayer getPlayer() {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void registerItem(Item item) {
|
|
|
|
|
// TODO Auto-generated method stub
|
2021-10-19 02:49:46 -05:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ModelBiped getSkirtModel() {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
|
2021-10-19 02:49:46 -05:00
|
|
|
public String getAchievementDesc(Achievement achievement) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
2021-11-16 10:41:04 -06:00
|
|
|
|
|
|
|
|
public boolean isGUIOpen(){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2024-03-24 03:14:11 -05:00
|
|
|
}
|