fix gadget infinity create

This commit is contained in:
Akka 2022-06-23 13:12:58 +08:00 committed by Melledy
parent b796372042
commit 1c6c581399
3 changed files with 23 additions and 7 deletions

View File

@ -351,6 +351,16 @@ public class SceneScriptManager {
}
public EntityGadget createGadget(int groupId, int blockId, SceneGadget g) {
if(g.isOneoff){
var hasEntity = getScene().getEntities().values().stream()
.filter(e -> e instanceof EntityGadget)
.filter(e -> e.getGroupId() == g.group.id)
.filter(e -> e.getConfigId() == g.config_id)
.findFirst();
if(hasEntity.isPresent()){
return null;
}
}
EntityGadget entity = new EntityGadget(getScene(), g.gadget_id, g.pos);
if (entity.getGadgetData() == null){

View File

@ -11,4 +11,9 @@ public class SceneGadget extends SceneObject{
public int point_type;
public SceneBossChest boss_chest;
public int interact_id;
public boolean isOneoff;
public void setIsOneoff(boolean isOneoff){
this.isOneoff = isOneoff;
}
}

View File

@ -1,8 +1,7 @@
package emu.grasscutter.scripts.serializer;
import com.esotericsoftware.reflectasm.ConstructorAccess;
import com.esotericsoftware.reflectasm.ConstructorAccess;
import com.esotericsoftware.reflectasm.MethodAccess;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.scripts.ScriptUtils;
import lombok.AccessLevel;
@ -12,8 +11,6 @@ import lombok.experimental.FieldDefaults;
import org.luaj.vm2.LuaTable;
import org.luaj.vm2.LuaValue;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@ -56,10 +53,12 @@ public class LuaSerializer implements Serializer {
object = (T) (Float) keyValue.tofloat(); // terrible...
} else if (keyValue.isstring()) {
object = (T) keyValue.tojstring();
} else {
} else if (keyValue.isboolean()) {
object = (T) (Boolean) keyValue.toboolean();
} else {
object = (T) keyValue;
}
if (object != null) {
list.add(object);
}
@ -118,7 +117,9 @@ public class LuaSerializer implements Serializer {
methodAccess.invoke(object, fieldMeta.index, keyValue.toint());
} else if (fieldMeta.getType().equals(String.class)) {
methodAccess.invoke(object, fieldMeta.index, keyValue.tojstring());
} else {
} else if (fieldMeta.getType().equals(boolean.class)) {
methodAccess.invoke(object, fieldMeta.index, keyValue.toboolean());
} else {
methodAccess.invoke(object, fieldMeta.index, keyValue.tojstring());
}
} catch (Exception ex) {