Merge branch 'dev' into open-jdk-nashorn

This commit is contained in:
Luis C.M. committed 2025-06-08 21:39:29 -05:00
commit 5e7828ff66
18 files changed
+129 -20

No files matched your search

+1 -1
View File
@@ -5,7 +5,7 @@ plugins {
id 'idea'
}
version = "1.10"
version = "1.10.2"
group= "kamkeel.customnpc-plus"
archivesBaseName = "CustomNPC-Plus"
+1 -1
Submodule src/api updated: 5c6b16e75f...bbbea878fe.
@@ -49,9 +49,6 @@ public final class CustomGuiClosePacket extends AbstractPacket {
@Override
public void receiveData(ByteBuf in, EntityPlayer player) throws IOException {
if (!(player.openContainer instanceof ContainerCustomGui))
return;
NBTTagCompound comp = ByteBufUtils.readNBT(in);
EventHooks.onCustomGuiClose((IPlayer) NpcAPI.Instance().getIEntity(player), (new ScriptGui()).fromNBT(comp));
}
@@ -55,6 +55,7 @@ public final class RoleGetPacket extends AbstractPacket {
NBTTagCompound compound = new NBTTagCompound();
compound.setBoolean("RoleData", true);
compound.setInteger("RoleOrdinal", npc.advanced.role.ordinal());
GuiDataPacket.sendGuiData((EntityPlayerMP) player, npc.roleInterface.writeToNBT(compound));
}
}
+1 -1
View File
@@ -41,7 +41,7 @@ import noppes.npcs.scripted.NpcAPI;
import java.io.File;
import java.util.Set;
@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.10")
@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.10.2")
public class CustomNpcs {
@SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy")
@@ -390,6 +390,11 @@ public class EventHooks {
return NpcAPI.EVENT_BUS.post(event);
}
public static boolean onPlayerRightClick(PlayerDataScript handler, PlayerEvent.RightClickEvent event) {
handler.callScript(EnumScriptType.RIGHT_CLICK, event);
return NpcAPI.EVENT_BUS.post(event);
}
public static boolean onProfileChange(PlayerDataScript handler, IPlayer player, IProfile profile, int newSlot, int prevSlot, boolean post) {
PlayerEvent.ProfileEvent.Changed event = new PlayerEvent.ProfileEvent.Changed(player, profile, newSlot, prevSlot, post);
handler.callScript(EnumScriptType.PROFILE_CHANGE, event);
@@ -154,6 +154,7 @@ public class ScriptItemEventHandler {
ItemNpcTool.setColor(held.getTagCompound(), color);
e.setCanceled(true);
return;
}
}
}
@@ -23,6 +23,7 @@ import net.minecraftforge.event.entity.item.ItemTossEvent;
import net.minecraftforge.event.entity.living.*;
import net.minecraftforge.event.entity.player.*;
import net.minecraftforge.event.world.BlockEvent;
import noppes.npcs.api.IWorld;
import noppes.npcs.api.entity.IPlayer;
import noppes.npcs.api.item.IItemCustomizable;
import noppes.npcs.config.ConfigMain;
@@ -34,8 +35,10 @@ import noppes.npcs.controllers.ScriptController;
import noppes.npcs.controllers.data.*;
import noppes.npcs.entity.EntityNPCInterface;
import noppes.npcs.items.ItemNpcTool;
import noppes.npcs.items.ItemScripted;
import noppes.npcs.quests.QuestItem;
import noppes.npcs.scripted.NpcAPI;
import noppes.npcs.scripted.event.ItemEvent;
import static noppes.npcs.config.ConfigMain.TrackedQuestUpdateFrequency;
@@ -123,9 +126,46 @@ public class ScriptPlayerEventHandler {
if (!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent(scriptPlayer, 1, NpcAPI.Instance().getIEntity(event.target));
event.setCanceled(EventHooks.onPlayerInteract(handler, ev));
IPlayer ip = NoppesUtilServer.getIPlayer(event.entityPlayer);
noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 1, NpcAPI.Instance().getIEntity(event.target));
boolean rightClick = EventHooks.onPlayerRightClick(handler, rightClickEvent);
noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent(ip, 1, NpcAPI.Instance().getIEntity(event.target));
boolean interact = EventHooks.onPlayerInteract(handler, ev);
event.setCanceled(rightClick || interact);
}
}
@SubscribeEvent
public void invoke(PlayerInteractEvent event) {
if (event.entityPlayer == null || event.entityPlayer.worldObj == null || event.entityPlayer.worldObj.isRemote || !(event.entityPlayer instanceof EntityPlayerMP))
return;
if(event.action == PlayerInteractEvent.Action.LEFT_CLICK_BLOCK)
return;
IPlayer ip = NoppesUtilServer.getIPlayer(event.entityPlayer);
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
PlayerData pd = PlayerData.get(event.entityPlayer);
if (pd == null) {
return;
}
if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_AIR){
if (pd.hadInteract) {
pd.hadInteract = false;
return;
}
noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 0, null);
event.setCanceled(EventHooks.onPlayerRightClick(handler, rightClickEvent));
} else if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK){
pd.hadInteract = true;
IWorld iw = (IWorld) NpcAPI.Instance().getIWorld(event.world);
Object blockCtx = NpcAPI.Instance().getIBlock(iw, event.x, event.y, event.z);
noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 2, blockCtx);
event.setCanceled(EventHooks.onPlayerRightClick(handler, rightClickEvent));
}
}
@@ -7,6 +7,7 @@ import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Facing;
import static noppes.npcs.items.ItemNpcTool.BRUSH_COLOR_TAG;
@@ -18,6 +19,11 @@ public class TileVariant extends TileEntity {
public int variant = 14;
public int rotation;
// Rotation = 0 Couch is Facing North
// Rotation = 1 Couch is Facing East
// Rotation = 2 Couch is Facing South
// Rotation = 3 Couch is Facing West
public void readFromNBT(NBTTagCompound compound) {
super.readFromNBT(compound);
version = compound.getInteger("CNPCVersion");
@@ -93,6 +93,8 @@ public class SubGuiMagic extends SubGuiInterface implements ITextfieldListener,
addLabel(new GuiNpcLabel(50, "magic.interaction", guiLeft + 170, guiTop + 30 + 160 + 5));
interactionField = new GuiNpcTextField(90, this, fontRendererObj, guiLeft + 245, guiTop + 30 + 160, 45, 20, "");
interactionField.setFloatsOnly();
interactionField.setMinMaxDefaultFloat(-Float.MAX_VALUE, Float.MAX_VALUE, 0.0f);
addTextField(interactionField);
if (selectedInteraction != null) {
interactionField.setText(interactionValues.get(selectedInteraction) + "");
@@ -119,6 +119,7 @@ public class GuiNpcAdvanced extends GuiNPCInterface2 implements IGuiData {
@Override
public void setGuiData(NBTTagCompound compound) {
if (compound.hasKey("RoleData")) {
npc.advanced.setRole(compound.getInteger("RoleOrdinal"));
if (npc.roleInterface != null)
npc.roleInterface.readFromNBT(compound);
@@ -18,6 +18,7 @@ public class GuiScriptPlayers extends GuiScriptInterface {
hookList.add(EnumScriptType.INIT.function);
hookList.add(EnumScriptType.TICK.function);
hookList.add(EnumScriptType.INTERACT.function);
hookList.add(EnumScriptType.RIGHT_CLICK.function);
hookList.add(EnumScriptType.ATTACK.function);
hookList.add(EnumScriptType.ATTACKED.function);
hookList.add(EnumScriptType.DAMAGED_ENTITY.function);
@@ -136,12 +136,20 @@ public abstract class GuiDiagram extends Gui {
String nameFrom = iconFrom != null ? getIconName(iconFrom) : "Unknown";
String nameTo = iconTo != null ? getIconName(iconTo) : "Unknown";
tooltip.add(nameFrom + " > " + nameTo + ":");
tooltip.add(conn.hoverText);
// Split Hover Text by newlines
if (conn.hoverText != null && !conn.hoverText.isEmpty()) {
String[] lines = conn.hoverText.split("\n");
tooltip.addAll(Arrays.asList(lines));
}
if (allowTwoWay) {
DiagramConnection reverse = getConnectionByIds(conn.idTo, conn.idFrom);
if (reverse != null) {
tooltip.add(nameTo + " > " + nameFrom + ":");
tooltip.add(reverse.hoverText);
// Split Hover Text by newlines
if (reverse.hoverText != null && !reverse.hoverText.isEmpty()) {
String[] lines = reverse.hoverText.split("\n");
tooltip.addAll(Arrays.asList(lines));
}
}
}
return tooltip;
@@ -100,7 +100,7 @@ public class BlockCouchWoolRenderer extends BlockRendererInterface {
setCouchWood(var1.getBlockMetadata());
if (tile.hasCornerLeft) {
GL11.glPushMatrix();
GL11.glRotatef(90, 0, 1, 0);
GL11.glRotatef(270, 0, 1, 0);
modelCouchCorner.CouchBack.render(0.0625F);
GL11.glPopMatrix();
} else if (tile.hasCornerRight)
@@ -119,8 +119,12 @@ public class BlockCouchWoolRenderer extends BlockRendererInterface {
float[] color = ColorUtil.hexToRGB(tile.color);
GL11.glColor3f(color[0], color[1], color[2]);
if (tile.hasCornerLeft)
if (tile.hasCornerLeft){
GL11.glPushMatrix();
GL11.glRotatef(270, 0, 1, 0);
modelCouchCorner.Cussion.render(0.0625F);
GL11.glPopMatrix();
}
else if (tile.hasCornerRight)
modelCouchCorner.Cussion.render(0.0625F);
else if (tile.hasLeft && tile.hasRight)
@@ -1,6 +1,7 @@
package noppes.npcs.controllers;
import cpw.mods.fml.common.eventhandler.Event;
import jdk.nashorn.api.scripting.ScriptObjectMirror;
import net.minecraft.nbt.NBTTagCompound;
import noppes.npcs.NBTTags;
import noppes.npcs.config.ConfigScript;
@@ -8,10 +9,7 @@ import noppes.npcs.constants.EnumScriptType;
import noppes.npcs.controllers.data.IScriptHandler;
import noppes.npcs.scripted.NpcAPI;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.*;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Method;
@@ -35,6 +33,7 @@ public class ScriptContainer {
private static Method luaCoerce;
private static Method luaCall;
private CompiledScript compScript = null;
private final HashMap<String, ScriptObjectMirror> cachedFunctions = new HashMap<>();
public ScriptContainer(IScriptHandler handler) {
this.handler = handler;
@@ -173,6 +172,7 @@ public class ScriptContainer {
try {
if (!evaluated) {
this.cachedFunctions.clear();
engine.eval(getFullCode());
evaluated = true;
}
@@ -188,7 +188,15 @@ public class ScriptContainer {
unknownFunctions.add(type);
}
} else {
((Invocable) engine).invokeFunction(type, event);
if (!this.cachedFunctions.containsKey(type)) {
ScriptObjectMirror global = (ScriptObjectMirror) engine.getBindings(ScriptContext.ENGINE_SCOPE);
ScriptObjectMirror func = (ScriptObjectMirror) global.get(type);
this.cachedFunctions.put(type, func);
}
ScriptObjectMirror func = this.cachedFunctions.get(type);
if (func != null) {
func.call(null, event);
}
}
} catch (NoSuchMethodException e) {
unknownFunctions.add(type);
@@ -242,7 +242,7 @@ public class DataScript implements INpcScriptHandler {
@Override
public void callScript(String hookName, Event event) {
try {
EnumScriptType enumScriptType = EnumScriptType.valueOf(hookName);
EnumScriptType enumScriptType = EnumScriptType.valueOfIgnoreCase(hookName);
this.callScript(enumScriptType, event);
} catch (IllegalArgumentException ignored) {
}
@@ -10,7 +10,7 @@ public class ModelPartData {
public byte pattern = 0;
public boolean playerTexture;
private ResourceLocation location;
public ResourceLocation location;
public ModelPartData() {
playerTexture = true;
@@ -13,13 +13,16 @@ import noppes.npcs.api.IDamageSource;
import noppes.npcs.api.entity.IEntity;
import noppes.npcs.api.entity.IEntityLivingBase;
import noppes.npcs.api.entity.IPlayer;
import noppes.npcs.api.event.IItemEvent;
import noppes.npcs.api.event.IPlayerEvent;
import noppes.npcs.api.handler.data.IPlayerEffect;
import noppes.npcs.api.handler.data.IProfile;
import noppes.npcs.api.item.IItemCustomizable;
import noppes.npcs.api.item.IItemStack;
import noppes.npcs.constants.EnumScriptType;
import noppes.npcs.scripted.NpcAPI;
import noppes.npcs.scripted.event.CustomNPCsEvent;
import noppes.npcs.scripted.event.ItemEvent;
public class PlayerEvent extends CustomNPCsEvent implements IPlayerEvent {
public final IPlayer player;
@@ -650,6 +653,38 @@ public class PlayerEvent extends CustomNPCsEvent implements IPlayerEvent {
}
}
@Cancelable
public static class RightClickEvent extends PlayerEvent implements IPlayerEvent.RightClickEvent {
/**
* 0:air, 1:entity, 2:block
*/
public final int type;
public final Object target;
public RightClickEvent(IPlayer player, int type, Object target) {
super(player);
this.type = type;
this.target = target;
}
public String getHookName() {
return EnumScriptType.RIGHT_CLICK.function;
}
public int getType() {
return type;
}
public Object getTarget() {
return target;
}
public IPlayer getPlayer() {
return player;
}
}
public static class UpdateEvent extends PlayerEvent implements IPlayerEvent.UpdateEvent {
public UpdateEvent(IPlayer player) {
super(player);