Skip to content

Commit

Permalink
feat(all): 彻底完成基础功能,并适command部分
Browse files Browse the repository at this point in the history
First release version !!!
尽管功能不多,但在兼容性方面已经有了很多的增进,基本实现无资源mod的适配。
预计将来会在资源文件方面作出添加和修正(希望这不是flag)
  • Loading branch information
npofsi committed Aug 17, 2018
1 parent 4d57ff7 commit 621d959
Show file tree
Hide file tree
Showing 38 changed files with 928 additions and 78 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# RMPEScript[![Travis-CI build](https://travis-ci.org/npofsi/RMPEScript.svg?branch=master)](https://travis-ci.org/npofsi/RMPEScript)[![CircleCI](https://circleci.com/gh/npofsi/RMPEScript.svg?style=svg)](https://circleci.com/gh/npofsi/RMPEScript)A minecraft script runtime on forge(fml).一个运行于FML上的Minecraft脚本运行时。目标在于支持运行热拔插脚本而不会对游戏体验产生过大影响。目标支持语言javascript(rhino)lua(luaj)目标支持类型.js.lua.json(响应).rmpe(资源+核心)
# RMPEScriptA minecraft script runtime on forge(fml).一个运行于FML上的Minecraft脚本运行时。目标在于支持运行热拔插脚本而不会对游戏体验产生过大影响。目标支持语言javascript(rhino)lua(luaj)目标支持类型.js.lua.json(响应).rmpe(资源+核心)
Expand Down
32 changes: 8 additions & 24 deletions src/main/java/pro/npofsi/rmpescript/RMPEScript.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.apache.logging.log4j.Logger;
import pro.npofsi.rmpescript.beta.CommandBoom;
import pro.npofsi.rmpescript.broadcast.FMLEventHandler;
import pro.npofsi.rmpescript.broadcast.ForgeEventHandler;
import pro.npofsi.rmpescript.command.CommandManager;
import pro.npofsi.rmpescript.common.CommonProxy;
Expand All @@ -39,7 +40,7 @@ public class RMPEScript {
public static final String VERSION = "1.0.0";

@Mod.Instance(RMPEScript.MODID)
public RMPEScript instance;
public static RMPEScript instance;

@SidedProxy(clientSide = "pro.npofsi.rmpescript.client.ClientProxy",
serverSide = "pro.npofsi.rmpescript.common.CommonProxy")
Expand All @@ -51,12 +52,7 @@ public class RMPEScript {
public static String randomTag(){return "@"+randomId();}

@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
//TODO

Log.setServer(event.getModLog());
}
public void preInit(FMLPreInitializationEvent event) { Log.setServer(event.getModLog()); }

@EventHandler
public void init(FMLInitializationEvent event)
Expand All @@ -66,32 +62,20 @@ public void init(FMLInitializationEvent event)
Log.i("RMPEScript starting...");
ScriptFileManager.getInstance().refresh();
ScriptManager.getInstance().runAllScripts(null);
// some example code
//logger.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());

FMLEventHandler.runCallBack("init",event);
}

@EventHandler
public void postInit(FMLPostInitializationEvent event)
{
//TODO
//

}
public void postInit(FMLPostInitializationEvent event) { }

@EventHandler
public void serverStarting(FMLServerStartingEvent event) {

Intent.setServer(event.getServer());
CommandManager.getInstance().refresh((ServerCommandManager) event.getServer().getCommandManager());
CommandManager.getInstance().refresh((ServerCommandManager) Intent.getServer().getCommandManager());
CommandManager.getInstance().register(new CommandRMPE());
Level.setWorld(event.getServer().getEntityWorld());

// CommandManager.getInstance().register(new CommandBoom());
// ForgeEventHandler.getInstance().registerCallback("pickupItem", new ForgeEventHandler.EntityItemPickupEventCallback() {
// public void call(EntityItemPickupEvent event) {
// Level.explode(event.getEntity().posX,event.getEntity().posY,event.getEntity().posZ,10);
// }
// });
FMLEventHandler.runCallBack("serverStarting",event);
}


Expand Down
26 changes: 26 additions & 0 deletions src/main/java/pro/npofsi/rmpescript/broadcast/FMLEventHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package pro.npofsi.rmpescript.broadcast;

import net.minecraftforge.fml.common.event.FMLEvent;

import java.util.Map;
import java.util.Stack;
import java.util.TreeMap;

public class FMLEventHandler {

//这个统一形式定义的接口导致不能使用rhino所提供的interface的简写形式,会导致rhino找不到相应的类型
public interface FMLEventCallback{
public void call(FMLEvent event);
}
private static Map<String,Stack<FMLEventCallback>> eventStore=new TreeMap<String,Stack<FMLEventCallback>>();
public void registerCallback(String name,FMLEventCallback callback){
if(eventStore.get(name)==null) { eventStore.put(name,new Stack<FMLEventCallback>());eventStore.get(name).push(callback); }else{ eventStore.get(name).push(callback); }
}
public boolean unregisterCallback(String name,FMLEventCallback callback){
if(eventStore.get(name)!=null) { return eventStore.get(name).remove(callback); }return false;
}
public static void runCallBack(String eventName,FMLEvent event){
Stack<FMLEventCallback> stk=eventStore.get(eventName);
if(stk != null) for (int i = 0; i < stk.size();i++) stk.elementAt(i).call(event);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,13 @@

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.ArrowNockEvent;
import net.minecraftforge.event.entity.player.AdvancementEvent;
import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
import net.minecraftforge.event.entity.player.PlayerPickupXpEvent;
import net.minecraftforge.event.entity.player.AttackEntityEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import pro.npofsi.rmpescript.RMPEScript;
import pro.npofsi.rmpescript.include.modpe.Level;

import java.util.Iterator;
import java.util.Map;
import java.util.Stack;
import java.util.TreeMap;
Expand All @@ -34,6 +30,7 @@ public void unregister(){
MinecraftForge.EVENT_BUS.unregister(ForgeEventHandler.getInstance());
}

//这个统一形式定义的接口导致不能使用rhino所提供的interface的简写形式,会导致rhino找不到相应的类型
public interface EventCallback{
public void call(Event event);
}
Expand All @@ -45,6 +42,10 @@ public boolean unregisterCallback(String name,EventCallback callback){
if(eventStore.get(name)!=null) { return eventStore.get(name).remove(callback); }return false;
}

private void runCallBack(String eventName,Event event){
Stack<EventCallback> stk=eventStore.get(eventName);
if(stk != null) for (int i = 0; i < stk.size();i++) stk.elementAt(i).call(event);
}
// /* all */
// @SubscribeEvent
// public void eventCalled(Event event){
Expand All @@ -55,30 +56,21 @@ public boolean unregisterCallback(String name,EventCallback callback){

/* pickupItem */
@SubscribeEvent
public void pickupItem(EntityItemPickupEvent event){
Stack<EventCallback> stk=eventStore.get("pickupItem");
if(stk != null) for (int i = 0; i < stk.size();i++) stk.elementAt(i).call(event);
}
public void pickupItem(EntityItemPickupEvent event){ runCallBack("pickupItem",event); }

/* arrowNocked */
@SubscribeEvent
public void arrowNocked(ArrowNockEvent event){
Stack<EventCallback> stk=eventStore.get("arrowNocked");
if(stk != null) for (int i = 0; i < stk.size();i++) stk.elementAt(i).call(event);
}
public void arrowNocked(ArrowNockEvent event){ runCallBack("arrowNocked",event); }

/* pickupXp */
@SubscribeEvent
public void pickupXp(PlayerPickupXpEvent event) {
Stack<EventCallback> stk = eventStore.get("pickupXp");
if (stk != null) for (int i = 0; i < stk.size(); i++) stk.elementAt(i).call(event);
}
public void pickupXp(PlayerPickupXpEvent event) { runCallBack("pickupXp",event); }

/* entityAttacked */
@SubscribeEvent
public void entityAttacked(AttackEntityEvent event){
Stack<EventCallback> stk=eventStore.get("entityAttacked");
if(stk != null) for (int i = 0; i < stk.size();i++) stk.elementAt(i).call(event);
public void entityAttacked(AttackEntityEvent event){ runCallBack("entityAttacked",event); }

}
/* Advencement */
@SubscribeEvent
public void advancement(AdvancementEvent event){ runCallBack("entityAttacked",event); }
}
29 changes: 29 additions & 0 deletions src/main/java/pro/npofsi/rmpescript/command/CommandSender.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package pro.npofsi.rmpescript.command;

import net.minecraft.command.ICommandSender;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.World;
import pro.npofsi.rmpescript.RMPEScript;
import pro.npofsi.rmpescript.include.modpe.Level;

import javax.annotation.Nullable;

public class CommandSender implements ICommandSender {
@Override
public String getName(){
return"RMPEScript";
}
@Override
public boolean canUseCommand(int permLevel,String commandName){
return true;
}
@Override
public World getEntityWorld(){
return Level.getWorld();
}
@Nullable
@Override
public MinecraftServer getServer(){
return RMPEScript.Intent.getServer();
}
}
18 changes: 17 additions & 1 deletion src/main/java/pro/npofsi/rmpescript/control/CommandRMPE.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package pro.npofsi.rmpescript.control;

import net.minecraft.client.Minecraft;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.text.TextComponentString;
import pro.npofsi.rmpescript.runtime.ScriptFileManager;
import pro.npofsi.rmpescript.runtime.ScriptManager;

Expand All @@ -16,7 +18,7 @@ public String getName() {

@Override
public String getUsage(ICommandSender sender) {
return "rmpe <operater> [args...]";
return "/rmpe <operater> [args...]";
}

@Override
Expand All @@ -27,6 +29,20 @@ public void execute(MinecraftServer server, ICommandSender sender, String[] args
ScriptManager.getInstance().runAllScripts(null);
break;
}
case "run":{
String label=ScriptManager.getInstance().loadScript("eval_cache",ScriptManager.getInstance().concat(args[1]));
ScriptManager.getInstance().runScript(label);
Minecraft.getMinecraft().player.sendMessage(new TextComponentString("Code running in <"+label+">"));
break;
}
case "eval":{
ScriptManager.getInstance().getLoader(args[1]).eval(args[2]);
}
case "status":{
String[] s=ScriptManager.getInstance().getAllStatus();
for(int i=0;i<s.length;i++)Minecraft.getMinecraft().player.sendMessage(new TextComponentString(s[i]));
break;
}
default:{

}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/pro/npofsi/rmpescript/include/modpe/Block.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package pro.npofsi.rmpescript.include.modpe;

public class Block {
}
4 changes: 4 additions & 0 deletions src/main/java/pro/npofsi/rmpescript/include/modpe/Entity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package pro.npofsi.rmpescript.include.modpe;

public class Entity {
}
20 changes: 20 additions & 0 deletions src/main/java/pro/npofsi/rmpescript/include/modpe/Global.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package pro.npofsi.rmpescript.include.modpe;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentString;
import pro.npofsi.rmpescript.RMPEScript;

import java.util.Iterator;
import java.util.List;

public class Global {
public static void clientMessage(String message){
List<EntityPlayer> ps=RMPEScript.Intent.getServer().getEntityWorld().playerEntities;
for(Iterator<EntityPlayer> i=ps.iterator();i.hasNext();){
i.next().sendMessage(new TextComponentString(message));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.Iterator;
import java.util.Stack;

public class Hooks {
public class Hook {
public static class useItem{
private useItem(){}
public static useItem getInstance(){
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/pro/npofsi/rmpescript/include/modpe/Item.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package pro.npofsi.rmpescript.include.modpe;

public class Item {
}
19 changes: 14 additions & 5 deletions src/main/java/pro/npofsi/rmpescript/include/modpe/Level.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package pro.npofsi.rmpescript.include.modpe;

import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.command.server.CommandSetBlock;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import pro.npofsi.rmpescript.RMPEScript;
import pro.npofsi.rmpescript.command.CommandSender;

import javax.annotation.Nullable;
import java.util.UUID;

public class Level {
Expand All @@ -21,9 +28,11 @@ public static void explode(double x, double y, double z, double r, boolean isSmo
public static void explode(double x, double y, double z, double r){
Level.getWorld().createExplosion(null,x ,y, z, (float)r, true);
}
// public static void setTile(double x,double y,double z,String id,int data){
// NBTTagCompound nbtc=new NBTTagCompound();
// nbtc.setUniqueId("id",UUID.fromString(id));
// Level.getWorld().setTileEntity(new BlockPos(x, y, z), TileEntity.create(Level.getWorld(),nbtc));
// }
public static void executeCommand(String command,boolean bl){

}
public static void setTile(double x,double y,double z,String id,int data) throws CommandException {
new CommandSetBlock().execute(RMPEScript.Intent.getServer(),new CommandSender(),new String[]{""+(int)x,""+(int)y,""+(int)z,""+id,""+data});
}

}
13 changes: 13 additions & 0 deletions src/main/java/pro/npofsi/rmpescript/include/modpe/ModPE.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
package pro.npofsi.rmpescript.include.modpe;

import net.minecraft.command.CommandException;
import net.minecraft.command.CommandTitle;
import pro.npofsi.rmpescript.RMPEScript;
import pro.npofsi.rmpescript.command.CommandSender;

public class ModPE {
public static void showTipMessage(String message){
try {
new CommandTitle().execute(RMPEScript.Intent.getServer(),new CommandSender(),new String[]{"@a","{\"text\":"+message+"}"});
} catch (CommandException e) {
RMPEScript.Log.e(e.getLocalizedMessage());
e.printStackTrace();
}
}
}
4 changes: 4 additions & 0 deletions src/main/java/pro/npofsi/rmpescript/include/modpe/Player.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package pro.npofsi.rmpescript.include.modpe;

public class Player {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package pro.npofsi.rmpescript.include.modpe.constants;

public class ArmorType {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package pro.npofsi.rmpescript.include.modpe.constants;

public class BlockFace {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package pro.npofsi.rmpescript.include.modpe.constants;

public class BlockRenderLayer {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package pro.npofsi.rmpescript.include.modpe.constants;

public class ChatColor {
public static final String BLACK = "§0"; // \u00A70
public static final String DARK_BLUE = "§1"; // \u00A71
public static final String DARK_GREEN = "§2"; // \u00A72
public static final String DARK_AQUA = "§3"; // \u00A73
public static final String DARK_RED = "§4"; // \u00A74
public static final String DARK_PURPLE = "§5"; //\u00A75
public static final String GOLD = "§6 "; //\u00A76
public static final String GRAY = "§7 "; //\u00A77
public static final String DARK_GRAY = "§8"; //\u00A78
public static final String BLUE = "§9 "; //\u00A79
public static final String GREEN = "§a"; //\u00A7a
public static final String AQUA = "§b "; //\u00A7b
public static final String RED = "§c"; //\u00A7c
public static final String LIGHT_PURPLE = "§d"; //\u00A7d
public static final String YELLOW = "§e"; //\u00A7e
public static final String WHITE = "§f"; //\u00A7f
public static final String OBFUSCATED = "§k"; //\u00A7k
public static final String BOLD = "§l "; //\u00A7l
public static final String STRIKETHROUGH = "§m";//\u00A7m
public static final String UNDERLINE = "§n"; //\u00A7n
public static final String ITALIC = "§o"; //\u00A7o
public static final String RESET = "§r"; //\u00A7r
public static final String BEGIN = "\n"; //\n
public static final String EXTRA_LINE = "\n"; //\n
}
Loading

0 comments on commit 621d959

Please sign in to comment.