From 5befe141bd7c92f56942ae0d2b3ee1c30583f6ba Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 31 May 2023 18:45:10 -0400 Subject: [PATCH 1/9] Fix Searching in Clone Tab to now account for the displayed tags --- .../npcs/client/gui/GuiNpcMobSpawner.java | 65 ++++++++++++++++--- .../gui/util/GuiCustomScrollCloner.java | 4 +- 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawner.java b/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawner.java index ec65abc7e..f17b47e84 100644 --- a/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawner.java +++ b/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawner.java @@ -42,6 +42,7 @@ public class GuiNpcMobSpawner extends GuiNPCInterface implements IGuiData { private int posX,posY,posZ; private List list; + private List rawList; private List tagList; private static int showingClones = 0; @@ -181,6 +182,7 @@ public class GuiNpcMobSpawner extends GuiNPCInterface implements IGuiData { } } this.list = list; + this.rawList = new ArrayList(this.list); scroll.setList(getSearchList(), ascending == 0, sortType == 0); } private void showClones() { @@ -198,6 +200,26 @@ public class GuiNpcMobSpawner extends GuiNPCInterface implements IGuiData { } this.tagMap = ClientTagMapController.Instance.getTagMap(activeTab); + this.rawList = new ArrayList(this.list); + if(this.tagMap != null){ + if(GuiNpcMobSpawner.displayTags == 0 || GuiNpcMobSpawner.displayTags == 1){ + for(int i = 0; i < this.list.size(); i++){ + StringBuilder npcName = new StringBuilder(list.get(i)); + if (this.tagMap.hasClone(list.get(i))) { + for (UUID tagUUID : this.tagMap.getUUIDsList(list.get(i))){ + Tag tag = tags.get(tagUUID); + if(tag != null){ + if(GuiNpcMobSpawner.displayTags == 1 || !tag.getIsHidden()){ + npcName.append(" [" + tag.name + "]"); + } + } + } + } + this.rawList.set(i, npcName.toString()); + } + } + } + scroll.setList(getSearchList(), ascending == 0, sortType == 0); } public void keyTyped(char c, int i) @@ -222,6 +244,9 @@ public class GuiNpcMobSpawner extends GuiNPCInterface implements IGuiData { if(this.list == null){ this.list = new ArrayList(); } + if(this.rawList == null){ + this.rawList = new ArrayList(); + } // No Filters - or - Entities if(tagFilters.size() == 0 || showingClones == 1){ @@ -231,9 +256,10 @@ public class GuiNpcMobSpawner extends GuiNPCInterface implements IGuiData { // Yes Search else { List list = new ArrayList(); - for(String name : this.list){ - if(name.toLowerCase().contains(search)) - list.add(name); + for(int i = 0; i < this.list.size(); i++){ + if(this.rawList.get(i).toLowerCase().contains(search)){ + list.add(this.list.get(i)); + } } return list; } @@ -257,14 +283,16 @@ public class GuiNpcMobSpawner extends GuiNPCInterface implements IGuiData { // Yes Search List list = new ArrayList(); - for(String name : this.list){ - if(name.toLowerCase().contains(search)) { - if(tagMap.hasClone(name)){ - if(meetsCondition(name)){ - list.add(name); + for(int i = 0; i < this.list.size(); i++){ + if(this.rawList.get(i).toLowerCase().contains(search)){ + String npcName = this.list.get(i); + if(tagMap.hasClone(npcName)){ + if(meetsCondition(npcName)){ + list.add(npcName); } } } + } return list; } @@ -481,6 +509,27 @@ public class GuiNpcMobSpawner extends GuiNPCInterface implements IGuiData { } this.list = list; + + this.rawList = new ArrayList(this.list); + if(this.tagMap != null){ + if(GuiNpcMobSpawner.displayTags == 0 || GuiNpcMobSpawner.displayTags == 1){ + for(int i = 0; i < this.list.size(); i++){ + StringBuilder npcName = new StringBuilder(list.get(i)); + if (this.tagMap.hasClone(list.get(i))) { + for (UUID tagUUID : this.tagMap.getUUIDsList(list.get(i))){ + Tag tag = tags.get(tagUUID); + if(tag != null){ + if(GuiNpcMobSpawner.displayTags == 1 || !tag.getIsHidden()){ + npcName.append(" [" + tag.name + "]"); + } + } + } + } + this.rawList.set(i, npcName.toString()); + } + } + } + scroll.setList(getSearchList(), ascending == 0, sortType == 0); } } diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiCustomScrollCloner.java b/src/main/java/noppes/npcs/client/gui/util/GuiCustomScrollCloner.java index cb6a00f8a..7aaeae794 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiCustomScrollCloner.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiCustomScrollCloner.java @@ -56,7 +56,7 @@ public class GuiCustomScrollCloner extends GuiCustomScroll { } if((this.parent.getShowingClones() == 0 || this.parent.getShowingClones() == 2) && this.parent.tagMap != null){ - int tagStartX = j + fontRendererObj.getStringWidth(displayString) + 5; + int tagStartX = j + fontRendererObj.getStringWidth(displayString) + 3; if(GuiNpcMobSpawner.displayTags == 0 || GuiNpcMobSpawner.displayTags == 1){ if (this.parent.tagMap.hasClone(list.get(i))) { for (UUID tagUUID : this.parent.tagMap.getUUIDsList(list.get(i))){ @@ -64,7 +64,7 @@ public class GuiCustomScrollCloner extends GuiCustomScroll { if(tag != null){ if(GuiNpcMobSpawner.displayTags == 1 || !tag.getIsHidden()){ fontRendererObj.drawString("[" + tag.name + "]", tagStartX, k, tag.color); - tagStartX += fontRendererObj.getStringWidth("[" + tag.name + "]") + 2; + tagStartX += fontRendererObj.getStringWidth("[" + tag.name + "]") + 3; } } } From 075e3fdb4138fa7f69832a34a291c9640c86a214 Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 31 May 2023 19:34:24 -0400 Subject: [PATCH 2/9] 1.8.4 Version Change --- build.gradle | 2 +- src/main/java/noppes/npcs/CustomNpcs.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 86eb1504b..00bde4cc8 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ configurations { apply plugin: 'forge' -version = "1.8.4-beta" +version = "1.8.4" group= "com.kamkeel.customnpc-plus" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "CustomNPC-Plus" diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 6cf8aa444..c0c304984 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -36,7 +36,7 @@ import java.util.ArrayList; import java.util.Set; import java.util.UUID; -@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.8.4-beta") +@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.8.4") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy") From 9d727499df9ac00a071194707b9b94908f388de3 Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 31 May 2023 19:45:36 -0400 Subject: [PATCH 3/9] Fix Gradle Order --- build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 00bde4cc8..d8350dc35 100644 --- a/build.gradle +++ b/build.gradle @@ -195,13 +195,13 @@ afterEvaluate { } } +task deobfJar(type: Jar) { + classifier = 'dev' + from sourceSets.main.output +} + sourceSets { main { ext.refMap = refMapForYourConfig } } - -task deobfJar(type: Jar) { - from sourceSets.main.output - classifier = 'dev' -} From 7000b525f397ceeffb6f223e6ee266dfd99b77c6 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Wed, 31 May 2023 18:55:06 -0500 Subject: [PATCH 4/9] Fixed entity custom item rendering, and rendering of textures for custom GUI buttons and rectangles. --- .../custom/components/CustomGuiButton.java | 11 ----- .../components/CustomGuiTexturedRect.java | 12 +---- .../customitem/CustomItemRenderer.java | 14 +++--- .../client/renderer/customitem/ImageData.java | 45 +++++++------------ .../npcs/scripted/item/ScriptCustomItem.java | 2 - 5 files changed, 23 insertions(+), 61 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/custom/components/CustomGuiButton.java b/src/main/java/noppes/npcs/client/gui/custom/components/CustomGuiButton.java index 29b918291..f9ed294cd 100644 --- a/src/main/java/noppes/npcs/client/gui/custom/components/CustomGuiButton.java +++ b/src/main/java/noppes/npcs/client/gui/custom/components/CustomGuiButton.java @@ -9,25 +9,14 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.ITextureObject; -import net.minecraft.client.renderer.texture.TextureManager; -import net.minecraft.client.resources.IResource; -import net.minecraft.util.ResourceLocation; import noppes.npcs.api.gui.ICustomGuiComponent; import noppes.npcs.client.Client; -import noppes.npcs.client.ImageDownloadAlt; import noppes.npcs.client.gui.custom.GuiCustom; import noppes.npcs.client.gui.custom.interfaces.IClickListener; -import noppes.npcs.client.renderer.ImageBufferDownloadAlt; import noppes.npcs.client.renderer.customitem.ImageData; import noppes.npcs.scripted.gui.ScriptGuiButton; import org.lwjgl.opengl.GL11; -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.InputStream; - public class CustomGuiButton extends GuiButton implements IClickListener { GuiCustom parent; diff --git a/src/main/java/noppes/npcs/client/gui/custom/components/CustomGuiTexturedRect.java b/src/main/java/noppes/npcs/client/gui/custom/components/CustomGuiTexturedRect.java index 241a6e2f5..622c06b26 100644 --- a/src/main/java/noppes/npcs/client/gui/custom/components/CustomGuiTexturedRect.java +++ b/src/main/java/noppes/npcs/client/gui/custom/components/CustomGuiTexturedRect.java @@ -6,27 +6,16 @@ package noppes.npcs.client.gui.custom.components; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.TextureManager; -import net.minecraft.client.resources.IResource; -import net.minecraft.util.ResourceLocation; import noppes.npcs.api.gui.ICustomGuiComponent; import noppes.npcs.client.Client; -import noppes.npcs.client.ImageDownloadAlt; import noppes.npcs.client.gui.custom.GuiCustom; import noppes.npcs.client.gui.custom.interfaces.IGuiComponent; -import noppes.npcs.client.renderer.ImageBufferDownloadAlt; import noppes.npcs.client.renderer.customitem.ImageData; import noppes.npcs.scripted.gui.ScriptGuiTexturedRect; import org.lwjgl.opengl.GL11; -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.InputStream; - public class CustomGuiTexturedRect extends Gui implements IGuiComponent { GuiCustom parent; @@ -95,6 +84,7 @@ public class CustomGuiTexturedRect extends Gui implements IGuiComponent { GL11.glRotatef(this.rotation, 0.0F, 0.0F, 1.0F); GL11.glScalef(this.scale, this.scale, this.scale); + this.imageData.bindTexture(); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.setColorOpaque_F(1, 1, 1); diff --git a/src/main/java/noppes/npcs/client/renderer/customitem/CustomItemRenderer.java b/src/main/java/noppes/npcs/client/renderer/customitem/CustomItemRenderer.java index ec0e670d2..50680a41d 100644 --- a/src/main/java/noppes/npcs/client/renderer/customitem/CustomItemRenderer.java +++ b/src/main/java/noppes/npcs/client/renderer/customitem/CustomItemRenderer.java @@ -49,15 +49,10 @@ public class CustomItemRenderer implements IItemRenderer { public void renderItem(ItemRenderType type, ItemStack itemStack, Object... data) { ScriptCustomItem scriptCustomItem = ItemScripted.GetWrapper(itemStack); - BufferedImage bufferedImage = Client.getImageData(scriptCustomItem.texture).getBufferedImage(); - if (bufferedImage != null && (scriptCustomItem.width != bufferedImage.getWidth() || scriptCustomItem.height != bufferedImage.getHeight())) { - scriptCustomItem.width = bufferedImage.getWidth(); - scriptCustomItem.height = bufferedImage.getHeight(); - scriptCustomItem.saveItemData(); - } - - if(scriptCustomItem.width < 1 || scriptCustomItem.height < 1) + ImageData imageData = Client.getImageData(scriptCustomItem.texture); + if (!imageData.imageLoaded()) { return; + } if (type == ItemRenderType.INVENTORY) { GL11.glPushMatrix(); @@ -80,7 +75,6 @@ public class CustomItemRenderer implements IItemRenderer { GL11.glRotatef(scriptCustomItem.rotationYRate * entityRenderTicks%360, 0, 1, 0); GL11.glRotatef(scriptCustomItem.rotationZRate * entityRenderTicks%360, 0, 0, 1); - GL11.glScalef(scriptCustomItem.scaleX, scriptCustomItem.scaleY, scriptCustomItem.scaleZ); GL11.glTranslatef(0.0F, bobbingY, 0.0F); int color = scriptCustomItem.getColor(); @@ -184,6 +178,7 @@ public class CustomItemRenderer implements IItemRenderer { b0 = 4; } + GL11.glScalef(scriptCustomItem.scaleX, scriptCustomItem.scaleY, scriptCustomItem.scaleZ); GL11.glTranslatef(-f7, -f8, -((f9 + f10) * (float)b0 / 2.0F)); for (int k = 0; k < b0; ++k) @@ -253,6 +248,7 @@ public class CustomItemRenderer implements IItemRenderer { for (int l = 0; l < b0; ++l) { GL11.glPushMatrix(); + GL11.glScalef(scriptCustomItem.scaleX, scriptCustomItem.scaleY, scriptCustomItem.scaleZ); if (l > 0) { diff --git a/src/main/java/noppes/npcs/client/renderer/customitem/ImageData.java b/src/main/java/noppes/npcs/client/renderer/customitem/ImageData.java index 1be88063a..2e1e69172 100644 --- a/src/main/java/noppes/npcs/client/renderer/customitem/ImageData.java +++ b/src/main/java/noppes/npcs/client/renderer/customitem/ImageData.java @@ -36,6 +36,15 @@ public class ImageData { } public boolean imageLoaded() { + if (!this.gotWidthHeight) { + try { + if (!this.isUrl) { + this.getWidthHeight(); + } else { + this.getURLWidthHeight(); + } + } catch (Exception ignored) {} + } return !this.invalid && this.location != null && this.gotWidthHeight; } @@ -70,6 +79,10 @@ public class ImageData { } private void getWidthHeight() throws IOException { + if (this.invalid) { + return; + } + InputStream inputstream = null; try { @@ -81,7 +94,7 @@ public class ImageData { this.totalHeight = bufferedimage.getHeight(); correctWidthHeight(); } catch (Exception e) { - e.printStackTrace(); + this.invalid = true; } finally { if (inputstream != null) { inputstream.close(); @@ -90,7 +103,7 @@ public class ImageData { } private void getURLWidthHeight(){ - if(this.imageDownloadAlt.getBufferedImage() != null) { + if(this.imageDownloadAlt.getBufferedImage() != null && !this.invalid) { this.gotWidthHeight = true; this.totalWidth = this.imageDownloadAlt.getBufferedImage().getWidth(); this.totalHeight = this.imageDownloadAlt.getBufferedImage().getHeight(); @@ -104,34 +117,10 @@ public class ImageData { } public int getTotalWidth() { - if (!this.gotWidthHeight) { - try { - if (!this.isUrl) { - this.getWidthHeight(); - } else { - this.getURLWidthHeight(); - } - } catch (Exception ignored) {} - if (!this.gotWidthHeight) { - return -1; - } - } - return this.totalWidth; + return this.gotWidthHeight ? this.totalWidth : -1; } public int getTotalHeight() { - if (!this.gotWidthHeight) { - try { - if (!this.isUrl) { - this.getWidthHeight(); - } else { - this.getURLWidthHeight(); - } - } catch (Exception ignored) {} - if (!this.gotWidthHeight) { - return -1; - } - } - return this.totalHeight; + return this.gotWidthHeight ? this.totalHeight : -1; } } diff --git a/src/main/java/noppes/npcs/scripted/item/ScriptCustomItem.java b/src/main/java/noppes/npcs/scripted/item/ScriptCustomItem.java index dbc2e0059..3ef35244f 100644 --- a/src/main/java/noppes/npcs/scripted/item/ScriptCustomItem.java +++ b/src/main/java/noppes/npcs/scripted/item/ScriptCustomItem.java @@ -42,8 +42,6 @@ public class ScriptCustomItem extends ScriptItemStack implements IItemCustom, IS public float rotationX, rotationY, rotationZ; public float rotationXRate, rotationYRate, rotationZRate; - public int width = -1, height = -1; - public ScriptCustomItem(ItemStack item) { super(item); loadItemData(); From 0c25d7ec1ca69c4a1452c4054c720da6393a99df Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Wed, 31 May 2023 19:59:20 -0500 Subject: [PATCH 5/9] Reverted changes to saving/loading player data from previous commit to --- src/main/java/noppes/npcs/ServerEventsHandler.java | 11 ++++------- .../java/noppes/npcs/controllers/data/PlayerData.java | 2 -- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/noppes/npcs/ServerEventsHandler.java b/src/main/java/noppes/npcs/ServerEventsHandler.java index e65f46567..b9e4570e6 100644 --- a/src/main/java/noppes/npcs/ServerEventsHandler.java +++ b/src/main/java/noppes/npcs/ServerEventsHandler.java @@ -360,13 +360,10 @@ public class ServerEventsHandler { questData.checkQuestCompletion(playerData, EnumQuestType.Item); } - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onEntityConstructing(EntityEvent.EntityConstructing event) { - if (event.entity instanceof EntityPlayerMP) { - PlayerData data = new PlayerData(); - data.player = (EntityPlayer) event.entity; - event.entity.registerExtendedProperties("CustomNpcsData", data); - } + @SubscribeEvent + public void world(PlayerEvent.SaveToFile event){ + PlayerData data = PlayerDataController.instance.getPlayerData((EntityPlayer) event.entity); + data.save(); } @SubscribeEvent diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerData.java b/src/main/java/noppes/npcs/controllers/data/PlayerData.java index 80f9c9666..ba9deab99 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerData.java @@ -51,12 +51,10 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { @Override public void saveNBTData(NBTTagCompound nbtTagCompound) { - this.save(); } @Override public void loadNBTData(NBTTagCompound compound) { - this.load(); } public void setNBT(NBTTagCompound data){ From 0e9ddd75b645923db36b5356db968183120fc9e2 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Wed, 31 May 2023 20:21:00 -0500 Subject: [PATCH 6/9] Fixed index out of bounds error on custom GUI slot clicks. --- src/main/java/noppes/npcs/containers/ContainerCustomGui.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/noppes/npcs/containers/ContainerCustomGui.java b/src/main/java/noppes/npcs/containers/ContainerCustomGui.java index e195ee609..1432bab76 100644 --- a/src/main/java/noppes/npcs/containers/ContainerCustomGui.java +++ b/src/main/java/noppes/npcs/containers/ContainerCustomGui.java @@ -108,6 +108,11 @@ public class ContainerCustomGui extends Container { public ItemStack slotClick(int slotId, int dragType, int clickTypeIn, EntityPlayer player) { if(slotId < 0) return super.slotClick(slotId, dragType, clickTypeIn, player); + + if (slotId >= this.inventorySlots.size()) { + return null; + } + Slot mcSlot = (Slot)this.inventorySlots.get(slotId); if(!player.worldObj.isRemote && mcSlot != null) { IItemSlot slot = null; From a8a05282753b24083a4a38d80ecf82f3b4bd2077 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Wed, 31 May 2023 23:59:11 -0500 Subject: [PATCH 7/9] ScriptWorld: -Increased the accuracy of rayCastPos(). --- .../java/noppes/npcs/scripted/NpcAPI.java | 19 +- .../noppes/npcs/scripted/ScriptWorld.java | 241 ++++++++++++++++-- .../scripted/entity/ScriptLivingBase.java | 6 +- 3 files changed, 234 insertions(+), 32 deletions(-) diff --git a/src/main/java/noppes/npcs/scripted/NpcAPI.java b/src/main/java/noppes/npcs/scripted/NpcAPI.java index 05aea2598..264f1fbb7 100644 --- a/src/main/java/noppes/npcs/scripted/NpcAPI.java +++ b/src/main/java/noppes/npcs/scripted/NpcAPI.java @@ -248,10 +248,14 @@ public class NpcAPI extends AbstractNpcAPI { } public IBlock getIBlock(IWorld world, IPos pos) { - return this.getIBlock(world, pos.getX(),pos.getY(),pos.getZ()); + return pos == null ? null : this.getIBlock(world, pos.getX(),pos.getY(),pos.getZ()); } public ITileEntity getITileEntity(IWorld world, IPos pos) { + if (pos == null) { + return null; + } + TileEntity tileEntity = world.getMCWorld().getTileEntity(pos.getX(), pos.getY(),pos.getZ()); return this.getITileEntity(tileEntity); } @@ -282,11 +286,13 @@ public class NpcAPI extends AbstractNpcAPI { } public IPos[] getAllInBox(IPos from, IPos to, boolean sortByDistance) { - Iterator posIterable = BlockPos.getAllInBox(from.getMCPos(),to.getMCPos()).iterator(); ArrayList list = new ArrayList<>(); - posIterable.forEachRemaining(BlockPos -> list.add(this.getIPos(BlockPos))); - if (sortByDistance) { - list.sort(Comparator.comparingDouble(pos -> pos.distanceTo(from))); + if (from != null && to != null) { + Iterator posIterable = BlockPos.getAllInBox(from.getMCPos(),to.getMCPos()).iterator(); + posIterable.forEachRemaining(BlockPos -> list.add(this.getIPos(BlockPos))); + if (sortByDistance) { + list.sort(Comparator.comparingDouble(pos -> pos.distanceTo(from))); + } } return list.toArray(new IPos[0]); } @@ -333,6 +339,9 @@ public class NpcAPI extends AbstractNpcAPI { } public ICustomNpc spawnNPC(IWorld world, IPos pos) { + if (pos == null) { + return null; + } return this.spawnNPC(world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/noppes/npcs/scripted/ScriptWorld.java b/src/main/java/noppes/npcs/scripted/ScriptWorld.java index eddce617c..03ae89023 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptWorld.java +++ b/src/main/java/noppes/npcs/scripted/ScriptWorld.java @@ -1,7 +1,9 @@ package noppes.npcs.scripted; import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.player.EntityPlayer; @@ -15,6 +17,8 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntitySign; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraft.world.WorldServer; @@ -520,36 +524,229 @@ public class ScriptWorld implements IWorld { return this.isBreakCancelled(pos.getX(),pos.getY(),pos.getZ()); } + public MovingObjectPosition func_147447_a(Vec3 startVec, Vec3 endVec, boolean stopOnBlock, boolean stopOnLiquid, boolean stopOnCollision) + { + if (!Double.isNaN(startVec.xCoord) && !Double.isNaN(startVec.yCoord) && !Double.isNaN(startVec.zCoord)) + { + if (!Double.isNaN(endVec.xCoord) && !Double.isNaN(endVec.yCoord) && !Double.isNaN(endVec.zCoord)) + { + int endX = MathHelper.floor_double(endVec.xCoord); + int endY = MathHelper.floor_double(endVec.yCoord); + int endZ = MathHelper.floor_double(endVec.zCoord); + int l = MathHelper.floor_double(startVec.xCoord); + int i1 = MathHelper.floor_double(startVec.yCoord); + int j1 = MathHelper.floor_double(startVec.zCoord); + Block block = this.world.getBlock(l, i1, j1); + int k1 = this.world.getBlockMetadata(l, i1, j1); + + if (block.canCollideCheck(k1, false)) + { + MovingObjectPosition movingobjectposition = block.collisionRayTrace(this.world, l, i1, j1, startVec, endVec); + + if (movingobjectposition != null) + { + return movingobjectposition; + } + } + + k1 = 200; + + while (k1-- >= 0) + { + if (Double.isNaN(startVec.xCoord) || Double.isNaN(startVec.yCoord) || Double.isNaN(startVec.zCoord)) + { + return null; + } + + if (l == endX && i1 == endY && j1 == endZ) + { + return null; + } + + boolean flag6 = true; + boolean flag3 = true; + boolean flag4 = true; + double d0 = 999.0D; + double d1 = 999.0D; + double d2 = 999.0D; + + if (endX > l) + { + d0 = (double)l + 1.0D; + } + else if (endX < l) + { + d0 = (double)l + 0.0D; + } + else + { + flag6 = false; + } + + if (endY > i1) + { + d1 = (double)i1 + 1.0D; + } + else if (endY < i1) + { + d1 = (double)i1 + 0.0D; + } + else + { + flag3 = false; + } + + if (endZ > j1) + { + d2 = (double)j1 + 1.0D; + } + else if (endZ < j1) + { + d2 = (double)j1 + 0.0D; + } + else + { + flag4 = false; + } + + double d3 = 999.0D; + double d4 = 999.0D; + double d5 = 999.0D; + double d6 = endVec.xCoord - startVec.xCoord; + double d7 = endVec.yCoord - startVec.yCoord; + double d8 = endVec.zCoord - startVec.zCoord; + + if (flag6) + { + d3 = (d0 - startVec.xCoord) / d6; + } + + if (flag3) + { + d4 = (d1 - startVec.yCoord) / d7; + } + + if (flag4) + { + d5 = (d2 - startVec.zCoord) / d8; + } + + byte b0; + + if (d3 < d4 && d3 < d5) + { + if (endX > l) + { + b0 = 4; + } + else + { + b0 = 5; + } + + startVec.xCoord = d0; + startVec.yCoord += d7 * d3; + startVec.zCoord += d8 * d3; + } + else if (d4 < d5) + { + if (endY > i1) + { + b0 = 0; + } + else + { + b0 = 1; + } + + startVec.xCoord += d6 * d4; + startVec.yCoord = d1; + startVec.zCoord += d8 * d4; + } + else + { + if (endZ > j1) + { + b0 = 2; + } + else + { + b0 = 3; + } + + startVec.xCoord += d6 * d5; + startVec.yCoord += d7 * d5; + startVec.zCoord = d2; + } + + Vec3 vec32 = Vec3.createVectorHelper(startVec.xCoord, startVec.yCoord, startVec.zCoord); + l = (int)(vec32.xCoord = (double)MathHelper.floor_double(startVec.xCoord)); + + if (b0 == 5) + { + --l; + ++vec32.xCoord; + } + + i1 = (int)(vec32.yCoord = (double)MathHelper.floor_double(startVec.yCoord)); + + if (b0 == 1) + { + --i1; + ++vec32.yCoord; + } + + j1 = (int)(vec32.zCoord = (double)MathHelper.floor_double(startVec.zCoord)); + + if (b0 == 3) + { + --j1; + ++vec32.zCoord; + } + + Block block1 = this.world.getBlock(l, i1, j1); + int l1 = this.world.getBlockMetadata(l, i1, j1); + + MovingObjectPosition movingobjectposition1 = block1.collisionRayTrace(this.world, l, i1, j1, startVec, endVec); + if (movingobjectposition1 != null) + { + if (block1.canCollideCheck(l1, false) && stopOnBlock || + block1.getMaterial().isLiquid() && stopOnLiquid || + !(block1 instanceof BlockAir) && block1.getCollisionBoundingBoxFromPool(this.world,l,i1,j1) == null && !stopOnCollision) + { + return movingobjectposition1; + } + } + } + + return null; + } + else + { + return null; + } + } + else + { + return null; + } + } + public IPos rayCastPos(double[] startPos, double[] lookVector, int maxDistance, boolean stopOnBlock, boolean stopOnLiquid, boolean stopOnCollision) { if (startPos.length != 3 || lookVector.length != 3) { return null; } - IPos pos; - Vec3 currentPos = Vec3.createVectorHelper(startPos[0], startPos[1], startPos[2]); int rep = 0; + Vec3 startVec = Vec3.createVectorHelper(startPos[0], startPos[1], startPos[2]); + Vec3 endVec = startVec.addVector(lookVector[0]*maxDistance,lookVector[1]*maxDistance,lookVector[2]*maxDistance); - while (rep++ < maxDistance + 10) { - currentPos = currentPos.addVector(lookVector[0], lookVector[1], lookVector[2]); - pos = NpcAPI.Instance().getIPos(currentPos.xCoord, currentPos.yCoord, currentPos.zCoord); - - IBlock block = getBlock((int)currentPos.xCoord, (int)currentPos.yCoord, (int)currentPos.zCoord); - if (block != null && stopOnBlock) { - if ((!stopOnLiquid || block.getMCBlock() instanceof BlockLiquid) - && (!stopOnCollision || block.canCollide())) - return pos; - } - - double distance = Math.pow( - Math.pow(currentPos.xCoord-startPos[0],2) - +Math.pow(currentPos.yCoord-startPos[1],2) - +Math.pow(currentPos.zCoord-startPos[2],2) - , 0.5); - if (distance > maxDistance) { - return pos; - } + IPos endPos = NpcAPI.Instance().getIPos(endVec.xCoord,endVec.yCoord,endVec.zCoord); + if (!stopOnBlock && !stopOnLiquid && !stopOnCollision) { + return endPos; } - return null; + MovingObjectPosition mob = this.func_147447_a(startVec,endVec,stopOnBlock,stopOnLiquid,stopOnCollision); + return mob != null ? NpcAPI.Instance().getIPos(mob.blockX,mob.blockY,mob.blockZ) : endPos; } public IPos rayCastPos(double[] startPos, double[] lookVector, int maxDistance) { diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java b/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java index 88c877018..484fa7d6a 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java @@ -162,11 +162,7 @@ public class ScriptLivingBase extends ScriptEntity Date: Thu, 1 Jun 2023 00:36:40 -0500 Subject: [PATCH 8/9] ScriptLivingBase: -Slightly improved getLookingAtPos() results --- src/api | 2 +- src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api b/src/api index f07e76b56..8c61d07b1 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit f07e76b567671a5f8bfc12d0160cfe857aefea29 +Subproject commit 8c61d07b10d15c4b6a6107d581f16b885cba70da diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java b/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java index 484fa7d6a..0a7b14709 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java @@ -172,7 +172,7 @@ public class ScriptLivingBase extends ScriptEntity Date: Thu, 1 Jun 2023 00:49:33 -0500 Subject: [PATCH 9/9] ScriptLivingBase: -Reverted previous change, not worth the inaccuracies it would cause on servers --- src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java b/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java index 0a7b14709..561f05ed6 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptLivingBase.java @@ -172,7 +172,7 @@ public class ScriptLivingBase extends ScriptEntity