Skip to content

Commit

Permalink
fix: Получение NBT, идентификаторов, экстры у мобов
Browse files Browse the repository at this point in the history
- NBT единожды обновляется перед получением для тайлов и существ.
- Возвращена экстра в `ItemStack`, моды по типу Vein Miner запускаются без костылепляски.
- Реализация `IDRegistry.getStringIdAndTypeForIntegerId`.
- Дроп может изменять длительность жизни через `Entity.get/setAge`.
- Добавлен метод `BlockSource.getLevelForName`, получение блоксурса моба учитывает его, а не измерение.
- Еще несколько отладочных реализаций.
  • Loading branch information
MaXFeeD committed Jan 9, 2024
1 parent 2cad75e commit a55de6b
Show file tree
Hide file tree
Showing 8 changed files with 315 additions and 262 deletions.
38 changes: 21 additions & 17 deletions src/main/java/com/reider745/entity/EntityMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -298,22 +298,24 @@ public static void setTarget(long entityUid, long targetUid) {
});
}

public static int getEntityType(long entityUid) {
return validateThen(entityUid, entity -> {
int networkId = entity.getNetworkId();
public static int getEntityTypeDirect(Entity entity) {
int networkId = entity.getNetworkId();
if (networkId == -1) {
if (entity.isPlayer) {
networkId = EntityType.PLAYER;
}
if (networkId == -1) {
if (entity.isPlayer) {
networkId = EntityType.PLAYER;
}
if (networkId == -1) {
Identifier identifier = entity.getIdentifier();
if (identifier != null) {
networkId = GameEnums.getInt(GameEnums.getSingleton().getEnum("entity_type", identifier.getPath()));
}
Identifier identifier = entity.getIdentifier();
if (identifier != null) {
networkId = GameEnums.getInt(GameEnums.getSingleton().getEnum("entity_type", identifier.getPath()));
}
}
return networkId;
}, -1);
}
return networkId;
}

public static int getEntityType(long entityUid) {
return validateThen(entityUid, entity -> getEntityTypeDirect(entity), -1);
}

public static String getEntityTypeName(long entityUid) {
Expand All @@ -327,7 +329,10 @@ public static String getEntityTypeName(long entityUid) {
}

public static CompoundTag getEntityCompoundTag(long entityUid) {
return validateThen(entityUid, entity -> entity.namedTag, null);
return validateThen(entityUid, entity -> {
entity.saveNBT();
return entity.namedTag;
}, null);
}

public static void setEntityCompoundTag(long entityUid, CompoundTag tag) {
Expand Down Expand Up @@ -361,14 +366,13 @@ public static void setVelocity(long entityUid, float x, float y, float z) {
}

public static int getAge(long entityUid) {
return validateThen(entityUid,
entity -> entity instanceof EntityAgeable ageable && ageable.isBaby() ? entity.age : 0, null);
return validateThen(entityUid, entity -> entity.age, null);
}

public static void setAge(long entityUid, int age) {
validateThen(entityUid, entity -> {
entity.age = age;
if (entity instanceof EntityAgeable ageable) {
entity.age = age;
ageable.setBaby(age > 0);
}
});
Expand Down
79 changes: 57 additions & 22 deletions src/main/java/com/reider745/item/ItemMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
import com.reider745.api.CustomManager;
import com.reider745.block.CustomBlock;
import com.zhekasmirnov.horizon.runtime.logger.Logger;
import com.zhekasmirnov.innercore.api.mod.adaptedscript.AdaptedScriptAPI.IDRegistry;
import com.zhekasmirnov.innercore.api.runtime.other.NameTranslation;

import java.util.ArrayList;

public class ItemMethod {
public static boolean isPostLoad = false;

public static class PropertiesNames {
public static final String ID = "id";
public static final String MAX_DAMAGE = "max_damage";
Expand All @@ -33,26 +35,28 @@ public static class Armors {
public static final String KNOCKBACK_RESIST = "knockbackResist";
}
}
private static CustomManager getCustomManager(int id){

private static CustomManager getCustomManager(int id) {
CustomManager manager = CustomItem.getItemManager(id);
if(manager == null) manager = CustomBlock.getBlockManager(id);
if (manager == null)
manager = CustomBlock.getBlockManager(id);
return manager;
}

public static int getMaxDamageForId(int id, int data){
if(isPostLoad)
public static int getMaxDamageForId(int id, int data) {
if (isPostLoad)
return Item.get(id, data).getMaxDurability();
CustomManager manager = getCustomManager(id);
if(manager != null)
if (manager != null)
return manager.get(PropertiesNames.MAX_DAMAGE, 0);
return 0;
}

public static void setMaxDamage(CustomManager manager, int damage){
public static void setMaxDamage(CustomManager manager, int damage) {
manager.put(PropertiesNames.MAX_DAMAGE, damage);
}

public static void setMaxStackSize(CustomManager manager, int stack){
public static void setMaxStackSize(CustomManager manager, int stack) {
manager.put(PropertiesNames.MAX_STACK, stack);
}

Expand All @@ -62,39 +66,69 @@ public static void setCreativeCategory(CustomManager ptr, int val) {

public static int getCreativeCategory(int id) {
CustomManager ptr = getCustomManager(id);
if(ptr != null)
if (ptr != null)
return ptr.get(PropertiesNames.CREATIVE_CATEGORY, 1);
Logger.warning("not get CreativeCategory "+id);
Logger.warning("not get CreativeCategory " + id);
return 0;
}

public static int getMaxStackForId(int id, int data){
if(isPostLoad)
public static int getMaxStackForId(int id, int data) {
if (isPostLoad)
return Item.get(id, data).getMaxStackSize();
CustomManager manager = getCustomManager(id);
if(manager != null)
if (manager != null)
return manager.get(PropertiesNames.MAX_STACK, 64);
return 64;
}

public static String getNameForId(int id, int data, long extra){
public static String getNameForId(int id, int data, long extra) {
CustomManager manager = CustomBlock.getBlockManager(id);
if(manager != null)
if (manager != null)
return NameTranslation.translate(CustomBlock.getVariants(manager).get(data));

manager = getCustomManager(id);
if(manager != null)
if (manager != null)
return NameTranslation.translate(manager.get(PropertiesNames.NAME));
return Item.get(id, data).getName();
}

public static String getStringIdAndTypeForIntegerId(int id){
if(id > 8000) return "block";
else if(id > 2000) return "item";
public static String getStringIdAndTypeForIntegerId(int id) {
String vanillaMapping;
if (id >= IDRegistry.BLOCK_ID_OFFSET) {
vanillaMapping = CustomBlock.getTextIdForNumber(id);
if (vanillaMapping != null) {
return "block:" + vanillaMapping;
}
} else if (id >= IDRegistry.ITEM_ID_OFFSET) {
vanillaMapping = CustomItem.getTextIdForNumber(id);
if (vanillaMapping != null) {
return "item:" + vanillaMapping;
}
}
vanillaMapping = IDRegistry.getStringIdAndTypeForVanillaId(id);
if (vanillaMapping != null) {
return vanillaMapping;
}
Item item = Item.get(id);
if(item != null)
return (item instanceof ItemBlock ? "block" : "item") + " :" + id;
throw new RuntimeException("Not get type for "+id);
if (item != null) {
vanillaMapping = item.getNamespaceId();
if (vanillaMapping != null) {
int delimiter = vanillaMapping.indexOf(':');
if (delimiter != -1) {
vanillaMapping = vanillaMapping.substring(delimiter + 1);
}
}
if (vanillaMapping == null) {
vanillaMapping = item.getName();
if (vanillaMapping != null) {
vanillaMapping = vanillaMapping.toLowerCase().replace(" ", "");
}
}
if (vanillaMapping != null) {
return (item instanceof ItemBlock ? "block:" : "item:") + vanillaMapping;
}
}
return null;
}

public static void setHandEquipped(CustomManager ptr, boolean val) {
Expand Down Expand Up @@ -128,7 +162,8 @@ public static void setArmorDamageable(CustomManager ptr, boolean value) {

public static void addRepairItemId(CustomManager ptr, int id) {
ArrayList<Integer> repairs = ptr.get(PropertiesNames.REPAIRS);
if(repairs == null) repairs = new ArrayList<>();
if (repairs == null)
repairs = new ArrayList<>();

repairs.add(id);

Expand Down
Loading

0 comments on commit a55de6b

Please sign in to comment.