From fea231e190e708104f44e03f2661b23a0216fdf9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 00:08:11 +0900 Subject: [PATCH 001/617] Add API --- build.gradle | 3 + .../java/ml/pkom/easyapi/FileControl.java | 173 +++++++++++ .../java/ml/pkom/easyapi/config/Config.java | 273 ++++++++++++++++++ .../java/ml/pkom/easyapi/config/IConfig.java | 37 +++ .../ml/pkom/easyapi/config/JsonConfig.java | 96 ++++++ .../ml/pkom/easyapi/config/YamlConfig.java | 107 +++++++ .../ml/pkom/easyapi/config/package-info.java | 4 + .../mcpitanlibarch/api/entity/Player.java | 13 + .../api/registry/ArchRegistry.java | 25 ++ .../api/util/client/ScreenUtil.java | 20 ++ 10 files changed, 751 insertions(+) create mode 100644 common/src/main/java/ml/pkom/easyapi/FileControl.java create mode 100644 common/src/main/java/ml/pkom/easyapi/config/Config.java create mode 100644 common/src/main/java/ml/pkom/easyapi/config/IConfig.java create mode 100644 common/src/main/java/ml/pkom/easyapi/config/JsonConfig.java create mode 100644 common/src/main/java/ml/pkom/easyapi/config/YamlConfig.java create mode 100644 common/src/main/java/ml/pkom/easyapi/config/package-info.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java diff --git a/build.gradle b/build.gradle index fabeb0562..3573dd513 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,9 @@ subprojects { // mappings loom.officialMojangMappings() // The following line declares the yarn mappings you may select this one as well. mappings "net.fabricmc:yarn:${rootProject.yarn_mappings}:v2" + + // https://mvnrepository.com/artifact/org.yaml/snakeyaml + implementation 'org.yaml:snakeyaml:1.8' } } diff --git a/common/src/main/java/ml/pkom/easyapi/FileControl.java b/common/src/main/java/ml/pkom/easyapi/FileControl.java new file mode 100644 index 000000000..7d19eaa04 --- /dev/null +++ b/common/src/main/java/ml/pkom/easyapi/FileControl.java @@ -0,0 +1,173 @@ +package ml.pkom.easyapi; + +import java.io.*; +import java.nio.channels.FileChannel; + +public class FileControl { + + public static boolean fileWriteContents(String pathName, String contents){ return fileWriteContents(new File(pathName), contents); } + + public static String fileReadContents(String pathName) { return fileReadContents(new File(pathName)); } + + public static boolean fileCopy(String inPathName, String outPathName) { return fileCopy(new File(inPathName), new File(outPathName)); } + + public static boolean fileExists(String pathName) { return fileExists(new File(pathName)); } + + public static long getFileTime(String pathName) { return getFileTime(new File(pathName)); } + + public static boolean setFileTime(String pathName, long time) { return setFileTime(new File(pathName), time); } + + public static boolean fileRename(String pathName, String renamedPathName) { return fileRename(new File(pathName), new File(renamedPathName)); } + + public static String basename(String pathName) { return basename(new File(pathName)); } + + public static String dirname(String pathName) { return dirname(new File(pathName)); } + + public static String dirname(String pathName, int levels) { return dirname(new File(pathName), levels); } + + /** + * ファイルにデータを書き込みます。 + * 失敗した場合falseを返します。 + * + * @param file ファイル + * @param contents データ + */ + public static boolean fileWriteContents(File file, String contents) { + try { + PrintWriter writer = new PrintWriter( + new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"))); + writer.println(contents); + writer.close(); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + /** + * ファイルからデータを読み込みます。 + * 失敗した場合nullを返します。 + * + * @param file ファイル + * @return ファイルのデータ or null + */ + public static String fileReadContents(File file) { + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")); + String line = ""; + String contents = ""; + while ((line = reader.readLine()) != null) { + contents += line + "\n"; + } + reader.close(); + return contents; + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + /** + * ファイルからデータを読み込みます。 + * 失敗した場合falseを返します。 + * + * @param inFile コピー元ファイル + * @param outFile コピー先ファイル + */ + public static boolean fileCopy(File inFile, File outFile) { + try { + FileChannel inCh, outCh = null; + FileInputStream inStream = new FileInputStream(inFile); + FileOutputStream outStream = new FileOutputStream(outFile); + inCh = inStream.getChannel(); + outCh = outStream.getChannel(); + outCh.transferFrom(inCh, 0, inCh.size()); + inCh.close(); + outCh.close(); + inStream.close(); + outStream.close(); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * File.exists()のエイリアス関数です。 + * + * @param file 確認するファイル + */ + public static boolean fileExists(File file) { + return file.exists(); + } + + /** + * File.lastModified()のエイリアス関数です。 + * + * @param file 更新日時を取得するファイル + * @return ファイルの更新日時 + */ + public static long getFileTime(File file) { + return file.lastModified(); + } + + + /** + * File.setLastModified()のエイリアス関数です。 + * + * @param file 日時変更されるファイル + * @param time 変更後の更新日時 + */ + public static boolean setFileTime(File file, long time) { + return file.setLastModified(time); + } + + /** + * File.renameTo()のエイリアス関数です。 + * + * @param file 名前変更されるファイル + * @param renamedFile 名前変更後のファイル + */ + public static boolean fileRename(File file, File renamedFile) { + return file.renameTo(renamedFile); + } + + /** + * StringからFileへ変換します。 + * + * @param pathName ファイルのパス + * @return File + */ + public static File stringToFile(String pathName) { + return new File(pathName); + } + + public static String basename(File file) { + return file.getName(); + } + + public static String dirname(File file) { + return file.getParent(); + } + + public static String dirname(File file, int levels) { + for (int i = 0; i < levels; i++) { + file = dirfile(file); + } + return file.toString(); + } + + public static File dirfile(File file) { + return file.getParentFile(); + } + + public static File dirfile(File file, int count) { + for (int i = 0; i > count; i++) { + file = dirfile(file); + } + return file; + } + +} diff --git a/common/src/main/java/ml/pkom/easyapi/config/Config.java b/common/src/main/java/ml/pkom/easyapi/config/Config.java new file mode 100644 index 000000000..8d3e8e4ce --- /dev/null +++ b/common/src/main/java/ml/pkom/easyapi/config/Config.java @@ -0,0 +1,273 @@ +package ml.pkom.easyapi.config; + +import java.io.File; +import java.util.LinkedHashMap; +import java.util.Map; + +public class Config implements IConfig { + public Map configMap = new LinkedHashMap<>(); + + /** + * 任意ファイルを読み込み、Mapへ変換 + * + * @param file + */ + public Config(File file) { + load(file); + } + + /** + * 任意ファイルを読み込み、Mapへ変換 + * + * @param file + */ + public Config(String file) { + this(new File(file)); + } + + public Config() {}; + + /** + * Configの変換 + * + * @param config + */ + public Config(Config config) { + configMap = config.configMap; + }; + + /** + * マップのキーから値を取得 + * "."でパスを区切る + * + * @param key キー + * @return 取得した値 + */ + @SuppressWarnings("unchecked") + public Object get(String key) { + try { + key = key.replace("\\.", "$\$"); + String[] keyList = key.split("\\."); + if (keyList.length == 1) { + key = key.replace("$\$", "."); + return configMap.get(key); + } + int i = 0; + Map inMap = new LinkedHashMap<>(); + for (String k : keyList) { + i++; + k = k.replace("$\$", "."); + if (keyList.length == i) { + return inMap.get(k); + } + if (i == 1) { + inMap = (Map) configMap.get(k); + continue; + } + inMap = (Map) inMap.get(k); + } + return null; + } catch (Exception e) { + return null; + } + + } + + /** + * マップのキーから値(文字列)を取得 + * "."でパスを区切る + * + * @param key キー + * @return 取得した値 + */ + public String getString(String key) { + return (String) get(key); + } + + /** + * マップのキーから値(数値)を取得 + * "."でパスを区切る + * + * @param key キー + * @return 取得した値 + */ + public int getInt(String key) { + Object obj = get(key); + if (obj instanceof Double) { + return ((Double)obj).intValue(); + } + if (obj instanceof Short) { + return ((Short)obj).intValue(); + } + if (obj instanceof Long) { + return ((Long)obj).intValue(); + } + return (Integer) obj; + } + + public double getDouble(String key) { + return (Double) get(key); + } + + /** + * マップのキーから値(真偽値)を取得 + * "."でパスを区切る + * + * @param key キー + * @return 取得した値 + */ + public boolean getBoolean(String key) { + try { + return (Boolean) get(key); + } catch (Exception e) { + return false; + } + } + + /** + * マップのキーに値をセット + * "."でパスを区切る + * 失敗するとfalseを返す + * + * @param key キー + * @param value 値 + * @return 真偽値 + */ + @SuppressWarnings("unchecked") + public boolean set(String key, Object value) { + try { + key = key.replace("\\.", "$\$"); + String[] keyList = key.split("\\."); + if (keyList.length == 1) { + key = key.replace("$\$", "."); + configMap.put(key, value); + return true; + } + int i = 0; + Map inMap = new LinkedHashMap<>(); + for (String k : keyList) { + i++; + k = k.replace("$\$", "."); + if (keyList.length == i) { + inMap.put(k, value); + continue; + } + Map beforeInMap = inMap; + if (configMap.containsKey(k) && i == 1) { + inMap = (LinkedHashMap) configMap.get(k); + }else if (beforeInMap.containsKey(k)){ + inMap = (LinkedHashMap) beforeInMap.get(k); + }else { + inMap = new LinkedHashMap(); + } + if (i == 1) { + configMap.put(k, inMap); + continue; + } + beforeInMap.put(k, inMap); + } + return true; + } catch (Exception e) { + return false; + } + } + + /** + * マップのキーに値(文字列)をセット + * "."でパスを区切る + * 失敗するとfalseを返す + * + * @param key キー + * @param value 値 + * @return 真偽値 + */ + public boolean setString(String key, String value) { + return set(key, value); + } + + /** + * マップのキーに値(数値)をセット + * "."でパスを区切る + * 失敗するとfalseを返す + * + * @param key キー + * @param value 値 + * @return 真偽値 + */ + public boolean setInt(String key, int value) { + return set(key, value); + } + + public boolean setDouble(String key, double value) { + return set(key, value); + } + + /** + * マップのキーに値(真偽値)をセット + * "."でパスを区切る + * 失敗するとfalseを返す + * + * @param key キー + * @param value 値 + * @return 真偽値 + */ + public boolean setBoolean(String key, boolean value) { + return set(key, value); + } + + /** + * StringをFileにして読み込み、継承先で処理 + * + * @param file ファイル名 + */ + public boolean load(String file) { + return load(new File(file)); + } + + /** + * この関数は継承先で定義 + * + * @param file ファイル + */ + public boolean load(File file) { + return false; + } + + /** + * StringをFileにし、継承先で処理して保存 + * + * @param file ファイル名 + */ + public boolean save(String file) { + return save(new File(file)); + } + + /** + * ファイルを継承先で処理して保存 + * + * @param file ファイル + */ + public boolean save(File file) { + return save(file, true); + } + + /** + * ファイルを継承先で処理して保存 + * + * @param file ファイル名 + * @param pretty 整形 + */ + public boolean save(String file, boolean pretty) { + return save(new File(file), pretty); + } + + /** + * この関数は継承先で定義 + * + * @param file ファイル + * @param pretty 整形 + */ + public boolean save(File file, boolean pretty) { + return false; + } +} diff --git a/common/src/main/java/ml/pkom/easyapi/config/IConfig.java b/common/src/main/java/ml/pkom/easyapi/config/IConfig.java new file mode 100644 index 000000000..5a987aa9d --- /dev/null +++ b/common/src/main/java/ml/pkom/easyapi/config/IConfig.java @@ -0,0 +1,37 @@ +package ml.pkom.easyapi.config; + +import java.io.File; +import java.util.LinkedHashMap; +import java.util.Map; + +public interface IConfig { + Map configMap = new LinkedHashMap<>(); + + Object get(String key); + + String getString(String key); + + int getInt(String key); + + boolean getBoolean(String key); + + boolean set(String key, Object value); + + boolean setString(String key, String value); + + boolean setInt(String key, int value); + + boolean setBoolean(String key, boolean value); + + boolean load(String file); + + boolean load(File file); + + boolean save(String file); + + boolean save(File file); + + boolean save(String file, boolean pretty); + + boolean save(File file, boolean pretty); +} diff --git a/common/src/main/java/ml/pkom/easyapi/config/JsonConfig.java b/common/src/main/java/ml/pkom/easyapi/config/JsonConfig.java new file mode 100644 index 000000000..46583af5d --- /dev/null +++ b/common/src/main/java/ml/pkom/easyapi/config/JsonConfig.java @@ -0,0 +1,96 @@ +package ml.pkom.easyapi.config; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import ml.pkom.easyapi.FileControl; + +import java.io.File; +import java.lang.reflect.Type; +import java.util.LinkedHashMap; + +public class JsonConfig extends Config { + /** + * + * @param file ファイル + */ + public JsonConfig(File file) { + super(file); + } + + /** + * + * @param file ファイル名 + */ + public JsonConfig(String file) { + super(file); + } + + public JsonConfig() { + super(); + } + + /** + * Config→JsonConfigへ変換 + * + * @param config Config + */ + public JsonConfig(Config config) { + super(config); + } + + /** + * Jsonファイルを読み込んでMapへ変換 + * + * @param file ファイル + * @return 成功→true / 失敗→false + */ + public boolean load(File file) { + try { + String configData = FileControl.fileReadContents(file); + Gson gson = new Gson(); + Type jsonMap = new TypeToken>() { + }.getType(); + configMap = gson.fromJson(configData, jsonMap); + return true; + } catch (Exception e) { + return false; + } + } + + /** + * MapをJsonへ変換し、Jsonファイルとして保存 + * + * @param file ファイル + * @param pretty 整形 + * @return 成功→true / 失敗→false + */ + public boolean save(File file, boolean pretty) { + try { + String configData = this.toJson(pretty); + FileControl.fileWriteContents(file, configData); + return true; + } catch (Exception e) { + return false; + } + } + + /** + * MapをJsonへ変換 失敗した場合はnullを返す + * + * @param pretty 整形 + * @return Jsonの文字列 + */ + public String toJson(boolean pretty) { + try { + Gson gson = new Gson(); + if (pretty) { + gson = new GsonBuilder().setPrettyPrinting().create(); + } + String configData = gson.toJson(configMap); + return configData; + } catch (Exception e) { + return null; + } + } +} diff --git a/common/src/main/java/ml/pkom/easyapi/config/YamlConfig.java b/common/src/main/java/ml/pkom/easyapi/config/YamlConfig.java new file mode 100644 index 000000000..ea6adc344 --- /dev/null +++ b/common/src/main/java/ml/pkom/easyapi/config/YamlConfig.java @@ -0,0 +1,107 @@ +package ml.pkom.easyapi.config; + +import ml.pkom.easyapi.FileControl; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; + +import java.io.File; +import java.util.Map; + +public class YamlConfig extends Config { + + /** + * + * @param file ファイル + */ + public YamlConfig(File file) { + super(file); + } + + /** + * + * @param file ファイル名 + */ + public YamlConfig(String file) { + super(file); + } + + public YamlConfig() { + super(); + } + + /** + * Config→JsonConfigへ変換 + * + * @param config Config + */ + public YamlConfig(Config config) { + super(config); + } + + private DumperOptions.FlowStyle style = DumperOptions.FlowStyle.BLOCK; + + /** + * 出力するYamlのスタイルの設定 + * + * @param flowStyle FlowStyle + */ + public void setStyle(DumperOptions.FlowStyle flowStyle) { + style = flowStyle; + } + + /** + * Yamlファイルを読み込んでMapへ変換 + * + * @param file ファイル + * @return 成功→true / 失敗→false + */ + @SuppressWarnings("unchecked") + public boolean load(File file) { + try { + String configData = FileControl.fileReadContents(file); + Yaml yaml = new Yaml(); + configMap = (Map) yaml.load(configData); + return true; + } catch (Exception e) { + return false; + } + } + + /** + * MapをYamlへ変換し、Yamlファイルとして保存 + * + * @param file ファイル + * @param pretty 整形 + * @return 成功→true / 失敗→false + */ + public boolean save(File file, boolean pretty) { + try { + String configData = this.toYaml(pretty); + FileControl.fileWriteContents(file, configData); + return true; + } catch (Exception e) { + return false; + } + } + + /** + * MapをYamlへ変換 失敗した場合はnullを返す + * + * @param pretty 整形 + * @return Yamlの文字列 + */ + public String toYaml(boolean pretty) { + try { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(style); + if (pretty) { + options.setPrettyFlow(true); + } + Yaml yaml = new Yaml(options); + String configData = yaml.dump(configMap); + return configData; + } catch (Exception e) { + return null; + } + } +} diff --git a/common/src/main/java/ml/pkom/easyapi/config/package-info.java b/common/src/main/java/ml/pkom/easyapi/config/package-info.java new file mode 100644 index 000000000..8bb53e1d3 --- /dev/null +++ b/common/src/main/java/ml/pkom/easyapi/config/package-info.java @@ -0,0 +1,4 @@ +/** + * Config関連のクラスが入っているパッケージ + */ +package ml.pkom.easyapi.config; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index 6f1a375f3..17b5f8a3f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -6,6 +6,7 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.screen.ScreenHandler; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -125,4 +126,16 @@ public PlayerAbilities getAbilities() { public boolean isCreative() { return getAbilities().creativeMode; } + + public World getWorld() { + return getEntity().world; + } + + public ScreenHandler getCurrentScreenHandler() { + return getEntity().currentScreenHandler; + } + + public boolean isSneaking() { + return getEntity().isSneaking(); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 04fbbc423..483a5e571 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -5,7 +5,10 @@ import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.EntityType; import net.minecraft.item.Item; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -17,12 +20,18 @@ public class ArchRegistry { public Registrar ITEMS; public Registrar BLOCKS; + public Registrar> SCREEN_HANDLER_TYPE; + public Registrar> BLOCK_ENTITY_TYPE; + public Registrar> ENTITY_TYPE; public ArchRegistry(String MOD_ID) { REGISTRIES = Suppliers.memoize(() -> Registries.get(MOD_ID)); ITEMS = REGISTRIES.get().get(Registry.ITEM_KEY); BLOCKS = REGISTRIES.get().get(Registry.BLOCK_KEY); + SCREEN_HANDLER_TYPE = REGISTRIES.get().get(Registry.MENU_KEY); + BLOCK_ENTITY_TYPE = REGISTRIES.get().get(Registry.BLOCK_ENTITY_TYPE_KEY); + ENTITY_TYPE = REGISTRIES.get().get(Registry.ENTITY_TYPE_KEY); } @@ -37,4 +46,20 @@ public RegistrySupplier registerItem(Identifier id, Supplier supplie public RegistrySupplier registerBlock(Identifier id, Supplier supplier) { return BLOCKS.register(id, supplier); } + + public RegistrySupplier> registerScreenHandlerType(Identifier id, Supplier> supplier) { + return SCREEN_HANDLER_TYPE.register(id, supplier); + } + + public RegistrySupplier> registerMenu(Identifier id, Supplier> supplier) { + return registerScreenHandlerType(id, supplier); + } + + public RegistrySupplier> registerBlockEntityType(Identifier id, Supplier> supplier) { + return BLOCK_ENTITY_TYPE.register(id, supplier); + } + + public RegistrySupplier> registerEntity(Identifier id, Supplier> supplier) { + return ENTITY_TYPE.register(id, supplier); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java new file mode 100644 index 000000000..be9ddcc98 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.util.client; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.util.Identifier; + +public class ScreenUtil { + public static void setBackground(Identifier GUI, float f, float g, float h, float i) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(f, g, h, i); + RenderSystem.setShaderTexture(0, GUI); + + // GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); + // MinecraftClient.getInstance().getTextureManager().bindTexture(GUI); + } + + public static void setBackground(Identifier GUI) { + setBackground(GUI, 1.0F, 1.0F, 1.0F, 1.0F); + } +} From 6347a0ac12a3b45cc7ad429c4102e3773200338b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 00:10:15 +0900 Subject: [PATCH 002/617] Add API --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0277f9edc..c7721b668 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.0 +mod_version=1.0.1-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From ad88c414fd133ce618c202b45b1aa1c9ea968755 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 01:19:45 +0900 Subject: [PATCH 003/617] add badge add icon --- fabric/src/main/resources/fabric.mod.json | 1 + 1 file changed, 1 insertion(+) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index b6234c75d..b1968d7bf 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -14,6 +14,7 @@ }, "license": "MIT", "icon": "icon.png", + "badges": ["library"], "environment": "*", "entrypoints": { "main": [ From 06557b1e8d506edbcd4c4e09624e97cb77253a49 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 18:31:22 +0900 Subject: [PATCH 004/617] add API --- .../mcpitanlibarch/api/block/ExtendBlock.java | 24 +++++++++++++++++++ .../api/event/BlockScheduledTickEvent.java | 20 ++++++++++++++++ .../mcpitanlibarch/api/util/MathUtil.java | 14 +++++++++++ 3 files changed, 58 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockScheduledTickEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java new file mode 100644 index 000000000..affce1a2f --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -0,0 +1,24 @@ +package ml.pkom.mcpitanlibarch.api.block; + +import ml.pkom.mcpitanlibarch.api.event.BlockScheduledTickEvent; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; + +public class ExtendBlock extends Block { + public ExtendBlock(Settings settings) { + super(settings); + } + + public void scheduledTick(BlockScheduledTickEvent event) { + super.scheduledTick(event.state, event.world, event.pos, event.random); + } + + @Override + @Deprecated + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + scheduledTick(new BlockScheduledTickEvent(state, world, pos, random)); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockScheduledTickEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockScheduledTickEvent.java new file mode 100644 index 000000000..5289c9fa7 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockScheduledTickEvent.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import net.minecraft.block.BlockState; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; + +public class BlockScheduledTickEvent { + public BlockState state; + public ServerWorld world; + public BlockPos pos; + public Random random; + + public BlockScheduledTickEvent(BlockState state, ServerWorld world, BlockPos pos, Random random) { + this.state = state; + this.world = world; + this.pos = pos; + this.random = random; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java new file mode 100644 index 000000000..b9cbb40f6 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java @@ -0,0 +1,14 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.util.math.random.Random; + +public class MathUtil { + + public static Random createRandom(long seed) { + return Random.create(seed); + } + + public static Random createRandom() { + return Random.create(); + } +} From 2056e65e6267de19d430dd11779a44051d8d5256 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 23:11:04 +0900 Subject: [PATCH 005/617] add API --- .../mcpitanlibarch/api/block/ExtendBlock.java | 47 +++++++++++++++++++ .../api/event/BlockUseEvent.java | 27 +++++++++++ .../api/event/ScreenHandlerCreateEvent.java | 27 +++++++++++ 3 files changed, 101 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockUseEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ScreenHandlerCreateEvent.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index affce1a2f..0b082e2f5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -1,11 +1,25 @@ package ml.pkom.mcpitanlibarch.api.block; import ml.pkom.mcpitanlibarch.api.event.BlockScheduledTickEvent; +import ml.pkom.mcpitanlibarch.api.event.BlockUseEvent; +import ml.pkom.mcpitanlibarch.api.event.ScreenHandlerCreateEvent; +import ml.pkom.mcpitanlibarch.api.util.TextUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.random.Random; +import net.minecraft.world.World; + +import javax.annotation.Nullable; public class ExtendBlock extends Block { public ExtendBlock(Settings settings) { @@ -21,4 +35,37 @@ public void scheduledTick(BlockScheduledTickEvent event) { public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { scheduledTick(new BlockScheduledTickEvent(state, world, pos, random)); } + + @Override + @Deprecated + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + return onRightClick(new BlockUseEvent(state, world, pos, player, hand, hit)); + } + + /** + * block right click event + * @param event ActionResultType + * @return BlockUseEvent + */ + public ActionResult onRightClick(BlockUseEvent event) { + return super.onUse(event.state, event.world, event.pos, event.player.getPlayerEntity(), event.hand, event.hit); + } + + @Nullable + @Override + public NamedScreenHandlerFactory createScreenHandlerFactory(BlockState state, World world, BlockPos pos) { + return new SimpleNamedScreenHandlerFactory((syncId, inventory, player) -> + createScreenHandler(new ScreenHandlerCreateEvent(state, world, pos, syncId, inventory, player)), getScreenTitle() + ); + } + + @Nullable + public ScreenHandler createScreenHandler(ScreenHandlerCreateEvent event) { + return null; + } + + @Nullable + public Text getScreenTitle() { + return TextUtil.literal(""); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockUseEvent.java new file mode 100644 index 000000000..3e385ed97 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockUseEvent.java @@ -0,0 +1,27 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockUseEvent { + public BlockState state; + public World world; + public BlockPos pos; + public Player player; + public Hand hand; + public BlockHitResult hit; + + public BlockUseEvent(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + this.state = state; + this.world = world; + this.pos = pos; + this.player = new Player(player); + this.hand = hand; + this.hit = hit; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ScreenHandlerCreateEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ScreenHandlerCreateEvent.java new file mode 100644 index 000000000..571961e9c --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ScreenHandlerCreateEvent.java @@ -0,0 +1,27 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ScreenHandlerCreateEvent { + + public BlockState state; + public World world; + public BlockPos pos; + public int syncId; + public PlayerInventory inventory; + public Player player; + + public ScreenHandlerCreateEvent(BlockState state, World world, BlockPos pos, int syncId, PlayerInventory inventory, PlayerEntity player) { + this.state = state; + this.world = world; + this.pos = pos; + this.syncId = syncId; + this.inventory = inventory; + this.player = new Player(player); + } +} From 9333e51d7d2089763f2edcbe89a61d4bd6a94ac8 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 23:28:30 +0900 Subject: [PATCH 006/617] add API --- .../mcpitanlibarch/api/block/ExtendBlock.java | 6 +-- .../{ => block}/BlockScheduledTickEvent.java | 5 +- .../api/event/{ => block}/BlockUseEvent.java | 5 +- .../{ => block}/ScreenHandlerCreateEvent.java | 5 +- .../event/{ => block}/TileCreateEvent.java | 3 +- .../api/event/item/ItemUseEvent.java | 20 ++++++++ .../api/event/item/ItemUseOnBlockEvent.java | 41 ++++++++++++++++ .../mcpitanlibarch/api/item/ExtendItem.java | 49 +++++++++++++++++++ .../mixin/ItemUsageContextMixin.java | 12 +++++ .../mcpitanlibarch-common.mixins.json | 3 +- 10 files changed, 138 insertions(+), 11 deletions(-) rename common/src/main/java/ml/pkom/mcpitanlibarch/api/event/{ => block}/BlockScheduledTickEvent.java (76%) rename common/src/main/java/ml/pkom/mcpitanlibarch/api/event/{ => block}/BlockUseEvent.java (83%) rename common/src/main/java/ml/pkom/mcpitanlibarch/api/event/{ => block}/ScreenHandlerCreateEvent.java (83%) rename common/src/main/java/ml/pkom/mcpitanlibarch/api/event/{ => block}/TileCreateEvent.java (93%) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemUsageContextMixin.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index 0b082e2f5..36e8fe18b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -1,8 +1,8 @@ package ml.pkom.mcpitanlibarch.api.block; -import ml.pkom.mcpitanlibarch.api.event.BlockScheduledTickEvent; -import ml.pkom.mcpitanlibarch.api.event.BlockUseEvent; -import ml.pkom.mcpitanlibarch.api.event.ScreenHandlerCreateEvent; +import ml.pkom.mcpitanlibarch.api.event.block.BlockScheduledTickEvent; +import ml.pkom.mcpitanlibarch.api.event.block.BlockUseEvent; +import ml.pkom.mcpitanlibarch.api.event.block.ScreenHandlerCreateEvent; import ml.pkom.mcpitanlibarch.api.util.TextUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockState; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockScheduledTickEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java similarity index 76% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockScheduledTickEvent.java rename to common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java index 5289c9fa7..b2ae4cc63 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockScheduledTickEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java @@ -1,11 +1,12 @@ -package ml.pkom.mcpitanlibarch.api.event; +package ml.pkom.mcpitanlibarch.api.event.block; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.random.Random; -public class BlockScheduledTickEvent { +public class BlockScheduledTickEvent extends BaseEvent { public BlockState state; public ServerWorld world; public BlockPos pos; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java similarity index 83% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockUseEvent.java rename to common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java index 3e385ed97..71b78bc9c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BlockUseEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java @@ -1,6 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event; +package ml.pkom.mcpitanlibarch.api.event.block; import ml.pkom.mcpitanlibarch.api.entity.Player; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.Hand; @@ -8,7 +9,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class BlockUseEvent { +public class BlockUseEvent extends BaseEvent { public BlockState state; public World world; public BlockPos pos; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ScreenHandlerCreateEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/ScreenHandlerCreateEvent.java similarity index 83% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ScreenHandlerCreateEvent.java rename to common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/ScreenHandlerCreateEvent.java index 571961e9c..ec129d2a2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ScreenHandlerCreateEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/ScreenHandlerCreateEvent.java @@ -1,13 +1,14 @@ -package ml.pkom.mcpitanlibarch.api.event; +package ml.pkom.mcpitanlibarch.api.event.block; import ml.pkom.mcpitanlibarch.api.entity.Player; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class ScreenHandlerCreateEvent { +public class ScreenHandlerCreateEvent extends BaseEvent { public BlockState state; public World world; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/TileCreateEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/TileCreateEvent.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/TileCreateEvent.java rename to common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/TileCreateEvent.java index 56bc84c61..1e96b73e0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/TileCreateEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/TileCreateEvent.java @@ -1,5 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event; +package ml.pkom.mcpitanlibarch.api.event.block; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java new file mode 100644 index 000000000..b99647d33 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.event.item; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Hand; +import net.minecraft.world.World; + +public class ItemUseEvent extends BaseEvent { + + public World world; + public Player user; + public Hand hand; + + public ItemUseEvent(World world, PlayerEntity user, Hand hand) { + this.world = world; + this.user = new Player(user); + this.hand = hand; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java new file mode 100644 index 000000000..590a61877 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java @@ -0,0 +1,41 @@ +package ml.pkom.mcpitanlibarch.api.event.item; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class ItemUseOnBlockEvent extends BaseEvent { + public Player player; + public Hand hand; + public BlockHitResult hit; + public ItemStack stack; + public World world; + + public ItemUseOnBlockEvent(PlayerEntity player, Hand hand, BlockHitResult hit) { + this(player.world, player, hand, player.getStackInHand(hand), hit); + } + + public ItemUseOnBlockEvent(World world, @Nullable PlayerEntity player, Hand hand, ItemStack stack, BlockHitResult hit) { + if (player != null) + this.player = new Player(player); + this.hand = hand; + this.hit = hit; + this.stack = stack; + this.world = world; + } + + public ItemUsageContext toIUC() { + return new ItemUsageContext(player.getPlayerEntity(), hand, hit); + } + + public boolean isClient() { + return world.isClient(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java new file mode 100644 index 000000000..a0fe64754 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java @@ -0,0 +1,49 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import ml.pkom.mcpitanlibarch.api.event.item.ItemUseEvent; +import ml.pkom.mcpitanlibarch.api.event.item.ItemUseOnBlockEvent; +import ml.pkom.mcpitanlibarch.mixin.ItemUsageContextMixin; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class ExtendItem extends Item { + public ExtendItem(Settings settings) { + super(settings); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + return onRightClick(new ItemUseEvent(world, user, hand)); + } + + @Override + public ActionResult useOnBlock(ItemUsageContext context) { + ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; + return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())); + } + + /** + * item right click event + * + * @param event ItemUseEvent + * @return ActionResultType + */ + public TypedActionResult onRightClick(ItemUseEvent event) { + return super.use(event.world, event.user.getPlayerEntity(), event.hand); + } + + /** + * item right click event on block + * @param event ItemUseOnBlockEvent + * @return ActionResultType + */ + public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { + return super.useOnBlock(event.toIUC()); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemUsageContextMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemUsageContextMixin.java new file mode 100644 index 000000000..118f8be36 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemUsageContextMixin.java @@ -0,0 +1,12 @@ +package ml.pkom.mcpitanlibarch.mixin; + +import net.minecraft.item.ItemUsageContext; +import net.minecraft.util.hit.BlockHitResult; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ItemUsageContext.class) +public interface ItemUsageContextMixin { + @Accessor + public BlockHitResult getHit(); +} \ No newline at end of file diff --git a/common/src/main/resources/mcpitanlibarch-common.mixins.json b/common/src/main/resources/mcpitanlibarch-common.mixins.json index 72d6fe3ab..f9672133e 100644 --- a/common/src/main/resources/mcpitanlibarch-common.mixins.json +++ b/common/src/main/resources/mcpitanlibarch-common.mixins.json @@ -1,9 +1,10 @@ { "required": true, "minVersion": "0.8", - "package": "ml.pkom.mcpitanlibarch.mixin.forge", + "package": "ml.pkom.mcpitanlibarch.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ + "ItemUsageContextMixin" ], "client": [ ], From 1552fad821f651ec163ef78a371256ba43529e96 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 23:31:53 +0900 Subject: [PATCH 007/617] mod info --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c7721b668..2c2aa2a19 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.1-1.18 +mod_version=1.0.2-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From b588c5cc5774a9e1b1737485c354f59c00d15929 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 23:33:48 +0900 Subject: [PATCH 008/617] 1.18.2 --- .../java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java | 2 +- .../api/event/block/BlockScheduledTickEvent.java | 3 ++- .../main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index 36e8fe18b..ad9ed8822 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -16,10 +16,10 @@ import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.random.Random; import net.minecraft.world.World; import javax.annotation.Nullable; +import java.util.Random; public class ExtendBlock extends Block { public ExtendBlock(Settings settings) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java index b2ae4cc63..183e8a7f4 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java @@ -4,7 +4,8 @@ import net.minecraft.block.BlockState; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.random.Random; + +import java.util.Random; public class BlockScheduledTickEvent extends BaseEvent { public BlockState state; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java index b9cbb40f6..4a20a944c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java @@ -1,14 +1,14 @@ package ml.pkom.mcpitanlibarch.api.util; -import net.minecraft.util.math.random.Random; +import java.util.Random; public class MathUtil { public static Random createRandom(long seed) { - return Random.create(seed); + return new Random(seed); } public static Random createRandom() { - return Random.create(); + return new Random(); } } From 9d32cad9dcc07cae6c39136ef9284be7a4ef475e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 28 Sep 2022 23:40:59 +0900 Subject: [PATCH 009/617] info --- fabric/src/main/resources/fabric.mod.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index b1968d7bf..fa7e7e6ee 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -14,7 +14,11 @@ }, "license": "MIT", "icon": "icon.png", - "badges": ["library"], + "custom": { + "modmenu": { + "badges": ["library"] + } + }, "environment": "*", "entrypoints": { "main": [ From e74ade57717c0997e0e7370c5af3e0bace288ca0 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 29 Sep 2022 23:14:24 +0900 Subject: [PATCH 010/617] add API --- .../java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index 85b43c07c..5d735decf 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -22,4 +22,12 @@ public static AbstractBlock.Settings breakByTool(AbstractBlock.Settings settings return settings; } + + public static AbstractBlock.Settings dropsNothing(AbstractBlock.Settings settings) { + return settings.dropsNothing(); + } + + public static AbstractBlock.Settings requiresTool(AbstractBlock.Settings settings) { + return settings.requiresTool(); + } } From 611d95812e30a91e165e33f0e6f1f3cc5750ad41 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 29 Sep 2022 23:35:44 +0900 Subject: [PATCH 011/617] info --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2c2aa2a19..367f912af 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.2-1.18 +mod_version=1.0.3-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 19704d048b39270fe7311f6011c251ec67f35308 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 30 Sep 2022 17:16:34 +0900 Subject: [PATCH 012/617] mixin compatibilityLevel JAVA_8 --- common/src/main/resources/mcpitanlibarch-common.mixins.json | 2 +- fabric/src/main/resources/mcpitanlibarch.mixins.json | 2 +- forge/src/main/resources/mcpitanlibarch.mixins.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/resources/mcpitanlibarch-common.mixins.json b/common/src/main/resources/mcpitanlibarch-common.mixins.json index f9672133e..cad714586 100644 --- a/common/src/main/resources/mcpitanlibarch-common.mixins.json +++ b/common/src/main/resources/mcpitanlibarch-common.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "ml.pkom.mcpitanlibarch.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_8", "mixins": [ "ItemUsageContextMixin" ], diff --git a/fabric/src/main/resources/mcpitanlibarch.mixins.json b/fabric/src/main/resources/mcpitanlibarch.mixins.json index 4be53d8ed..5ff32912f 100644 --- a/fabric/src/main/resources/mcpitanlibarch.mixins.json +++ b/fabric/src/main/resources/mcpitanlibarch.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "ml.pkom.mcpitanlibarch.mixin.fabric", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_8", "mixins": [ ], "client": [ diff --git a/forge/src/main/resources/mcpitanlibarch.mixins.json b/forge/src/main/resources/mcpitanlibarch.mixins.json index 72d6fe3ab..e3ae4ab50 100644 --- a/forge/src/main/resources/mcpitanlibarch.mixins.json +++ b/forge/src/main/resources/mcpitanlibarch.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "ml.pkom.mcpitanlibarch.mixin.forge", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_8", "mixins": [ ], "client": [ From 1fc45135584ab2ccaea670bfad21f6e2a2a04018 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 30 Sep 2022 17:16:47 +0900 Subject: [PATCH 013/617] modinfo --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 367f912af..fb7127c16 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.3-1.18 +mod_version=1.0.4-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 573d70c91a9b8ce7861f86481f1bc1c4c9c8f9ba Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 30 Sep 2022 22:47:11 +0900 Subject: [PATCH 014/617] Add API --- .../api/event/registry/RegistryEvent.java | 23 +++++++++++ .../api/registry/ArchRegistry.java | 39 ++++++++++++------- 2 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java new file mode 100644 index 000000000..2a6c3628b --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java @@ -0,0 +1,23 @@ +package ml.pkom.mcpitanlibarch.api.event.registry; + +import dev.architectury.registry.registries.RegistrySupplier; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; + +import javax.annotation.Nullable; + +public class RegistryEvent extends BaseEvent { + public RegistrySupplier supplier; + + public RegistryEvent(RegistrySupplier supplier) { + this.supplier = supplier; + } + + public T get() { + return supplier.get(); + } + + @Nullable + public T getOrNull() { + return supplier.getOrNull(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 483a5e571..3091ef6ca 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -3,12 +3,14 @@ import com.google.common.base.Suppliers; import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.Registries; -import dev.architectury.registry.registries.RegistrySupplier; +import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.EntityType; +import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -23,6 +25,8 @@ public class ArchRegistry { public Registrar> SCREEN_HANDLER_TYPE; public Registrar> BLOCK_ENTITY_TYPE; public Registrar> ENTITY_TYPE; + public Registrar SOUND_EVENT; + public Registrar FLUID; public ArchRegistry(String MOD_ID) { REGISTRIES = Suppliers.memoize(() -> Registries.get(MOD_ID)); @@ -32,34 +36,43 @@ public ArchRegistry(String MOD_ID) { SCREEN_HANDLER_TYPE = REGISTRIES.get().get(Registry.MENU_KEY); BLOCK_ENTITY_TYPE = REGISTRIES.get().get(Registry.BLOCK_ENTITY_TYPE_KEY); ENTITY_TYPE = REGISTRIES.get().get(Registry.ENTITY_TYPE_KEY); - + SOUND_EVENT = REGISTRIES.get().get(Registry.SOUND_EVENT_KEY); + FLUID = REGISTRIES.get().get(Registry.FLUID_KEY); } public static ArchRegistry createRegistry(String MOD_ID) { return new ArchRegistry(MOD_ID); } - public RegistrySupplier registerItem(Identifier id, Supplier supplier) { - return ITEMS.register(id, supplier); + public RegistryEvent registerItem(Identifier id, Supplier supplier) { + return new RegistryEvent<>(ITEMS.register(id, supplier)); } - public RegistrySupplier registerBlock(Identifier id, Supplier supplier) { - return BLOCKS.register(id, supplier); + public RegistryEvent registerBlock(Identifier id, Supplier supplier) { + return new RegistryEvent<>(BLOCKS.register(id, supplier)); } - public RegistrySupplier> registerScreenHandlerType(Identifier id, Supplier> supplier) { - return SCREEN_HANDLER_TYPE.register(id, supplier); + public RegistryEvent> registerScreenHandlerType(Identifier id, Supplier> supplier) { + return new RegistryEvent<>(SCREEN_HANDLER_TYPE.register(id, supplier)); } - public RegistrySupplier> registerMenu(Identifier id, Supplier> supplier) { + public RegistryEvent> registerMenu(Identifier id, Supplier> supplier) { return registerScreenHandlerType(id, supplier); } - public RegistrySupplier> registerBlockEntityType(Identifier id, Supplier> supplier) { - return BLOCK_ENTITY_TYPE.register(id, supplier); + public RegistryEvent> registerBlockEntityType(Identifier id, Supplier> supplier) { + return new RegistryEvent<>(BLOCK_ENTITY_TYPE.register(id, supplier)); + } + + public RegistryEvent> registerEntity(Identifier id, Supplier> supplier) { + return new RegistryEvent<>(ENTITY_TYPE.register(id, supplier)); + } + + public RegistryEvent registerSoundEvent(Identifier id, Supplier supplier) { + return new RegistryEvent<>(SOUND_EVENT.register(id, supplier)); } - public RegistrySupplier> registerEntity(Identifier id, Supplier> supplier) { - return ENTITY_TYPE.register(id, supplier); + public RegistryEvent registerFluid(Identifier id, Supplier supplier) { + return new RegistryEvent<>(FLUID.register(id, supplier)); } } From a99be537abecff94d4c31f49d98a0391ace8bfc0 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 30 Sep 2022 22:50:32 +0900 Subject: [PATCH 015/617] version info --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index fb7127c16..cde76ef93 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.4-1.18 +mod_version=1.0.5-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 08aff7fa0437d8feeebfb0a4ce328c9dfb8a8b66 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Oct 2022 11:31:05 +0900 Subject: [PATCH 016/617] Add API Add Example --- .../pkom/mcpitanlibarch/MCPitanLibarch.java | 7 ++- .../mcpitanlibarch/api/util/PlatformUtil.java | 54 +++++++++++++++++++ .../pkom/mcpitanlibarch/test/ExampleMod.java | 37 +++++++++++++ 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java index 4ba33fd9f..2c1120b00 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java @@ -1,9 +1,14 @@ package ml.pkom.mcpitanlibarch; +import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; +import ml.pkom.mcpitanlibarch.test.ExampleMod; + public class MCPitanLibarch { public static final String MOD_ID = "mcpitanlibarch"; public static void init() { - + if (PlatformUtil.isDevelopmentEnvironment()) { + ExampleMod.init(); + } } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java new file mode 100644 index 000000000..913301aa1 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java @@ -0,0 +1,54 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import me.shedaniel.architectury.platform.Platform; +import me.shedaniel.architectury.utils.Env; +import net.fabricmc.api.EnvType; + +import java.nio.file.Path; +import java.util.Collection; + +public class PlatformUtil { + public static boolean isDevelopmentEnvironment() { + return Platform.isDevelopmentEnvironment(); + } + + public static boolean isFabric() { + return Platform.isFabric(); + } + + public static boolean isForge() { + return Platform.isForge(); + } + + public static boolean isModLoaded(String id) { + return Platform.isModLoaded(id); + } + + public static boolean isClient() { + return Platform.getEnvironment() == Env.CLIENT; + } + + public static boolean isServer() { + return Platform.getEnvironment() == Env.SERVER; + } + + public static Path getConfigFolder() { + return Platform.getConfigFolder(); + } + + public static Path getGameFolder() { + return Platform.getGameFolder(); + } + + public static Path getModsFolder() { + return Platform.getModsFolder(); + } + + public static Collection getModIds() { + return Platform.getModIds(); + } + + public static EnvType getEnv() { + return Platform.getEnv(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java new file mode 100644 index 000000000..588b13a35 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java @@ -0,0 +1,37 @@ +package ml.pkom.mcpitanlibarch.test; + +import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; +import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.Material; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.util.Identifier; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ExampleMod { + public static final String MOD_ID = "examplemod"; + public static final String MOD_NAME = "ExampleMod"; + + public static Logger LOGGER = LogManager.getLogger(); + public static void log(Level level, String message){ + LOGGER.log(level, "[" + MOD_NAME + "] " + message); + } + + public static Identifier id(String id) { + return new Identifier(MOD_ID, id); + } + + public static ArchRegistry registry = ArchRegistry.createRegistry(MOD_ID); + + public static void init() { + registry.registerItem(id("example_item"), () -> new Item(new Item.Settings().group(ItemGroup.MISC))); + RegistryEvent EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new Block(AbstractBlock.Settings.of(Material.STONE))); + registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); + registry.allRegister(); + } +} From 79d76f34bee654ceb28b6d0a365590ae095b9706 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Oct 2022 11:40:17 +0900 Subject: [PATCH 017/617] Add API --- .../ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java | 4 ++++ .../java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 3091ef6ca..3b198d5cd 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -75,4 +75,8 @@ public RegistryEvent registerSoundEvent(Identifier id, Supplier registerFluid(Identifier id, Supplier supplier) { return new RegistryEvent<>(FLUID.register(id, supplier)); } + + public void allRegister() { + // 1.16 Register + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java index 913301aa1..14bf63556 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java @@ -1,7 +1,7 @@ package ml.pkom.mcpitanlibarch.api.util; -import me.shedaniel.architectury.platform.Platform; -import me.shedaniel.architectury.utils.Env; +import dev.architectury.platform.Platform; +import dev.architectury.utils.Env; import net.fabricmc.api.EnvType; import java.nio.file.Path; From 9cc97f30dbadade84a7d44b1419dfa00556fb379 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Oct 2022 13:18:29 +0900 Subject: [PATCH 018/617] Add API --- .../api/client/SimpleHandledScreen.java | 24 +++++++++++++++++++ .../mcpitanlibarch/api/entity/Player.java | 8 +++++++ .../api/util/client/ScreenUtil.java | 3 +++ .../forge/MCPitanLibarchForge.java | 5 ++++ 4 files changed, 40 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java new file mode 100644 index 000000000..bd02fde81 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -0,0 +1,24 @@ +package ml.pkom.mcpitanlibarch.api.client; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.Drawable; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.Selectable; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; + +@Environment(EnvType.CLIENT) +public abstract class SimpleHandledScreen extends HandledScreen { + public SimpleHandledScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + @Override + protected T addDrawableChild(T drawableElement) { + return super.addDrawableChild(drawableElement); + // addButton + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index 17b5f8a3f..e6e199ed6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -104,6 +104,10 @@ public void insertStack(int slot, ItemStack stack) { getInv().insertStack(slot, stack); } + public void offerOrDrop(ItemStack itemStack) { + getInv().offerOrDrop(itemStack); + } + public void giveStack(ItemStack stack) { getEntity().giveItemStack(stack); } @@ -138,4 +142,8 @@ public ScreenHandler getCurrentScreenHandler() { public boolean isSneaking() { return getEntity().isSneaking(); } + + public ItemStack getCursorStack() { + return getCurrentScreenHandler().getCursorStack(); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index be9ddcc98..ef22862d1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -1,9 +1,12 @@ package ml.pkom.mcpitanlibarch.api.util.client; import com.mojang.blaze3d.systems.RenderSystem; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.render.GameRenderer; import net.minecraft.util.Identifier; +@Environment(EnvType.CLIENT) public class ScreenUtil { public static void setBackground(Identifier GUI, float f, float g, float h, float i) { RenderSystem.setShader(GameRenderer::getPositionTexShader); diff --git a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java index 0e5012e9a..a88692ebc 100644 --- a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java +++ b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java @@ -2,6 +2,8 @@ import dev.architectury.platform.forge.EventBuses; import ml.pkom.mcpitanlibarch.MCPitanLibarch; +import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; +import ml.pkom.mcpitanlibarch.test.ExampleMod; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @@ -10,6 +12,9 @@ public class MCPitanLibarchForge { public MCPitanLibarchForge() { // Submit our event bus to let architectury register our content on the right time EventBuses.registerModEventBus(MCPitanLibarch.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); + if (PlatformUtil.isDevelopmentEnvironment()) { + EventBuses.registerModEventBus(ExampleMod.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); + } MCPitanLibarch.init(); } } \ No newline at end of file From 1987c12d418b5a4914844dc157594c2d9da4369f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Oct 2022 13:20:48 +0900 Subject: [PATCH 019/617] version info --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index cde76ef93..1c9ce8c9d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.5-1.18 +mod_version=1.0.6-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 048b7b3c7d250348d6ad4453a7baccfdf679f59f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Oct 2022 14:11:07 +0900 Subject: [PATCH 020/617] compatibility --- .../ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index bd02fde81..4793a4520 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -16,8 +16,7 @@ public SimpleHandledScreen(ScreenHandler handler, PlayerInventory inventory, Tex super(handler, inventory, title); } - @Override - protected T addDrawableChild(T drawableElement) { + protected T addDrawableChild_compatibility(T drawableElement) { return super.addDrawableChild(drawableElement); // addButton } From dd23d664cdfe673beb68a32daaeebe4243c54db8 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Oct 2022 15:38:54 +0900 Subject: [PATCH 021/617] Add API --- .../mcpitanlibarch/api/util/ScreenHandlerUtil.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java new file mode 100644 index 000000000..145931558 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java @@ -0,0 +1,11 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; +import net.minecraft.util.collection.DefaultedList; + +public class ScreenHandlerUtil { + public static DefaultedList getSlots(ScreenHandler screenHandler) { + return screenHandler.slots; + } +} From 3de58c89e4c5fde675ca5b5fc3878856e8563c9b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Oct 2022 15:40:20 +0900 Subject: [PATCH 022/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1c9ce8c9d..bd391833f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.6-1.18 +mod_version=1.0.7-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 871f1197666e680942b25a441e925f19f9399ef7 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 4 Oct 2022 00:34:12 +0900 Subject: [PATCH 023/617] Add API --- .../pkom/mcpitanlibarch/api/tag/TagKey.java | 41 +++++++++++++++++++ .../mcpitanlibarch/api/util/ItemUtil.java | 18 ++++++++ 2 files changed, 59 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java new file mode 100644 index 000000000..e736ab96a --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java @@ -0,0 +1,41 @@ +package ml.pkom.mcpitanlibarch.api.tag; + +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryEntry; + +public class TagKey { + private final net.minecraft.tag.TagKey tagKey; + + @Deprecated + public TagKey(net.minecraft.tag.TagKey tagKey) { + this.tagKey = tagKey; + } + + public static TagKey create(Type type, Identifier identifier) { + switch (type) { + case BLOCK: + new TagKey<>(net.minecraft.tag.TagKey.of(Registry.BLOCK_KEY, identifier)); + case ITEM: + new TagKey<>(net.minecraft.tag.TagKey.of(Registry.ITEM_KEY, identifier)); + case FLUID: + new TagKey<>(net.minecraft.tag.TagKey.of(Registry.FLUID_KEY, identifier)); + } + return null; + } + + @Deprecated + public net.minecraft.tag.TagKey getTagKey() { + return tagKey; + } + + public enum Type { + BLOCK, + ITEM, + FLUID, + } + + public boolean isOf(T value) { + return RegistryEntry.of(value).isIn(tagKey); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index 44bea4a44..9947e7529 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -1,6 +1,8 @@ package ml.pkom.mcpitanlibarch.api.util; +import ml.pkom.mcpitanlibarch.api.tag.TagKey; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -8,4 +10,20 @@ public class ItemUtil { public static Item item(Identifier id) { return Registry.ITEM.get(id); } + + public static boolean isEqual(Item item, Item item2) { + return item == item2; + } + + public static boolean isOf(ItemStack stack, Item item) { + return stack.isOf(item); + } + + public static boolean isIn(ItemStack stack, TagKey tagKey) { + return isIn(stack.getItem(), tagKey); + } + + public static boolean isIn(Item item, TagKey tagKey) { + return tagKey.isOf(item); + } } From 33ff210c79b59e3ace859c989e70821c7fe08867 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 4 Oct 2022 00:34:25 +0900 Subject: [PATCH 024/617] Add API --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index bd391833f..4cab96902 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.7-1.18 +mod_version=1.0.8-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 00855b241bc2b0277983dfaaa2791413c3f5257c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 4 Oct 2022 17:54:58 +0900 Subject: [PATCH 025/617] fix --- .../ml/pkom/mcpitanlibarch/api/tag/TagKey.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java index e736ab96a..6503747ee 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java @@ -13,15 +13,12 @@ public TagKey(net.minecraft.tag.TagKey tagKey) { } public static TagKey create(Type type, Identifier identifier) { - switch (type) { - case BLOCK: - new TagKey<>(net.minecraft.tag.TagKey.of(Registry.BLOCK_KEY, identifier)); - case ITEM: - new TagKey<>(net.minecraft.tag.TagKey.of(Registry.ITEM_KEY, identifier)); - case FLUID: - new TagKey<>(net.minecraft.tag.TagKey.of(Registry.FLUID_KEY, identifier)); - } - return null; + return switch (type) { + case BLOCK -> new TagKey<>(net.minecraft.tag.TagKey.of(Registry.BLOCK_KEY, identifier)); + case ITEM -> new TagKey<>(net.minecraft.tag.TagKey.of(Registry.ITEM_KEY, identifier)); + case FLUID -> new TagKey<>(net.minecraft.tag.TagKey.of(Registry.FLUID_KEY, identifier)); + case ENTITY_TYPE -> new TagKey<>(net.minecraft.tag.TagKey.of(Registry.ENTITY_TYPE_KEY, identifier)); + }; } @Deprecated @@ -33,6 +30,7 @@ public enum Type { BLOCK, ITEM, FLUID, + ENTITY_TYPE; } public boolean isOf(T value) { From a9ae0a8e658d5679532a1329f4288f14e7864383 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 30 Oct 2022 10:36:54 +0900 Subject: [PATCH 026/617] 1.0.9 --- .../mcpitanlibarch/api/util/BlockUtil.java | 4 + .../mcpitanlibarch/api/util/ItemUtil.java | 5 + curse_forge_game_version_types.json | 122 + curse_forge_game_versions.json | 26642 ++++++++++++++++ fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- upload_curseforge.bat | 2 + upload_curseforge.php | 145 + upload_maven.bat | 2 + upload_maven.php | 60 + 10 files changed, 26984 insertions(+), 2 deletions(-) create mode 100644 curse_forge_game_version_types.json create mode 100644 curse_forge_game_versions.json create mode 100644 upload_curseforge.bat create mode 100644 upload_curseforge.php create mode 100644 upload_maven.bat create mode 100644 upload_maven.php diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index 5d735decf..62ab65435 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -30,4 +30,8 @@ public static AbstractBlock.Settings dropsNothing(AbstractBlock.Settings setting public static AbstractBlock.Settings requiresTool(AbstractBlock.Settings settings) { return settings.requiresTool(); } + + public static boolean isExist(Identifier identifier) { + return Registry.BLOCK.containsId(identifier); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index 9947e7529..f64ec7b7c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -26,4 +26,9 @@ public static boolean isIn(ItemStack stack, TagKey tagKey) { public static boolean isIn(Item item, TagKey tagKey) { return tagKey.isOf(item); } + + public static boolean isExist(Identifier identifier) { + return Registry.ITEM.containsId(identifier); + } + } diff --git a/curse_forge_game_version_types.json b/curse_forge_game_version_types.json new file mode 100644 index 000000000..987a333b1 --- /dev/null +++ b/curse_forge_game_version_types.json @@ -0,0 +1,122 @@ +[ + { + "id": 2, + "name": "Java", + "slug": "java" + }, + { + "id": 4, + "name": "Minecraft 1.8", + "slug": "minecraft-1-8" + }, + { + "id": 5, + "name": "Minecraft 1.7", + "slug": "minecraft-1-7" + }, + { + "id": 6, + "name": "Minecraft 1.6", + "slug": "minecraft-1-6" + }, + { + "id": 11, + "name": "Minecraft 1.5", + "slug": "minecraft-1-5" + }, + { + "id": 12, + "name": "Minecraft 1.4", + "slug": "minecraft-1-4" + }, + { + "id": 13, + "name": "Minecraft 1.3", + "slug": "minecraft-1-3" + }, + { + "id": 14, + "name": "Minecraft 1.2", + "slug": "minecraft-1-2" + }, + { + "id": 15, + "name": "Minecraft 1.1", + "slug": "minecraft-1-1" + }, + { + "id": 16, + "name": "Minecraft 1.0", + "slug": "minecraft-1-0" + }, + { + "id": 17, + "name": "Minecraft Beta", + "slug": "minecraft-beta" + }, + { + "id": 552, + "name": "Minecraft 1.9", + "slug": "minecraft-1-9" + }, + { + "id": 572, + "name": "Minecraft 1.10", + "slug": "minecraft-1-10" + }, + { + "id": 599, + "name": "Minecraft 1.11", + "slug": "minecraft-1-11" + }, + { + "id": 615, + "name": "Addons", + "slug": "addons" + }, + { + "id": 628, + "name": "Minecraft 1.12", + "slug": "minecraft-1-12" + }, + { + "id": 55023, + "name": "Minecraft 1.13", + "slug": "minecraft-1-13" + }, + { + "id": 64806, + "name": "Minecraft 1.14", + "slug": "minecraft-1-14" + }, + { + "id": 68441, + "name": "Modloader", + "slug": "modloader" + }, + { + "id": 68722, + "name": "Minecraft 1.15", + "slug": "minecraft-1-15" + }, + { + "id": 70886, + "name": "Minecraft 1.16", + "slug": "minecraft-1-16" + }, + { + "id": 73242, + "name": "Minecraft 1.17", + "slug": "minecraft-1-17" + }, + { + "id": 73250, + "name": "Minecraft 1.18", + "slug": "minecraft-1-18" + }, + { + "id": 73407, + "name": "Minecraft 1.19", + "slug": "minecraft-1-19" + } +] \ No newline at end of file diff --git a/curse_forge_game_versions.json b/curse_forge_game_versions.json new file mode 100644 index 000000000..e97e548c2 --- /dev/null +++ b/curse_forge_game_versions.json @@ -0,0 +1,26642 @@ +[ + { + "id": 156, + "gameVersionTypeID": 17, + "name": "Beta 1.7.3", + "slug": "beta-1-7-3" + }, + { + "id": 157, + "gameVersionTypeID": 17, + "name": "Beta 1.7", + "slug": "beta-1-7" + }, + { + "id": 158, + "gameVersionTypeID": 17, + "name": "Beta 1.6.6", + "slug": "beta-1-6-6" + }, + { + "id": 159, + "gameVersionTypeID": 1, + "name": "CB 1060 ", + "slug": "cb-1060" + }, + { + "id": 160, + "gameVersionTypeID": 1, + "name": "CB 1000", + "slug": "cb-1000" + }, + { + "id": 161, + "gameVersionTypeID": 1, + "name": "CB 953", + "slug": "cb-953" + }, + { + "id": 162, + "gameVersionTypeID": 1, + "name": "CB 935", + "slug": "cb-935" + }, + { + "id": 164, + "gameVersionTypeID": 1, + "name": "CB 1185", + "slug": "cb-1185" + }, + { + "id": 165, + "gameVersionTypeID": 17, + "name": "Beta 1.8.1", + "slug": "beta-1-8-1" + }, + { + "id": 175, + "gameVersionTypeID": 1, + "name": "CB 1240", + "slug": "cb-1240" + }, + { + "id": 176, + "gameVersionTypeID": 1, + "name": "CB 1317", + "slug": "cb-1317" + }, + { + "id": 177, + "gameVersionTypeID": 1, + "name": "CB 1337", + "slug": "cb-1337" + }, + { + "id": 179, + "gameVersionTypeID": 1, + "name": "CB 1.0.1-R1", + "slug": "cb-1-0-1-r1" + }, + { + "id": 180, + "gameVersionTypeID": 16, + "name": "1.0.0", + "slug": "1-0-0" + }, + { + "id": 186, + "gameVersionTypeID": 15, + "name": "1.1", + "slug": "1-1" + }, + { + "id": 187, + "gameVersionTypeID": 1, + "name": "CB 1.1-R1", + "slug": "cb-1-1-r1" + }, + { + "id": 188, + "gameVersionTypeID": 1, + "name": "CB 1.1-R2", + "slug": "cb-1-1-r2" + }, + { + "id": 189, + "gameVersionTypeID": 1, + "name": "CB 1.1-R3", + "slug": "cb-1-1-r3" + }, + { + "id": 190, + "gameVersionTypeID": 1, + "name": "CB 1.1-R4", + "slug": "cb-1-1-r4" + }, + { + "id": 193, + "gameVersionTypeID": 1, + "name": "CB 1.1-R6", + "slug": "cb-1-1-r6" + }, + { + "id": 194, + "gameVersionTypeID": 1, + "name": "CB 1.2.3-R0.1", + "slug": "cb-1-2-3-r0-1" + }, + { + "id": 195, + "gameVersionTypeID": 1, + "name": "CB 1.1-R7", + "slug": "cb-1-1-r7" + }, + { + "id": 196, + "gameVersionTypeID": 1, + "name": "CB 1.1-R8", + "slug": "cb-1-1-r8" + }, + { + "id": 197, + "gameVersionTypeID": 1, + "name": "CB 1.2.3-R0.2", + "slug": "cb-1-2-3-r0-2" + }, + { + "id": 198, + "gameVersionTypeID": 1, + "name": "CB 1.2.4-R1.0", + "slug": "cb-1-2-4-r1-0" + }, + { + "id": 200, + "gameVersionTypeID": 1, + "name": "CB 1.2.5-R1.0", + "slug": "cb-1-2-5-r1-0" + }, + { + "id": 201, + "gameVersionTypeID": 14, + "name": "1.2.1", + "slug": "1-2-1" + }, + { + "id": 202, + "gameVersionTypeID": 14, + "name": "1.2.2", + "slug": "1-2-2" + }, + { + "id": 203, + "gameVersionTypeID": 14, + "name": "1.2.3", + "slug": "1-2-3" + }, + { + "id": 204, + "gameVersionTypeID": 14, + "name": "1.2.5", + "slug": "1-2-5" + }, + { + "id": 207, + "gameVersionTypeID": 1, + "name": "CB 1.2.5-R1.2", + "slug": "cb-1-2-5-r1-2" + }, + { + "id": 208, + "gameVersionTypeID": 1, + "name": "CB 1.2.5-R2.0", + "slug": "cb-1-2-5-r2-0" + }, + { + "id": 209, + "gameVersionTypeID": 1, + "name": "CB 1.2.5-R3.0", + "slug": "cb-1-2-5-r3-0" + }, + { + "id": 235, + "gameVersionTypeID": 1, + "name": "CB 1.2.5-R4.0", + "slug": "cb-1-2-5-r4-0" + }, + { + "id": 239, + "gameVersionTypeID": 1, + "name": "CB 1.2.5-R5.0", + "slug": "cb-1-2-5-r5-0" + }, + { + "id": 241, + "gameVersionTypeID": 13, + "name": "1.3.1", + "slug": "1-3-1" + }, + { + "id": 244, + "gameVersionTypeID": 1, + "name": "CB 1.3.1-R1.0", + "slug": "cb-1-3-1-r1-0" + }, + { + "id": 245, + "gameVersionTypeID": 1, + "name": "CB 1.3.1-R2.0", + "slug": "cb-1-3-1-r2-0" + }, + { + "id": 246, + "gameVersionTypeID": 13, + "name": "1.3.2", + "slug": "1-3-2" + }, + { + "id": 247, + "gameVersionTypeID": 1, + "name": "CB 1.3.2-R0.1", + "slug": "cb-1-3-2-r0-1" + }, + { + "id": 250, + "gameVersionTypeID": 1, + "name": "CB 1.3.2-R0.2", + "slug": "cb-1-3-2-r0-2" + }, + { + "id": 251, + "gameVersionTypeID": 1, + "name": "CB 1.3.2-R1.0", + "slug": "cb-1-3-2-r1-0" + }, + { + "id": 252, + "gameVersionTypeID": 1, + "name": "CB 1.3.2-R2.0", + "slug": "cb-1-3-2-r2-0" + }, + { + "id": 254, + "gameVersionTypeID": 1, + "name": "CB 1.3.2-R3.0", + "slug": "cb-1-3-2-r3-0" + }, + { + "id": 255, + "gameVersionTypeID": 12, + "name": "1.4.2", + "slug": "1-4-2" + }, + { + "id": 256, + "gameVersionTypeID": 1, + "name": "CB 1.4.2-R0.1", + "slug": "cb-1-4-2-r0-1" + }, + { + "id": 257, + "gameVersionTypeID": 1, + "name": "CB 1.4.2-R0.2", + "slug": "cb-1-4-2-r0-2" + }, + { + "id": 261, + "gameVersionTypeID": 1, + "name": "CB 1.4.5-R0.1", + "slug": "cb-1-4-5-r0-1" + }, + { + "id": 262, + "gameVersionTypeID": 1, + "name": "CB 1.4.5-R0.2", + "slug": "cb-1-4-5-r0-2" + }, + { + "id": 266, + "gameVersionTypeID": 1, + "name": "CB 1.4.5-R1.0", + "slug": "cb-1-4-5-r1-0" + }, + { + "id": 268, + "gameVersionTypeID": 12, + "name": "1.4.6", + "slug": "1-4-6" + }, + { + "id": 269, + "gameVersionTypeID": 1, + "name": "CB 1.4.6-R0.1", + "slug": "cb-1-4-6-r0-1" + }, + { + "id": 270, + "gameVersionTypeID": 1, + "name": "CB 1.4.6-R0.2", + "slug": "cb-1-4-6-r0-2" + }, + { + "id": 271, + "gameVersionTypeID": 1, + "name": "CB 1.4.6-R0.3", + "slug": "cb-1-4-6-r0-3" + }, + { + "id": 272, + "gameVersionTypeID": 12, + "name": "1.4.7", + "slug": "1-4-7" + }, + { + "id": 275, + "gameVersionTypeID": 1, + "name": "CB 1.4.7-R0.1", + "slug": "cb-1-4-7-r0-1" + }, + { + "id": 276, + "gameVersionTypeID": 1, + "name": "CB 1.4.7-R1.0", + "slug": "cb-1-4-7-r1-0" + }, + { + "id": 279, + "gameVersionTypeID": 11, + "name": "1.5.0", + "slug": "1-5-0" + }, + { + "id": 280, + "gameVersionTypeID": 11, + "name": "1.5.1", + "slug": "1-5-1" + }, + { + "id": 309, + "gameVersionTypeID": 1, + "name": "CB 1.5.1-R0.1", + "slug": "cb-1-5-1-r0-1" + }, + { + "id": 310, + "gameVersionTypeID": 1, + "name": "CB 1.5.1-R0.2", + "slug": "cb-1-5-1-r0-2" + }, + { + "id": 312, + "gameVersionTypeID": 11, + "name": "1.5.2", + "slug": "1-5-2" + }, + { + "id": 313, + "gameVersionTypeID": 1, + "name": "CB 1.5.2-R0.1", + "slug": "cb-1-5-2-r0-1" + }, + { + "id": 316, + "gameVersionTypeID": 1, + "name": "CB 1.5.2-R1.0", + "slug": "cb-1-5-2-r1-0" + }, + { + "id": 318, + "gameVersionTypeID": 6, + "name": "1.6.1", + "slug": "1-6-1" + }, + { + "id": 320, + "gameVersionTypeID": 6, + "name": "1.6.2", + "slug": "1-6-2" + }, + { + "id": 321, + "gameVersionTypeID": 1, + "name": "CB 1.6.2-R0.1", + "slug": "cb-1-6-2-r0-1" + }, + { + "id": 324, + "gameVersionTypeID": 1, + "name": "CB 1.6.2-R1.0", + "slug": "cb-1-6-2-r1-0" + }, + { + "id": 326, + "gameVersionTypeID": 6, + "name": "1.6.4", + "slug": "1-6-4" + }, + { + "id": 360, + "gameVersionTypeID": 1, + "name": "CB 1.6.4-R1.0", + "slug": "cb-1-6-4-r1-0" + }, + { + "id": 361, + "gameVersionTypeID": 5, + "name": "1.7.2", + "slug": "1-7-2" + }, + { + "id": 362, + "gameVersionTypeID": 1, + "name": "CB 1.6.4-R2.0", + "slug": "cb-1-6-4-r2-0" + }, + { + "id": 367, + "gameVersionTypeID": 5, + "name": "1.7.4", + "slug": "1-7-4" + }, + { + "id": 368, + "gameVersionTypeID": 1, + "name": "CB 1.7.2-R0.1", + "slug": "cb-1-7-2-r0-1" + }, + { + "id": 369, + "gameVersionTypeID": 1, + "name": "CB 1.7.2-R0.2", + "slug": "cb-1-7-2-r0-2" + }, + { + "id": 403, + "gameVersionTypeID": 1, + "name": "CB 1.7.2-R0.3", + "slug": "cb-1-7-2-r0-3" + }, + { + "id": 473, + "gameVersionTypeID": 1, + "name": "CB 1.7.9-R0.1", + "slug": "cb-1-7-9-r0-1" + }, + { + "id": 490, + "gameVersionTypeID": 1, + "name": "CB 1.7.9-R0.2", + "slug": "cb-1-7-9-r0-2" + }, + { + "id": 531, + "gameVersionTypeID": 1, + "name": "1.8", + "slug": "1-8" + }, + { + "id": 532, + "gameVersionTypeID": 1, + "name": "1.8.1", + "slug": "1-8-1" + }, + { + "id": 568, + "gameVersionTypeID": 1, + "name": "1.8.3", + "slug": "1-8-3" + }, + { + "id": 585, + "gameVersionTypeID": 1, + "name": "1.9", + "slug": "1-9" + }, + { + "id": 591, + "gameVersionTypeID": 1, + "name": "1.10", + "slug": "1-10" + }, + { + "id": 630, + "gameVersionTypeID": 1, + "name": "1.11", + "slug": "1-11" + }, + { + "id": 4444, + "gameVersionTypeID": 5, + "name": "1.7.5", + "slug": "1-7-5" + }, + { + "id": 4445, + "gameVersionTypeID": 5, + "name": "1.7.6", + "slug": "1-7-6" + }, + { + "id": 4446, + "gameVersionTypeID": 5, + "name": "1.7.7", + "slug": "1-7-7" + }, + { + "id": 4447, + "gameVersionTypeID": 5, + "name": "1.7.8", + "slug": "1-7-8" + }, + { + "id": 4448, + "gameVersionTypeID": 5, + "name": "1.7.9", + "slug": "1-7-9" + }, + { + "id": 4449, + "gameVersionTypeID": 5, + "name": "1.7.10", + "slug": "1-7-10" + }, + { + "id": 4450, + "gameVersionTypeID": 4, + "name": "1.8-Snapshot", + "slug": "1-8-Snapshot" + }, + { + "id": 4455, + "gameVersionTypeID": 4, + "name": "1.8", + "slug": "1-8" + }, + { + "id": 4456, + "gameVersionTypeID": 2, + "name": "Java 6", + "slug": "java-6" + }, + { + "id": 4457, + "gameVersionTypeID": 2, + "name": "Java 7", + "slug": "java-7" + }, + { + "id": 4458, + "gameVersionTypeID": 2, + "name": "Java 8", + "slug": "java-8" + }, + { + "id": 4460, + "gameVersionTypeID": 12, + "name": "1.4.4", + "slug": "1-4-4" + }, + { + "id": 4461, + "gameVersionTypeID": 12, + "name": "1.4.5", + "slug": "1-4-5" + }, + { + "id": 4462, + "gameVersionTypeID": 14, + "name": "1.2.4", + "slug": "1-2-4" + }, + { + "id": 4463, + "gameVersionTypeID": 4, + "name": "1.8.1", + "slug": "1-8-1" + }, + { + "id": 4465, + "gameVersionTypeID": 4, + "name": "1.8.2", + "slug": "1-8-2" + }, + { + "id": 4466, + "gameVersionTypeID": 4, + "name": "1.8.3", + "slug": "1-8-3" + }, + { + "id": 4478, + "gameVersionTypeID": 4, + "name": "1.8.4", + "slug": "1-8-4" + }, + { + "id": 4479, + "gameVersionTypeID": 4, + "name": "1.8.5", + "slug": "1-8-5" + }, + { + "id": 4480, + "gameVersionTypeID": 4, + "name": "1.8.6", + "slug": "1-8-6" + }, + { + "id": 4482, + "gameVersionTypeID": 16, + "name": "1.0", + "slug": "1-0" + }, + { + "id": 4483, + "gameVersionTypeID": 3, + "name": "1.3.2.1", + "slug": "1-3-2-1" + }, + { + "id": 4484, + "gameVersionTypeID": 3, + "name": "1.3.2.2", + "slug": "1-3-2-2" + }, + { + "id": 4485, + "gameVersionTypeID": 3, + "name": "1.3.2.3", + "slug": "1-3-2-3" + }, + { + "id": 4486, + "gameVersionTypeID": 3, + "name": "1.3.2.4", + "slug": "1-3-2-4" + }, + { + "id": 4487, + "gameVersionTypeID": 3, + "name": "1.3.2.5", + "slug": "1-3-2-5" + }, + { + "id": 4488, + "gameVersionTypeID": 3, + "name": "1.3.2.6", + "slug": "1-3-2-6" + }, + { + "id": 4489, + "gameVersionTypeID": 3, + "name": "1.3.2.7", + "slug": "1-3-2-7" + }, + { + "id": 4490, + "gameVersionTypeID": 3, + "name": "1.3.2.8", + "slug": "1-3-2-8" + }, + { + "id": 4491, + "gameVersionTypeID": 3, + "name": "1.3.2.9", + "slug": "1-3-2-9" + }, + { + "id": 4492, + "gameVersionTypeID": 3, + "name": "1.3.2.10", + "slug": "1-3-2-10" + }, + { + "id": 4493, + "gameVersionTypeID": 3, + "name": "1.3.3.12", + "slug": "1-3-3-12" + }, + { + "id": 4494, + "gameVersionTypeID": 3, + "name": "1.3.3.13", + "slug": "1-3-3-13" + }, + { + "id": 4495, + "gameVersionTypeID": 3, + "name": "1.3.3.14", + "slug": "1-3-3-14" + }, + { + "id": 4496, + "gameVersionTypeID": 3, + "name": "1.3.3.15", + "slug": "1-3-3-15" + }, + { + "id": 4497, + "gameVersionTypeID": 3, + "name": "1.3.3.16", + "slug": "1-3-3-16" + }, + { + "id": 4498, + "gameVersionTypeID": 3, + "name": "1.3.3.18", + "slug": "1-3-3-18" + }, + { + "id": 4499, + "gameVersionTypeID": 3, + "name": "1.3.3.19", + "slug": "1-3-3-19" + }, + { + "id": 4500, + "gameVersionTypeID": 3, + "name": "1.3.3.20", + "slug": "1-3-3-20" + }, + { + "id": 4501, + "gameVersionTypeID": 3, + "name": "1.3.3.21", + "slug": "1-3-3-21" + }, + { + "id": 4502, + "gameVersionTypeID": 3, + "name": "1.3.3.22", + "slug": "1-3-3-22" + }, + { + "id": 4503, + "gameVersionTypeID": 3, + "name": "1.3.3.23", + "slug": "1-3-3-23" + }, + { + "id": 4504, + "gameVersionTypeID": 3, + "name": "1.3.3.24", + "slug": "1-3-3-24" + }, + { + "id": 4505, + "gameVersionTypeID": 3, + "name": "1.3.3.26", + "slug": "1-3-3-26" + }, + { + "id": 4506, + "gameVersionTypeID": 3, + "name": "1.3.3.27", + "slug": "1-3-3-27" + }, + { + "id": 4507, + "gameVersionTypeID": 3, + "name": "1.3.3.28", + "slug": "1-3-3-28" + }, + { + "id": 4508, + "gameVersionTypeID": 3, + "name": "1.3.4.29", + "slug": "1-3-4-29" + }, + { + "id": 4509, + "gameVersionTypeID": 3, + "name": "1.3.4.30", + "slug": "1-3-4-30" + }, + { + "id": 4510, + "gameVersionTypeID": 3, + "name": "1.3.4.31", + "slug": "1-3-4-31" + }, + { + "id": 4511, + "gameVersionTypeID": 3, + "name": "1.3.4.32", + "slug": "1-3-4-32" + }, + { + "id": 4512, + "gameVersionTypeID": 3, + "name": "1.3.4.33", + "slug": "1-3-4-33" + }, + { + "id": 4513, + "gameVersionTypeID": 3, + "name": "1.3.4.34", + "slug": "1-3-4-34" + }, + { + "id": 4514, + "gameVersionTypeID": 3, + "name": "1.3.4.35", + "slug": "1-3-4-35" + }, + { + "id": 4515, + "gameVersionTypeID": 3, + "name": "1.3.4.36", + "slug": "1-3-4-36" + }, + { + "id": 4516, + "gameVersionTypeID": 3, + "name": "1.3.4.37", + "slug": "1-3-4-37" + }, + { + "id": 4517, + "gameVersionTypeID": 3, + "name": "1.3.4.38", + "slug": "1-3-4-38" + }, + { + "id": 4518, + "gameVersionTypeID": 3, + "name": "1.3.4.39", + "slug": "1-3-4-39" + }, + { + "id": 4519, + "gameVersionTypeID": 3, + "name": "1.3.4.41", + "slug": "1-3-4-41" + }, + { + "id": 4520, + "gameVersionTypeID": 3, + "name": "1.4.0.44", + "slug": "1-4-0-44" + }, + { + "id": 4521, + "gameVersionTypeID": 3, + "name": "1.4.0.45", + "slug": "1-4-0-45" + }, + { + "id": 4522, + "gameVersionTypeID": 3, + "name": "1.4.0.46", + "slug": "1-4-0-46" + }, + { + "id": 4523, + "gameVersionTypeID": 3, + "name": "1.4.0.47", + "slug": "1-4-0-47" + }, + { + "id": 4524, + "gameVersionTypeID": 3, + "name": "1.4.0.48", + "slug": "1-4-0-48" + }, + { + "id": 4525, + "gameVersionTypeID": 3, + "name": "1.4.0.50", + "slug": "1-4-0-50" + }, + { + "id": 4526, + "gameVersionTypeID": 3, + "name": "1.4.0.51", + "slug": "1-4-0-51" + }, + { + "id": 4527, + "gameVersionTypeID": 3, + "name": "1.4.0.52", + "slug": "1-4-0-52" + }, + { + "id": 4528, + "gameVersionTypeID": 3, + "name": "1.4.0.55", + "slug": "1-4-0-55" + }, + { + "id": 4529, + "gameVersionTypeID": 3, + "name": "1.4.0.56", + "slug": "1-4-0-56" + }, + { + "id": 4530, + "gameVersionTypeID": 3, + "name": "1.4.0.57", + "slug": "1-4-0-57" + }, + { + "id": 4531, + "gameVersionTypeID": 3, + "name": "1.4.1.58", + "slug": "1-4-1-58" + }, + { + "id": 4532, + "gameVersionTypeID": 3, + "name": "1.4.1.59", + "slug": "1-4-1-59" + }, + { + "id": 4533, + "gameVersionTypeID": 3, + "name": "1.4.1.60", + "slug": "1-4-1-60" + }, + { + "id": 4534, + "gameVersionTypeID": 3, + "name": "1.4.1.61", + "slug": "1-4-1-61" + }, + { + "id": 4535, + "gameVersionTypeID": 3, + "name": "1.4.1.62", + "slug": "1-4-1-62" + }, + { + "id": 4536, + "gameVersionTypeID": 3, + "name": "1.4.1.63", + "slug": "1-4-1-63" + }, + { + "id": 4537, + "gameVersionTypeID": 3, + "name": "1.4.1.64", + "slug": "1-4-1-64" + }, + { + "id": 4538, + "gameVersionTypeID": 3, + "name": "2.0.0.65", + "slug": "2-0-0-65" + }, + { + "id": 4539, + "gameVersionTypeID": 3, + "name": "2.0.0.66", + "slug": "2-0-0-66" + }, + { + "id": 4540, + "gameVersionTypeID": 3, + "name": "2.0.0.67", + "slug": "2-0-0-67" + }, + { + "id": 4541, + "gameVersionTypeID": 3, + "name": "2.0.0.68", + "slug": "2-0-0-68" + }, + { + "id": 4542, + "gameVersionTypeID": 3, + "name": "3.0.0.69", + "slug": "3-0-0-69" + }, + { + "id": 4543, + "gameVersionTypeID": 3, + "name": "3.0.0.70", + "slug": "3-0-0-70" + }, + { + "id": 4544, + "gameVersionTypeID": 3, + "name": "3.0.0.71", + "slug": "3-0-0-71" + }, + { + "id": 4545, + "gameVersionTypeID": 3, + "name": "3.0.0.72", + "slug": "3-0-0-72" + }, + { + "id": 4546, + "gameVersionTypeID": 3, + "name": "3.0.1.73", + "slug": "3-0-1-73" + }, + { + "id": 4547, + "gameVersionTypeID": 3, + "name": "3.0.1.74", + "slug": "3-0-1-74" + }, + { + "id": 4548, + "gameVersionTypeID": 3, + "name": "3.0.1.75", + "slug": "3-0-1-75" + }, + { + "id": 4549, + "gameVersionTypeID": 3, + "name": "3.0.1.77", + "slug": "3-0-1-77" + }, + { + "id": 4550, + "gameVersionTypeID": 3, + "name": "3.0.1.78", + "slug": "3-0-1-78" + }, + { + "id": 4551, + "gameVersionTypeID": 3, + "name": "3.0.1.79", + "slug": "3-0-1-79" + }, + { + "id": 4552, + "gameVersionTypeID": 3, + "name": "3.0.1.80", + "slug": "3-0-1-80" + }, + { + "id": 4553, + "gameVersionTypeID": 3, + "name": "3.0.1.81", + "slug": "3-0-1-81" + }, + { + "id": 4554, + "gameVersionTypeID": 3, + "name": "3.0.1.82", + "slug": "3-0-1-82" + }, + { + "id": 4555, + "gameVersionTypeID": 3, + "name": "3.0.1.83", + "slug": "3-0-1-83" + }, + { + "id": 4556, + "gameVersionTypeID": 3, + "name": "3.0.1.84", + "slug": "3-0-1-84" + }, + { + "id": 4557, + "gameVersionTypeID": 3, + "name": "3.0.1.85", + "slug": "3-0-1-85" + }, + { + "id": 4558, + "gameVersionTypeID": 3, + "name": "3.0.1.86", + "slug": "3-0-1-86" + }, + { + "id": 4559, + "gameVersionTypeID": 3, + "name": "3.0.1.87", + "slug": "3-0-1-87" + }, + { + "id": 4560, + "gameVersionTypeID": 3, + "name": "3.0.1.88", + "slug": "3-0-1-88" + }, + { + "id": 4561, + "gameVersionTypeID": 3, + "name": "3.0.1.89", + "slug": "3-0-1-89" + }, + { + "id": 4562, + "gameVersionTypeID": 3, + "name": "3.1.2.90", + "slug": "3-1-2-90" + }, + { + "id": 4563, + "gameVersionTypeID": 3, + "name": "3.1.2.91", + "slug": "3-1-2-91" + }, + { + "id": 4564, + "gameVersionTypeID": 3, + "name": "3.1.2.92", + "slug": "3-1-2-92" + }, + { + "id": 4565, + "gameVersionTypeID": 3, + "name": "3.1.2.93", + "slug": "3-1-2-93" + }, + { + "id": 4566, + "gameVersionTypeID": 3, + "name": "3.1.2.94", + "slug": "3-1-2-94" + }, + { + "id": 4567, + "gameVersionTypeID": 3, + "name": "3.1.2.95", + "slug": "3-1-2-95" + }, + { + "id": 4568, + "gameVersionTypeID": 3, + "name": "3.1.2.96", + "slug": "3-1-2-96" + }, + { + "id": 4569, + "gameVersionTypeID": 3, + "name": "3.1.2.97", + "slug": "3-1-2-97" + }, + { + "id": 4570, + "gameVersionTypeID": 3, + "name": "3.1.2.98", + "slug": "3-1-2-98" + }, + { + "id": 4571, + "gameVersionTypeID": 3, + "name": "3.1.3.99", + "slug": "3-1-3-99" + }, + { + "id": 4572, + "gameVersionTypeID": 3, + "name": "3.1.3.100", + "slug": "3-1-3-100" + }, + { + "id": 4573, + "gameVersionTypeID": 3, + "name": "3.1.3.101", + "slug": "3-1-3-101" + }, + { + "id": 4574, + "gameVersionTypeID": 3, + "name": "3.1.3.102", + "slug": "3-1-3-102" + }, + { + "id": 4575, + "gameVersionTypeID": 3, + "name": "3.1.3.103", + "slug": "3-1-3-103" + }, + { + "id": 4576, + "gameVersionTypeID": 3, + "name": "3.1.3.104", + "slug": "3-1-3-104" + }, + { + "id": 4577, + "gameVersionTypeID": 3, + "name": "3.1.3.105", + "slug": "3-1-3-105" + }, + { + "id": 4578, + "gameVersionTypeID": 3, + "name": "3.1.3.106", + "slug": "3-1-3-106" + }, + { + "id": 4579, + "gameVersionTypeID": 3, + "name": "3.1.3.107", + "slug": "3-1-3-107" + }, + { + "id": 4580, + "gameVersionTypeID": 3, + "name": "3.2.3.108", + "slug": "3-2-3-108" + }, + { + "id": 4581, + "gameVersionTypeID": 3, + "name": "3.2.4.110", + "slug": "3-2-4-110" + }, + { + "id": 4582, + "gameVersionTypeID": 3, + "name": "3.2.4.111", + "slug": "3-2-4-111" + }, + { + "id": 4583, + "gameVersionTypeID": 3, + "name": "3.2.4.114", + "slug": "3-2-4-114" + }, + { + "id": 4584, + "gameVersionTypeID": 3, + "name": "3.2.4.115", + "slug": "3-2-4-115" + }, + { + "id": 4585, + "gameVersionTypeID": 3, + "name": "3.2.4.116", + "slug": "3-2-4-116" + }, + { + "id": 4586, + "gameVersionTypeID": 3, + "name": "3.2.5.117", + "slug": "3-2-5-117" + }, + { + "id": 4587, + "gameVersionTypeID": 3, + "name": "3.2.5.118", + "slug": "3-2-5-118" + }, + { + "id": 4588, + "gameVersionTypeID": 3, + "name": "3.2.5.119", + "slug": "3-2-5-119" + }, + { + "id": 4589, + "gameVersionTypeID": 3, + "name": "3.2.5.120", + "slug": "3-2-5-120" + }, + { + "id": 4590, + "gameVersionTypeID": 3, + "name": "3.2.5.121", + "slug": "3-2-5-121" + }, + { + "id": 4591, + "gameVersionTypeID": 3, + "name": "3.2.5.122", + "slug": "3-2-5-122" + }, + { + "id": 4592, + "gameVersionTypeID": 3, + "name": "3.2.5.123", + "slug": "3-2-5-123" + }, + { + "id": 4593, + "gameVersionTypeID": 3, + "name": "3.2.5.124", + "slug": "3-2-5-124" + }, + { + "id": 4594, + "gameVersionTypeID": 3, + "name": "3.2.5.125", + "slug": "3-2-5-125" + }, + { + "id": 4595, + "gameVersionTypeID": 3, + "name": "3.2.5.126", + "slug": "3-2-5-126" + }, + { + "id": 4596, + "gameVersionTypeID": 3, + "name": "3.2.5.127", + "slug": "3-2-5-127" + }, + { + "id": 4597, + "gameVersionTypeID": 3, + "name": "3.2.5.128", + "slug": "3-2-5-128" + }, + { + "id": 4598, + "gameVersionTypeID": 3, + "name": "3.2.6.129", + "slug": "3-2-6-129" + }, + { + "id": 4599, + "gameVersionTypeID": 3, + "name": "3.2.6.130", + "slug": "3-2-6-130" + }, + { + "id": 4600, + "gameVersionTypeID": 3, + "name": "3.2.6.131", + "slug": "3-2-6-131" + }, + { + "id": 4601, + "gameVersionTypeID": 3, + "name": "3.2.6.132", + "slug": "3-2-6-132" + }, + { + "id": 4602, + "gameVersionTypeID": 3, + "name": "3.3.7.133", + "slug": "3-3-7-133" + }, + { + "id": 4603, + "gameVersionTypeID": 3, + "name": "3.3.7.134", + "slug": "3-3-7-134" + }, + { + "id": 4604, + "gameVersionTypeID": 3, + "name": "3.3.7.135", + "slug": "3-3-7-135" + }, + { + "id": 4605, + "gameVersionTypeID": 3, + "name": "3.3.7.136", + "slug": "3-3-7-136" + }, + { + "id": 4606, + "gameVersionTypeID": 3, + "name": "3.3.7.137", + "slug": "3-3-7-137" + }, + { + "id": 4607, + "gameVersionTypeID": 3, + "name": "3.3.7.138", + "slug": "3-3-7-138" + }, + { + "id": 4608, + "gameVersionTypeID": 3, + "name": "3.3.7.139", + "slug": "3-3-7-139" + }, + { + "id": 4609, + "gameVersionTypeID": 3, + "name": "3.3.7.140", + "slug": "3-3-7-140" + }, + { + "id": 4610, + "gameVersionTypeID": 3, + "name": "3.3.8.141", + "slug": "3-3-8-141" + }, + { + "id": 4611, + "gameVersionTypeID": 3, + "name": "3.3.8.142", + "slug": "3-3-8-142" + }, + { + "id": 4612, + "gameVersionTypeID": 3, + "name": "3.3.8.143", + "slug": "3-3-8-143" + }, + { + "id": 4613, + "gameVersionTypeID": 3, + "name": "3.3.8.144", + "slug": "3-3-8-144" + }, + { + "id": 4614, + "gameVersionTypeID": 3, + "name": "3.3.8.145", + "slug": "3-3-8-145" + }, + { + "id": 4615, + "gameVersionTypeID": 3, + "name": "3.3.8.146", + "slug": "3-3-8-146" + }, + { + "id": 4616, + "gameVersionTypeID": 3, + "name": "3.3.8.147", + "slug": "3-3-8-147" + }, + { + "id": 4617, + "gameVersionTypeID": 3, + "name": "3.3.8.148", + "slug": "3-3-8-148" + }, + { + "id": 4618, + "gameVersionTypeID": 3, + "name": "3.3.8.150", + "slug": "3-3-8-150" + }, + { + "id": 4619, + "gameVersionTypeID": 3, + "name": "3.3.8.151", + "slug": "3-3-8-151" + }, + { + "id": 4620, + "gameVersionTypeID": 3, + "name": "3.3.8.152", + "slug": "3-3-8-152" + }, + { + "id": 4621, + "gameVersionTypeID": 3, + "name": "3.3.8.153", + "slug": "3-3-8-153" + }, + { + "id": 4622, + "gameVersionTypeID": 3, + "name": "3.3.8.154", + "slug": "3-3-8-154" + }, + { + "id": 4623, + "gameVersionTypeID": 3, + "name": "3.3.8.155", + "slug": "3-3-8-155" + }, + { + "id": 4624, + "gameVersionTypeID": 3, + "name": "3.3.8.156", + "slug": "3-3-8-156" + }, + { + "id": 4625, + "gameVersionTypeID": 3, + "name": "3.3.8.157", + "slug": "3-3-8-157" + }, + { + "id": 4626, + "gameVersionTypeID": 3, + "name": "3.3.8.158", + "slug": "3-3-8-158" + }, + { + "id": 4627, + "gameVersionTypeID": 3, + "name": "3.3.8.159", + "slug": "3-3-8-159" + }, + { + "id": 4628, + "gameVersionTypeID": 3, + "name": "3.3.8.160", + "slug": "3-3-8-160" + }, + { + "id": 4629, + "gameVersionTypeID": 3, + "name": "3.3.8.161", + "slug": "3-3-8-161" + }, + { + "id": 4630, + "gameVersionTypeID": 3, + "name": "3.3.8.162", + "slug": "3-3-8-162" + }, + { + "id": 4631, + "gameVersionTypeID": 3, + "name": "3.3.8.163", + "slug": "3-3-8-163" + }, + { + "id": 4632, + "gameVersionTypeID": 3, + "name": "3.3.8.164", + "slug": "3-3-8-164" + }, + { + "id": 4633, + "gameVersionTypeID": 3, + "name": "3.3.8.168", + "slug": "3-3-8-168" + }, + { + "id": 4634, + "gameVersionTypeID": 3, + "name": "3.3.8.170", + "slug": "3-3-8-170" + }, + { + "id": 4635, + "gameVersionTypeID": 3, + "name": "3.4.9.171", + "slug": "3-4-9-171" + }, + { + "id": 4636, + "gameVersionTypeID": 3, + "name": "4.0.0.172", + "slug": "4-0-0-172" + }, + { + "id": 4637, + "gameVersionTypeID": 3, + "name": "4.0.0.173", + "slug": "4-0-0-173" + }, + { + "id": 4638, + "gameVersionTypeID": 3, + "name": "4.0.0.176", + "slug": "4-0-0-176" + }, + { + "id": 4639, + "gameVersionTypeID": 3, + "name": "4.0.0.177", + "slug": "4-0-0-177" + }, + { + "id": 4640, + "gameVersionTypeID": 3, + "name": "4.0.0.178", + "slug": "4-0-0-178" + }, + { + "id": 4641, + "gameVersionTypeID": 3, + "name": "4.0.0.179", + "slug": "4-0-0-179" + }, + { + "id": 4642, + "gameVersionTypeID": 3, + "name": "4.0.0.180", + "slug": "4-0-0-180" + }, + { + "id": 4643, + "gameVersionTypeID": 3, + "name": "4.0.0.181", + "slug": "4-0-0-181" + }, + { + "id": 4644, + "gameVersionTypeID": 3, + "name": "4.0.0.182", + "slug": "4-0-0-182" + }, + { + "id": 4645, + "gameVersionTypeID": 3, + "name": "4.0.0.183", + "slug": "4-0-0-183" + }, + { + "id": 4646, + "gameVersionTypeID": 3, + "name": "4.0.0.184", + "slug": "4-0-0-184" + }, + { + "id": 4647, + "gameVersionTypeID": 3, + "name": "4.0.0.185", + "slug": "4-0-0-185" + }, + { + "id": 4648, + "gameVersionTypeID": 3, + "name": "4.0.0.186", + "slug": "4-0-0-186" + }, + { + "id": 4649, + "gameVersionTypeID": 3, + "name": "4.0.0.187", + "slug": "4-0-0-187" + }, + { + "id": 4650, + "gameVersionTypeID": 3, + "name": "4.0.0.188", + "slug": "4-0-0-188" + }, + { + "id": 4651, + "gameVersionTypeID": 3, + "name": "4.0.0.189", + "slug": "4-0-0-189" + }, + { + "id": 4652, + "gameVersionTypeID": 3, + "name": "4.0.0.190", + "slug": "4-0-0-190" + }, + { + "id": 4653, + "gameVersionTypeID": 3, + "name": "4.0.0.191", + "slug": "4-0-0-191" + }, + { + "id": 4654, + "gameVersionTypeID": 3, + "name": "4.0.0.192", + "slug": "4-0-0-192" + }, + { + "id": 4655, + "gameVersionTypeID": 3, + "name": "4.0.0.193", + "slug": "4-0-0-193" + }, + { + "id": 4656, + "gameVersionTypeID": 3, + "name": "4.0.0.194", + "slug": "4-0-0-194" + }, + { + "id": 4657, + "gameVersionTypeID": 3, + "name": "4.0.0.195", + "slug": "4-0-0-195" + }, + { + "id": 4658, + "gameVersionTypeID": 3, + "name": "4.0.0.196", + "slug": "4-0-0-196" + }, + { + "id": 4659, + "gameVersionTypeID": 3, + "name": "4.0.0.197", + "slug": "4-0-0-197" + }, + { + "id": 4660, + "gameVersionTypeID": 3, + "name": "4.0.0.198", + "slug": "4-0-0-198" + }, + { + "id": 4661, + "gameVersionTypeID": 3, + "name": "4.0.0.199", + "slug": "4-0-0-199" + }, + { + "id": 4662, + "gameVersionTypeID": 3, + "name": "4.0.0.200", + "slug": "4-0-0-200" + }, + { + "id": 4663, + "gameVersionTypeID": 3, + "name": "4.0.0.204", + "slug": "4-0-0-204" + }, + { + "id": 4664, + "gameVersionTypeID": 3, + "name": "4.0.0.205", + "slug": "4-0-0-205" + }, + { + "id": 4665, + "gameVersionTypeID": 3, + "name": "4.0.0.206", + "slug": "4-0-0-206" + }, + { + "id": 4666, + "gameVersionTypeID": 3, + "name": "4.0.0.207", + "slug": "4-0-0-207" + }, + { + "id": 4667, + "gameVersionTypeID": 3, + "name": "4.0.0.208", + "slug": "4-0-0-208" + }, + { + "id": 4668, + "gameVersionTypeID": 3, + "name": "4.0.0.209", + "slug": "4-0-0-209" + }, + { + "id": 4669, + "gameVersionTypeID": 3, + "name": "4.0.0.210", + "slug": "4-0-0-210" + }, + { + "id": 4670, + "gameVersionTypeID": 3, + "name": "4.0.0.211", + "slug": "4-0-0-211" + }, + { + "id": 4671, + "gameVersionTypeID": 3, + "name": "4.0.0.212", + "slug": "4-0-0-212" + }, + { + "id": 4672, + "gameVersionTypeID": 3, + "name": "4.0.0.213", + "slug": "4-0-0-213" + }, + { + "id": 4673, + "gameVersionTypeID": 3, + "name": "4.0.0.214", + "slug": "4-0-0-214" + }, + { + "id": 4674, + "gameVersionTypeID": 3, + "name": "4.0.0.215", + "slug": "4-0-0-215" + }, + { + "id": 4675, + "gameVersionTypeID": 3, + "name": "4.0.0.216", + "slug": "4-0-0-216" + }, + { + "id": 4676, + "gameVersionTypeID": 3, + "name": "4.0.0.217", + "slug": "4-0-0-217" + }, + { + "id": 4677, + "gameVersionTypeID": 3, + "name": "4.0.0.220", + "slug": "4-0-0-220" + }, + { + "id": 4678, + "gameVersionTypeID": 3, + "name": "4.0.0.221", + "slug": "4-0-0-221" + }, + { + "id": 4679, + "gameVersionTypeID": 3, + "name": "4.0.0.222", + "slug": "4-0-0-222" + }, + { + "id": 4680, + "gameVersionTypeID": 3, + "name": "4.0.0.223", + "slug": "4-0-0-223" + }, + { + "id": 4681, + "gameVersionTypeID": 3, + "name": "4.0.0.224", + "slug": "4-0-0-224" + }, + { + "id": 4682, + "gameVersionTypeID": 3, + "name": "4.0.0.225", + "slug": "4-0-0-225" + }, + { + "id": 4683, + "gameVersionTypeID": 3, + "name": "4.0.0.226", + "slug": "4-0-0-226" + }, + { + "id": 4684, + "gameVersionTypeID": 3, + "name": "4.0.0.227", + "slug": "4-0-0-227" + }, + { + "id": 4685, + "gameVersionTypeID": 3, + "name": "4.0.0.228", + "slug": "4-0-0-228" + }, + { + "id": 4686, + "gameVersionTypeID": 3, + "name": "4.0.0.229", + "slug": "4-0-0-229" + }, + { + "id": 4687, + "gameVersionTypeID": 3, + "name": "4.0.0.230", + "slug": "4-0-0-230" + }, + { + "id": 4688, + "gameVersionTypeID": 3, + "name": "4.0.0.231", + "slug": "4-0-0-231" + }, + { + "id": 4689, + "gameVersionTypeID": 3, + "name": "4.0.0.232", + "slug": "4-0-0-232" + }, + { + "id": 4690, + "gameVersionTypeID": 3, + "name": "4.0.0.233", + "slug": "4-0-0-233" + }, + { + "id": 4691, + "gameVersionTypeID": 3, + "name": "4.0.0.234", + "slug": "4-0-0-234" + }, + { + "id": 4692, + "gameVersionTypeID": 3, + "name": "4.0.0.235", + "slug": "4-0-0-235" + }, + { + "id": 4693, + "gameVersionTypeID": 3, + "name": "4.0.0.236", + "slug": "4-0-0-236" + }, + { + "id": 4694, + "gameVersionTypeID": 3, + "name": "4.0.0.237", + "slug": "4-0-0-237" + }, + { + "id": 4695, + "gameVersionTypeID": 3, + "name": "4.0.0.238", + "slug": "4-0-0-238" + }, + { + "id": 4696, + "gameVersionTypeID": 3, + "name": "4.0.0.239", + "slug": "4-0-0-239" + }, + { + "id": 4697, + "gameVersionTypeID": 3, + "name": "4.0.0.240", + "slug": "4-0-0-240" + }, + { + "id": 4698, + "gameVersionTypeID": 3, + "name": "4.0.0.241", + "slug": "4-0-0-241" + }, + { + "id": 4699, + "gameVersionTypeID": 3, + "name": "4.0.0.242", + "slug": "4-0-0-242" + }, + { + "id": 4700, + "gameVersionTypeID": 3, + "name": "4.0.0.243", + "slug": "4-0-0-243" + }, + { + "id": 4701, + "gameVersionTypeID": 3, + "name": "4.0.0.245", + "slug": "4-0-0-245" + }, + { + "id": 4702, + "gameVersionTypeID": 3, + "name": "4.0.0.246", + "slug": "4-0-0-246" + }, + { + "id": 4703, + "gameVersionTypeID": 3, + "name": "4.0.0.247", + "slug": "4-0-0-247" + }, + { + "id": 4704, + "gameVersionTypeID": 3, + "name": "4.0.0.248", + "slug": "4-0-0-248" + }, + { + "id": 4705, + "gameVersionTypeID": 3, + "name": "4.0.0.249", + "slug": "4-0-0-249" + }, + { + "id": 4706, + "gameVersionTypeID": 3, + "name": "4.0.0.250", + "slug": "4-0-0-250" + }, + { + "id": 4707, + "gameVersionTypeID": 3, + "name": "4.1.1.251", + "slug": "4-1-1-251" + }, + { + "id": 4708, + "gameVersionTypeID": 3, + "name": "4.1.1.252", + "slug": "4-1-1-252" + }, + { + "id": 4709, + "gameVersionTypeID": 3, + "name": "4.1.1.253", + "slug": "4-1-1-253" + }, + { + "id": 4710, + "gameVersionTypeID": 3, + "name": "4.1.1.254", + "slug": "4-1-1-254" + }, + { + "id": 4711, + "gameVersionTypeID": 3, + "name": "4.1.1.255", + "slug": "4-1-1-255" + }, + { + "id": 4712, + "gameVersionTypeID": 3, + "name": "4.1.1.256", + "slug": "4-1-1-256" + }, + { + "id": 4713, + "gameVersionTypeID": 3, + "name": "4.1.1.257", + "slug": "4-1-1-257" + }, + { + "id": 4714, + "gameVersionTypeID": 3, + "name": "4.1.1.258", + "slug": "4-1-1-258" + }, + { + "id": 4715, + "gameVersionTypeID": 3, + "name": "4.1.2.259", + "slug": "4-1-2-259" + }, + { + "id": 4716, + "gameVersionTypeID": 3, + "name": "4.1.2.260", + "slug": "4-1-2-260" + }, + { + "id": 4717, + "gameVersionTypeID": 3, + "name": "4.1.2.261", + "slug": "4-1-2-261" + }, + { + "id": 4718, + "gameVersionTypeID": 3, + "name": "4.1.2.262", + "slug": "4-1-2-262" + }, + { + "id": 4719, + "gameVersionTypeID": 3, + "name": "4.1.2.263", + "slug": "4-1-2-263" + }, + { + "id": 4720, + "gameVersionTypeID": 3, + "name": "4.1.2.264", + "slug": "4-1-2-264" + }, + { + "id": 4721, + "gameVersionTypeID": 3, + "name": "4.1.2.265", + "slug": "4-1-2-265" + }, + { + "id": 4722, + "gameVersionTypeID": 3, + "name": "4.1.2.266", + "slug": "4-1-2-266" + }, + { + "id": 4723, + "gameVersionTypeID": 3, + "name": "4.1.2.267", + "slug": "4-1-2-267" + }, + { + "id": 4724, + "gameVersionTypeID": 3, + "name": "4.1.2.268", + "slug": "4-1-2-268" + }, + { + "id": 4725, + "gameVersionTypeID": 3, + "name": "4.1.2.269", + "slug": "4-1-2-269" + }, + { + "id": 4726, + "gameVersionTypeID": 3, + "name": "4.1.3.270", + "slug": "4-1-3-270" + }, + { + "id": 4727, + "gameVersionTypeID": 3, + "name": "4.1.4.271", + "slug": "4-1-4-271" + }, + { + "id": 4728, + "gameVersionTypeID": 3, + "name": "4.1.4.272", + "slug": "4-1-4-272" + }, + { + "id": 4729, + "gameVersionTypeID": 3, + "name": "4.1.4.274", + "slug": "4-1-4-274" + }, + { + "id": 4730, + "gameVersionTypeID": 3, + "name": "4.1.4.275", + "slug": "4-1-4-275" + }, + { + "id": 4731, + "gameVersionTypeID": 3, + "name": "4.1.4.276", + "slug": "4-1-4-276" + }, + { + "id": 4732, + "gameVersionTypeID": 3, + "name": "4.1.4.277", + "slug": "4-1-4-277" + }, + { + "id": 4733, + "gameVersionTypeID": 3, + "name": "4.1.4.278", + "slug": "4-1-4-278" + }, + { + "id": 4734, + "gameVersionTypeID": 3, + "name": "4.1.4.279", + "slug": "4-1-4-279" + }, + { + "id": 4735, + "gameVersionTypeID": 3, + "name": "4.1.4.280", + "slug": "4-1-4-280" + }, + { + "id": 4736, + "gameVersionTypeID": 3, + "name": "4.1.4.281", + "slug": "4-1-4-281" + }, + { + "id": 4737, + "gameVersionTypeID": 3, + "name": "4.1.4.282", + "slug": "4-1-4-282" + }, + { + "id": 4738, + "gameVersionTypeID": 3, + "name": "4.1.4.284", + "slug": "4-1-4-284" + }, + { + "id": 4739, + "gameVersionTypeID": 3, + "name": "4.1.4.285", + "slug": "4-1-4-285" + }, + { + "id": 4740, + "gameVersionTypeID": 3, + "name": "4.1.4.286", + "slug": "4-1-4-286" + }, + { + "id": 4741, + "gameVersionTypeID": 3, + "name": "4.1.4.287", + "slug": "4-1-4-287" + }, + { + "id": 4742, + "gameVersionTypeID": 3, + "name": "4.1.4.288", + "slug": "4-1-4-288" + }, + { + "id": 4743, + "gameVersionTypeID": 3, + "name": "4.1.4.289", + "slug": "4-1-4-289" + }, + { + "id": 4744, + "gameVersionTypeID": 3, + "name": "4.1.4.290", + "slug": "4-1-4-290" + }, + { + "id": 4745, + "gameVersionTypeID": 3, + "name": "4.1.4.291", + "slug": "4-1-4-291" + }, + { + "id": 4746, + "gameVersionTypeID": 3, + "name": "4.1.4.292", + "slug": "4-1-4-292" + }, + { + "id": 4747, + "gameVersionTypeID": 3, + "name": "4.1.4.294", + "slug": "4-1-4-294" + }, + { + "id": 4748, + "gameVersionTypeID": 3, + "name": "4.1.4.295", + "slug": "4-1-4-295" + }, + { + "id": 4749, + "gameVersionTypeID": 3, + "name": "4.1.4.296", + "slug": "4-1-4-296" + }, + { + "id": 4750, + "gameVersionTypeID": 3, + "name": "4.1.4.297", + "slug": "4-1-4-297" + }, + { + "id": 4751, + "gameVersionTypeID": 3, + "name": "4.1.4.298", + "slug": "4-1-4-298" + }, + { + "id": 4752, + "gameVersionTypeID": 3, + "name": "4.2.5.299", + "slug": "4-2-5-299" + }, + { + "id": 4753, + "gameVersionTypeID": 3, + "name": "4.2.5.300", + "slug": "4-2-5-300" + }, + { + "id": 4754, + "gameVersionTypeID": 3, + "name": "4.2.5.301", + "slug": "4-2-5-301" + }, + { + "id": 4755, + "gameVersionTypeID": 3, + "name": "4.2.5.302", + "slug": "4-2-5-302" + }, + { + "id": 4756, + "gameVersionTypeID": 3, + "name": "4.2.5.303", + "slug": "4-2-5-303" + }, + { + "id": 4757, + "gameVersionTypeID": 3, + "name": "4.2.5.305", + "slug": "4-2-5-305" + }, + { + "id": 4758, + "gameVersionTypeID": 3, + "name": "4.2.5.306", + "slug": "4-2-5-306" + }, + { + "id": 4759, + "gameVersionTypeID": 3, + "name": "4.2.5.307", + "slug": "4-2-5-307" + }, + { + "id": 4760, + "gameVersionTypeID": 3, + "name": "4.2.5.310", + "slug": "4-2-5-310" + }, + { + "id": 4761, + "gameVersionTypeID": 3, + "name": "4.2.5.311", + "slug": "4-2-5-311" + }, + { + "id": 4762, + "gameVersionTypeID": 3, + "name": "4.2.5.312", + "slug": "4-2-5-312" + }, + { + "id": 4763, + "gameVersionTypeID": 3, + "name": "4.2.5.313", + "slug": "4-2-5-313" + }, + { + "id": 4764, + "gameVersionTypeID": 3, + "name": "4.2.5.314", + "slug": "4-2-5-314" + }, + { + "id": 4765, + "gameVersionTypeID": 3, + "name": "4.2.5.315", + "slug": "4-2-5-315" + }, + { + "id": 4766, + "gameVersionTypeID": 3, + "name": "4.2.5.316", + "slug": "4-2-5-316" + }, + { + "id": 4767, + "gameVersionTypeID": 3, + "name": "4.2.5.317", + "slug": "4-2-5-317" + }, + { + "id": 4768, + "gameVersionTypeID": 3, + "name": "4.3.5.318", + "slug": "4-3-5-318" + }, + { + "id": 4769, + "gameVersionTypeID": 3, + "name": "6.0.1.330", + "slug": "6-0-1-330" + }, + { + "id": 4770, + "gameVersionTypeID": 3, + "name": "6.0.1.331", + "slug": "6-0-1-331" + }, + { + "id": 4771, + "gameVersionTypeID": 3, + "name": "6.0.1.332", + "slug": "6-0-1-332" + }, + { + "id": 4772, + "gameVersionTypeID": 3, + "name": "6.0.1.336", + "slug": "6-0-1-336" + }, + { + "id": 4773, + "gameVersionTypeID": 3, + "name": "6.0.1.337", + "slug": "6-0-1-337" + }, + { + "id": 4774, + "gameVersionTypeID": 3, + "name": "6.0.1.338", + "slug": "6-0-1-338" + }, + { + "id": 4775, + "gameVersionTypeID": 3, + "name": "6.0.1.339", + "slug": "6-0-1-339" + }, + { + "id": 4776, + "gameVersionTypeID": 3, + "name": "6.0.1.341", + "slug": "6-0-1-341" + }, + { + "id": 4777, + "gameVersionTypeID": 3, + "name": "6.0.1.342", + "slug": "6-0-1-342" + }, + { + "id": 4778, + "gameVersionTypeID": 3, + "name": "6.0.1.343", + "slug": "6-0-1-343" + }, + { + "id": 4779, + "gameVersionTypeID": 3, + "name": "6.0.1.345", + "slug": "6-0-1-345" + }, + { + "id": 4780, + "gameVersionTypeID": 3, + "name": "6.0.1.347", + "slug": "6-0-1-347" + }, + { + "id": 4781, + "gameVersionTypeID": 3, + "name": "6.0.1.348", + "slug": "6-0-1-348" + }, + { + "id": 4782, + "gameVersionTypeID": 3, + "name": "6.0.1.349", + "slug": "6-0-1-349" + }, + { + "id": 4783, + "gameVersionTypeID": 3, + "name": "6.0.1.350", + "slug": "6-0-1-350" + }, + { + "id": 4784, + "gameVersionTypeID": 3, + "name": "6.0.1.351", + "slug": "6-0-1-351" + }, + { + "id": 4785, + "gameVersionTypeID": 3, + "name": "6.0.1.353", + "slug": "6-0-1-353" + }, + { + "id": 4786, + "gameVersionTypeID": 3, + "name": "6.0.1.354", + "slug": "6-0-1-354" + }, + { + "id": 4787, + "gameVersionTypeID": 3, + "name": "6.0.1.355", + "slug": "6-0-1-355" + }, + { + "id": 4788, + "gameVersionTypeID": 3, + "name": "6.3.0.360", + "slug": "6-3-0-360" + }, + { + "id": 4789, + "gameVersionTypeID": 3, + "name": "6.3.0.361", + "slug": "6-3-0-361" + }, + { + "id": 4790, + "gameVersionTypeID": 3, + "name": "6.3.0.362", + "slug": "6-3-0-362" + }, + { + "id": 4791, + "gameVersionTypeID": 3, + "name": "6.3.0.363", + "slug": "6-3-0-363" + }, + { + "id": 4792, + "gameVersionTypeID": 3, + "name": "6.3.0.364", + "slug": "6-3-0-364" + }, + { + "id": 4793, + "gameVersionTypeID": 3, + "name": "6.3.0.365", + "slug": "6-3-0-365" + }, + { + "id": 4794, + "gameVersionTypeID": 3, + "name": "6.3.0.366", + "slug": "6-3-0-366" + }, + { + "id": 4795, + "gameVersionTypeID": 3, + "name": "6.3.0.367", + "slug": "6-3-0-367" + }, + { + "id": 4796, + "gameVersionTypeID": 3, + "name": "6.3.0.368", + "slug": "6-3-0-368" + }, + { + "id": 4797, + "gameVersionTypeID": 3, + "name": "6.3.0.369", + "slug": "6-3-0-369" + }, + { + "id": 4798, + "gameVersionTypeID": 3, + "name": "6.3.0.370", + "slug": "6-3-0-370" + }, + { + "id": 4799, + "gameVersionTypeID": 3, + "name": "6.3.0.371", + "slug": "6-3-0-371" + }, + { + "id": 4800, + "gameVersionTypeID": 3, + "name": "6.3.0.372", + "slug": "6-3-0-372" + }, + { + "id": 4801, + "gameVersionTypeID": 3, + "name": "6.3.0.373", + "slug": "6-3-0-373" + }, + { + "id": 4802, + "gameVersionTypeID": 3, + "name": "6.3.0.374", + "slug": "6-3-0-374" + }, + { + "id": 4803, + "gameVersionTypeID": 3, + "name": "6.3.0.375", + "slug": "6-3-0-375" + }, + { + "id": 4804, + "gameVersionTypeID": 3, + "name": "6.3.0.376", + "slug": "6-3-0-376" + }, + { + "id": 4805, + "gameVersionTypeID": 3, + "name": "6.3.0.377", + "slug": "6-3-0-377" + }, + { + "id": 4806, + "gameVersionTypeID": 3, + "name": "6.3.0.378", + "slug": "6-3-0-378" + }, + { + "id": 4807, + "gameVersionTypeID": 3, + "name": "6.4.0.379", + "slug": "6-4-0-379" + }, + { + "id": 4808, + "gameVersionTypeID": 3, + "name": "6.4.0.380", + "slug": "6-4-0-380" + }, + { + "id": 4809, + "gameVersionTypeID": 3, + "name": "6.4.0.381", + "slug": "6-4-0-381" + }, + { + "id": 4810, + "gameVersionTypeID": 3, + "name": "6.4.0.382", + "slug": "6-4-0-382" + }, + { + "id": 4811, + "gameVersionTypeID": 3, + "name": "6.4.0.383", + "slug": "6-4-0-383" + }, + { + "id": 4812, + "gameVersionTypeID": 3, + "name": "6.4.0.384", + "slug": "6-4-0-384" + }, + { + "id": 4813, + "gameVersionTypeID": 3, + "name": "6.4.0.385", + "slug": "6-4-0-385" + }, + { + "id": 4814, + "gameVersionTypeID": 3, + "name": "6.4.0.386", + "slug": "6-4-0-386" + }, + { + "id": 4815, + "gameVersionTypeID": 3, + "name": "6.4.0.387", + "slug": "6-4-0-387" + }, + { + "id": 4816, + "gameVersionTypeID": 3, + "name": "6.4.0.388", + "slug": "6-4-0-388" + }, + { + "id": 4817, + "gameVersionTypeID": 3, + "name": "6.4.0.390", + "slug": "6-4-0-390" + }, + { + "id": 4818, + "gameVersionTypeID": 3, + "name": "6.4.0.393", + "slug": "6-4-0-393" + }, + { + "id": 4819, + "gameVersionTypeID": 3, + "name": "6.4.0.394", + "slug": "6-4-0-394" + }, + { + "id": 4820, + "gameVersionTypeID": 3, + "name": "6.4.0.395", + "slug": "6-4-0-395" + }, + { + "id": 4821, + "gameVersionTypeID": 3, + "name": "6.4.0.396", + "slug": "6-4-0-396" + }, + { + "id": 4822, + "gameVersionTypeID": 3, + "name": "6.4.0.397", + "slug": "6-4-0-397" + }, + { + "id": 4823, + "gameVersionTypeID": 3, + "name": "6.4.0.398", + "slug": "6-4-0-398" + }, + { + "id": 4824, + "gameVersionTypeID": 3, + "name": "6.4.0.399", + "slug": "6-4-0-399" + }, + { + "id": 4825, + "gameVersionTypeID": 3, + "name": "6.4.1.400", + "slug": "6-4-1-400" + }, + { + "id": 4826, + "gameVersionTypeID": 3, + "name": "6.4.1.401", + "slug": "6-4-1-401" + }, + { + "id": 4827, + "gameVersionTypeID": 3, + "name": "6.4.1.402", + "slug": "6-4-1-402" + }, + { + "id": 4828, + "gameVersionTypeID": 3, + "name": "6.4.1.403", + "slug": "6-4-1-403" + }, + { + "id": 4829, + "gameVersionTypeID": 3, + "name": "6.4.1.404", + "slug": "6-4-1-404" + }, + { + "id": 4830, + "gameVersionTypeID": 3, + "name": "6.4.1.405", + "slug": "6-4-1-405" + }, + { + "id": 4831, + "gameVersionTypeID": 3, + "name": "6.4.1.406", + "slug": "6-4-1-406" + }, + { + "id": 4832, + "gameVersionTypeID": 3, + "name": "6.4.1.407", + "slug": "6-4-1-407" + }, + { + "id": 4833, + "gameVersionTypeID": 3, + "name": "6.4.1.408", + "slug": "6-4-1-408" + }, + { + "id": 4834, + "gameVersionTypeID": 3, + "name": "6.4.1.409", + "slug": "6-4-1-409" + }, + { + "id": 4835, + "gameVersionTypeID": 3, + "name": "6.4.1.410", + "slug": "6-4-1-410" + }, + { + "id": 4836, + "gameVersionTypeID": 3, + "name": "6.4.1.411", + "slug": "6-4-1-411" + }, + { + "id": 4837, + "gameVersionTypeID": 3, + "name": "6.4.1.413", + "slug": "6-4-1-413" + }, + { + "id": 4838, + "gameVersionTypeID": 3, + "name": "6.4.1.414", + "slug": "6-4-1-414" + }, + { + "id": 4839, + "gameVersionTypeID": 3, + "name": "6.4.1.416", + "slug": "6-4-1-416" + }, + { + "id": 4840, + "gameVersionTypeID": 3, + "name": "6.4.1.424", + "slug": "6-4-1-424" + }, + { + "id": 4841, + "gameVersionTypeID": 3, + "name": "6.4.1.425", + "slug": "6-4-1-425" + }, + { + "id": 4842, + "gameVersionTypeID": 3, + "name": "6.4.1.426", + "slug": "6-4-1-426" + }, + { + "id": 4843, + "gameVersionTypeID": 3, + "name": "6.4.1.428", + "slug": "6-4-1-428" + }, + { + "id": 4844, + "gameVersionTypeID": 3, + "name": "6.4.1.430", + "slug": "6-4-1-430" + }, + { + "id": 4845, + "gameVersionTypeID": 3, + "name": "6.4.1.432", + "slug": "6-4-1-432" + }, + { + "id": 4846, + "gameVersionTypeID": 3, + "name": "6.4.1.433", + "slug": "6-4-1-433" + }, + { + "id": 4847, + "gameVersionTypeID": 3, + "name": "6.4.1.434", + "slug": "6-4-1-434" + }, + { + "id": 4848, + "gameVersionTypeID": 3, + "name": "6.4.1.435", + "slug": "6-4-1-435" + }, + { + "id": 4849, + "gameVersionTypeID": 3, + "name": "6.4.1.436", + "slug": "6-4-1-436" + }, + { + "id": 4850, + "gameVersionTypeID": 3, + "name": "6.4.1.437", + "slug": "6-4-1-437" + }, + { + "id": 4851, + "gameVersionTypeID": 3, + "name": "6.4.1.438", + "slug": "6-4-1-438" + }, + { + "id": 4852, + "gameVersionTypeID": 3, + "name": "6.4.1.439", + "slug": "6-4-1-439" + }, + { + "id": 4853, + "gameVersionTypeID": 3, + "name": "6.4.1.441", + "slug": "6-4-1-441" + }, + { + "id": 4854, + "gameVersionTypeID": 3, + "name": "6.4.1.442", + "slug": "6-4-1-442" + }, + { + "id": 4855, + "gameVersionTypeID": 3, + "name": "6.4.2.443", + "slug": "6-4-2-443" + }, + { + "id": 4856, + "gameVersionTypeID": 3, + "name": "6.4.2.444", + "slug": "6-4-2-444" + }, + { + "id": 4857, + "gameVersionTypeID": 3, + "name": "6.4.2.445", + "slug": "6-4-2-445" + }, + { + "id": 4858, + "gameVersionTypeID": 3, + "name": "6.4.2.446", + "slug": "6-4-2-446" + }, + { + "id": 4859, + "gameVersionTypeID": 3, + "name": "6.4.2.447", + "slug": "6-4-2-447" + }, + { + "id": 4860, + "gameVersionTypeID": 3, + "name": "6.4.2.448", + "slug": "6-4-2-448" + }, + { + "id": 4861, + "gameVersionTypeID": 3, + "name": "6.5.0.451", + "slug": "6-5-0-451" + }, + { + "id": 4862, + "gameVersionTypeID": 3, + "name": "6.5.0.452", + "slug": "6-5-0-452" + }, + { + "id": 4863, + "gameVersionTypeID": 3, + "name": "6.5.0.453", + "slug": "6-5-0-453" + }, + { + "id": 4864, + "gameVersionTypeID": 3, + "name": "6.5.0.454", + "slug": "6-5-0-454" + }, + { + "id": 4865, + "gameVersionTypeID": 3, + "name": "6.5.0.455", + "slug": "6-5-0-455" + }, + { + "id": 4866, + "gameVersionTypeID": 3, + "name": "6.5.0.456", + "slug": "6-5-0-456" + }, + { + "id": 4867, + "gameVersionTypeID": 3, + "name": "6.5.0.457", + "slug": "6-5-0-457" + }, + { + "id": 4868, + "gameVersionTypeID": 3, + "name": "6.5.0.458", + "slug": "6-5-0-458" + }, + { + "id": 4869, + "gameVersionTypeID": 3, + "name": "6.5.0.459", + "slug": "6-5-0-459" + }, + { + "id": 4870, + "gameVersionTypeID": 3, + "name": "6.5.0.460", + "slug": "6-5-0-460" + }, + { + "id": 4871, + "gameVersionTypeID": 3, + "name": "6.5.0.461", + "slug": "6-5-0-461" + }, + { + "id": 4872, + "gameVersionTypeID": 3, + "name": "6.5.0.462", + "slug": "6-5-0-462" + }, + { + "id": 4873, + "gameVersionTypeID": 3, + "name": "6.5.0.463", + "slug": "6-5-0-463" + }, + { + "id": 4874, + "gameVersionTypeID": 3, + "name": "6.5.0.464", + "slug": "6-5-0-464" + }, + { + "id": 4875, + "gameVersionTypeID": 3, + "name": "6.5.0.465", + "slug": "6-5-0-465" + }, + { + "id": 4876, + "gameVersionTypeID": 3, + "name": "6.5.0.466", + "slug": "6-5-0-466" + }, + { + "id": 4877, + "gameVersionTypeID": 3, + "name": "6.5.0.467", + "slug": "6-5-0-467" + }, + { + "id": 4878, + "gameVersionTypeID": 3, + "name": "6.5.0.468", + "slug": "6-5-0-468" + }, + { + "id": 4879, + "gameVersionTypeID": 3, + "name": "6.5.0.469", + "slug": "6-5-0-469" + }, + { + "id": 4880, + "gameVersionTypeID": 3, + "name": "6.5.0.470", + "slug": "6-5-0-470" + }, + { + "id": 4881, + "gameVersionTypeID": 3, + "name": "6.5.0.471", + "slug": "6-5-0-471" + }, + { + "id": 4882, + "gameVersionTypeID": 3, + "name": "6.5.0.472", + "slug": "6-5-0-472" + }, + { + "id": 4883, + "gameVersionTypeID": 3, + "name": "6.5.0.473", + "slug": "6-5-0-473" + }, + { + "id": 4884, + "gameVersionTypeID": 3, + "name": "6.5.0.474", + "slug": "6-5-0-474" + }, + { + "id": 4885, + "gameVersionTypeID": 3, + "name": "6.5.0.475", + "slug": "6-5-0-475" + }, + { + "id": 4886, + "gameVersionTypeID": 3, + "name": "6.5.0.476", + "slug": "6-5-0-476" + }, + { + "id": 4887, + "gameVersionTypeID": 3, + "name": "6.5.0.477", + "slug": "6-5-0-477" + }, + { + "id": 4888, + "gameVersionTypeID": 3, + "name": "6.5.0.478", + "slug": "6-5-0-478" + }, + { + "id": 4889, + "gameVersionTypeID": 3, + "name": "6.5.0.479", + "slug": "6-5-0-479" + }, + { + "id": 4890, + "gameVersionTypeID": 3, + "name": "6.5.0.480", + "slug": "6-5-0-480" + }, + { + "id": 4891, + "gameVersionTypeID": 3, + "name": "6.5.0.481", + "slug": "6-5-0-481" + }, + { + "id": 4892, + "gameVersionTypeID": 3, + "name": "6.5.0.482", + "slug": "6-5-0-482" + }, + { + "id": 4893, + "gameVersionTypeID": 3, + "name": "6.5.0.483", + "slug": "6-5-0-483" + }, + { + "id": 4894, + "gameVersionTypeID": 3, + "name": "6.5.0.484", + "slug": "6-5-0-484" + }, + { + "id": 4895, + "gameVersionTypeID": 3, + "name": "6.5.0.486", + "slug": "6-5-0-486" + }, + { + "id": 4896, + "gameVersionTypeID": 3, + "name": "6.5.0.487", + "slug": "6-5-0-487" + }, + { + "id": 4897, + "gameVersionTypeID": 3, + "name": "6.5.0.488", + "slug": "6-5-0-488" + }, + { + "id": 4898, + "gameVersionTypeID": 3, + "name": "6.5.0.489", + "slug": "6-5-0-489" + }, + { + "id": 4899, + "gameVersionTypeID": 3, + "name": "6.6.0.490", + "slug": "6-6-0-490" + }, + { + "id": 4900, + "gameVersionTypeID": 3, + "name": "6.6.0.491", + "slug": "6-6-0-491" + }, + { + "id": 4901, + "gameVersionTypeID": 3, + "name": "6.6.0.492", + "slug": "6-6-0-492" + }, + { + "id": 4902, + "gameVersionTypeID": 3, + "name": "6.6.0.493", + "slug": "6-6-0-493" + }, + { + "id": 4903, + "gameVersionTypeID": 3, + "name": "6.6.0.494", + "slug": "6-6-0-494" + }, + { + "id": 4904, + "gameVersionTypeID": 3, + "name": "6.6.0.495", + "slug": "6-6-0-495" + }, + { + "id": 4905, + "gameVersionTypeID": 3, + "name": "6.6.0.496", + "slug": "6-6-0-496" + }, + { + "id": 4906, + "gameVersionTypeID": 3, + "name": "6.6.0.497", + "slug": "6-6-0-497" + }, + { + "id": 4907, + "gameVersionTypeID": 3, + "name": "6.6.0.499", + "slug": "6-6-0-499" + }, + { + "id": 4908, + "gameVersionTypeID": 3, + "name": "6.6.0.501", + "slug": "6-6-0-501" + }, + { + "id": 4909, + "gameVersionTypeID": 3, + "name": "6.6.0.502", + "slug": "6-6-0-502" + }, + { + "id": 4910, + "gameVersionTypeID": 3, + "name": "6.6.0.503", + "slug": "6-6-0-503" + }, + { + "id": 4911, + "gameVersionTypeID": 3, + "name": "6.6.0.504", + "slug": "6-6-0-504" + }, + { + "id": 4912, + "gameVersionTypeID": 3, + "name": "6.6.0.505", + "slug": "6-6-0-505" + }, + { + "id": 4913, + "gameVersionTypeID": 3, + "name": "6.6.0.506", + "slug": "6-6-0-506" + }, + { + "id": 4914, + "gameVersionTypeID": 3, + "name": "6.6.0.507", + "slug": "6-6-0-507" + }, + { + "id": 4915, + "gameVersionTypeID": 3, + "name": "6.6.0.509", + "slug": "6-6-0-509" + }, + { + "id": 4916, + "gameVersionTypeID": 3, + "name": "6.6.0.510", + "slug": "6-6-0-510" + }, + { + "id": 4917, + "gameVersionTypeID": 3, + "name": "6.6.0.511", + "slug": "6-6-0-511" + }, + { + "id": 4918, + "gameVersionTypeID": 3, + "name": "6.6.0.515", + "slug": "6-6-0-515" + }, + { + "id": 4919, + "gameVersionTypeID": 3, + "name": "6.6.0.516", + "slug": "6-6-0-516" + }, + { + "id": 4920, + "gameVersionTypeID": 3, + "name": "6.6.0.517", + "slug": "6-6-0-517" + }, + { + "id": 4921, + "gameVersionTypeID": 3, + "name": "6.6.0.518", + "slug": "6-6-0-518" + }, + { + "id": 4922, + "gameVersionTypeID": 3, + "name": "6.6.1.521", + "slug": "6-6-1-521" + }, + { + "id": 4923, + "gameVersionTypeID": 3, + "name": "6.6.1.522", + "slug": "6-6-1-522" + }, + { + "id": 4924, + "gameVersionTypeID": 3, + "name": "6.6.1.523", + "slug": "6-6-1-523" + }, + { + "id": 4925, + "gameVersionTypeID": 3, + "name": "6.6.1.524", + "slug": "6-6-1-524" + }, + { + "id": 4926, + "gameVersionTypeID": 3, + "name": "6.6.1.527", + "slug": "6-6-1-527" + }, + { + "id": 4927, + "gameVersionTypeID": 3, + "name": "6.6.1.528", + "slug": "6-6-1-528" + }, + { + "id": 4928, + "gameVersionTypeID": 3, + "name": "6.6.1.529", + "slug": "6-6-1-529" + }, + { + "id": 4929, + "gameVersionTypeID": 3, + "name": "6.6.1.530", + "slug": "6-6-1-530" + }, + { + "id": 4930, + "gameVersionTypeID": 3, + "name": "6.6.1.531", + "slug": "6-6-1-531" + }, + { + "id": 4931, + "gameVersionTypeID": 3, + "name": "6.6.1.532", + "slug": "6-6-1-532" + }, + { + "id": 4932, + "gameVersionTypeID": 3, + "name": "6.6.2.533", + "slug": "6-6-2-533" + }, + { + "id": 4933, + "gameVersionTypeID": 3, + "name": "6.6.2.534", + "slug": "6-6-2-534" + }, + { + "id": 4934, + "gameVersionTypeID": 3, + "name": "7.7.0.600", + "slug": "7-7-0-600" + }, + { + "id": 4935, + "gameVersionTypeID": 3, + "name": "7.7.0.601", + "slug": "7-7-0-601" + }, + { + "id": 4936, + "gameVersionTypeID": 3, + "name": "7.7.0.602", + "slug": "7-7-0-602" + }, + { + "id": 4937, + "gameVersionTypeID": 3, + "name": "7.7.0.603", + "slug": "7-7-0-603" + }, + { + "id": 4938, + "gameVersionTypeID": 3, + "name": "7.7.0.604", + "slug": "7-7-0-604" + }, + { + "id": 4939, + "gameVersionTypeID": 3, + "name": "7.7.0.605", + "slug": "7-7-0-605" + }, + { + "id": 4940, + "gameVersionTypeID": 3, + "name": "7.7.0.608", + "slug": "7-7-0-608" + }, + { + "id": 4941, + "gameVersionTypeID": 3, + "name": "7.7.0.609", + "slug": "7-7-0-609" + }, + { + "id": 4942, + "gameVersionTypeID": 3, + "name": "7.7.0.610", + "slug": "7-7-0-610" + }, + { + "id": 4943, + "gameVersionTypeID": 3, + "name": "7.7.1.611", + "slug": "7-7-1-611" + }, + { + "id": 4944, + "gameVersionTypeID": 3, + "name": "7.7.1.614", + "slug": "7-7-1-614" + }, + { + "id": 4945, + "gameVersionTypeID": 3, + "name": "7.7.1.615", + "slug": "7-7-1-615" + }, + { + "id": 4946, + "gameVersionTypeID": 3, + "name": "7.7.1.616", + "slug": "7-7-1-616" + }, + { + "id": 4947, + "gameVersionTypeID": 3, + "name": "7.7.1.617", + "slug": "7-7-1-617" + }, + { + "id": 4948, + "gameVersionTypeID": 3, + "name": "7.7.1.618", + "slug": "7-7-1-618" + }, + { + "id": 4949, + "gameVersionTypeID": 3, + "name": "7.7.1.620", + "slug": "7-7-1-620" + }, + { + "id": 4950, + "gameVersionTypeID": 3, + "name": "7.7.1.621", + "slug": "7-7-1-621" + }, + { + "id": 4951, + "gameVersionTypeID": 3, + "name": "7.7.1.622", + "slug": "7-7-1-622" + }, + { + "id": 4952, + "gameVersionTypeID": 3, + "name": "7.7.1.623", + "slug": "7-7-1-623" + }, + { + "id": 4953, + "gameVersionTypeID": 3, + "name": "7.7.1.624", + "slug": "7-7-1-624" + }, + { + "id": 4954, + "gameVersionTypeID": 3, + "name": "7.7.1.625", + "slug": "7-7-1-625" + }, + { + "id": 4955, + "gameVersionTypeID": 3, + "name": "7.7.1.627", + "slug": "7-7-1-627" + }, + { + "id": 4956, + "gameVersionTypeID": 3, + "name": "7.7.1.628", + "slug": "7-7-1-628" + }, + { + "id": 4957, + "gameVersionTypeID": 3, + "name": "7.7.1.629", + "slug": "7-7-1-629" + }, + { + "id": 4958, + "gameVersionTypeID": 3, + "name": "7.7.1.630", + "slug": "7-7-1-630" + }, + { + "id": 4959, + "gameVersionTypeID": 3, + "name": "7.7.1.631", + "slug": "7-7-1-631" + }, + { + "id": 4960, + "gameVersionTypeID": 3, + "name": "7.7.1.632", + "slug": "7-7-1-632" + }, + { + "id": 4961, + "gameVersionTypeID": 3, + "name": "7.7.1.633", + "slug": "7-7-1-633" + }, + { + "id": 4962, + "gameVersionTypeID": 3, + "name": "7.7.1.634", + "slug": "7-7-1-634" + }, + { + "id": 4963, + "gameVersionTypeID": 3, + "name": "7.7.1.635", + "slug": "7-7-1-635" + }, + { + "id": 4964, + "gameVersionTypeID": 3, + "name": "7.7.1.636", + "slug": "7-7-1-636" + }, + { + "id": 4965, + "gameVersionTypeID": 3, + "name": "7.7.1.637", + "slug": "7-7-1-637" + }, + { + "id": 4966, + "gameVersionTypeID": 3, + "name": "7.7.1.638", + "slug": "7-7-1-638" + }, + { + "id": 4967, + "gameVersionTypeID": 3, + "name": "7.7.1.639", + "slug": "7-7-1-639" + }, + { + "id": 4968, + "gameVersionTypeID": 3, + "name": "7.7.1.640", + "slug": "7-7-1-640" + }, + { + "id": 4969, + "gameVersionTypeID": 3, + "name": "7.7.1.642", + "slug": "7-7-1-642" + }, + { + "id": 4970, + "gameVersionTypeID": 3, + "name": "7.7.1.643", + "slug": "7-7-1-643" + }, + { + "id": 4971, + "gameVersionTypeID": 3, + "name": "7.7.1.644", + "slug": "7-7-1-644" + }, + { + "id": 4972, + "gameVersionTypeID": 3, + "name": "7.7.1.645", + "slug": "7-7-1-645" + }, + { + "id": 4973, + "gameVersionTypeID": 3, + "name": "7.7.1.646", + "slug": "7-7-1-646" + }, + { + "id": 4974, + "gameVersionTypeID": 3, + "name": "7.7.1.647", + "slug": "7-7-1-647" + }, + { + "id": 4975, + "gameVersionTypeID": 3, + "name": "7.7.1.648", + "slug": "7-7-1-648" + }, + { + "id": 4976, + "gameVersionTypeID": 3, + "name": "7.7.1.649", + "slug": "7-7-1-649" + }, + { + "id": 4977, + "gameVersionTypeID": 3, + "name": "7.7.1.650", + "slug": "7-7-1-650" + }, + { + "id": 4978, + "gameVersionTypeID": 3, + "name": "7.7.1.651", + "slug": "7-7-1-651" + }, + { + "id": 4979, + "gameVersionTypeID": 3, + "name": "7.7.1.652", + "slug": "7-7-1-652" + }, + { + "id": 4980, + "gameVersionTypeID": 3, + "name": "7.7.1.653", + "slug": "7-7-1-653" + }, + { + "id": 4981, + "gameVersionTypeID": 3, + "name": "7.7.1.654", + "slug": "7-7-1-654" + }, + { + "id": 4982, + "gameVersionTypeID": 3, + "name": "7.7.1.655", + "slug": "7-7-1-655" + }, + { + "id": 4983, + "gameVersionTypeID": 3, + "name": "7.7.1.656", + "slug": "7-7-1-656" + }, + { + "id": 4984, + "gameVersionTypeID": 3, + "name": "7.7.1.657", + "slug": "7-7-1-657" + }, + { + "id": 4985, + "gameVersionTypeID": 3, + "name": "7.7.1.659", + "slug": "7-7-1-659" + }, + { + "id": 4986, + "gameVersionTypeID": 3, + "name": "7.7.1.660", + "slug": "7-7-1-660" + }, + { + "id": 4987, + "gameVersionTypeID": 3, + "name": "7.7.1.661", + "slug": "7-7-1-661" + }, + { + "id": 4988, + "gameVersionTypeID": 3, + "name": "7.7.1.662", + "slug": "7-7-1-662" + }, + { + "id": 4989, + "gameVersionTypeID": 3, + "name": "7.7.1.663", + "slug": "7-7-1-663" + }, + { + "id": 4990, + "gameVersionTypeID": 3, + "name": "7.7.1.664", + "slug": "7-7-1-664" + }, + { + "id": 4991, + "gameVersionTypeID": 3, + "name": "7.7.1.665", + "slug": "7-7-1-665" + }, + { + "id": 4992, + "gameVersionTypeID": 3, + "name": "7.7.1.666", + "slug": "7-7-1-666" + }, + { + "id": 4993, + "gameVersionTypeID": 3, + "name": "7.7.1.667", + "slug": "7-7-1-667" + }, + { + "id": 4994, + "gameVersionTypeID": 3, + "name": "7.7.1.672", + "slug": "7-7-1-672" + }, + { + "id": 4995, + "gameVersionTypeID": 3, + "name": "7.7.1.673", + "slug": "7-7-1-673" + }, + { + "id": 4996, + "gameVersionTypeID": 3, + "name": "7.7.1.674", + "slug": "7-7-1-674" + }, + { + "id": 4997, + "gameVersionTypeID": 3, + "name": "7.7.1.675", + "slug": "7-7-1-675" + }, + { + "id": 4998, + "gameVersionTypeID": 3, + "name": "7.7.1.676", + "slug": "7-7-1-676" + }, + { + "id": 4999, + "gameVersionTypeID": 3, + "name": "7.7.2.678", + "slug": "7-7-2-678" + }, + { + "id": 5000, + "gameVersionTypeID": 3, + "name": "7.7.2.679", + "slug": "7-7-2-679" + }, + { + "id": 5001, + "gameVersionTypeID": 3, + "name": "7.7.2.682", + "slug": "7-7-2-682" + }, + { + "id": 5002, + "gameVersionTypeID": 3, + "name": "7.8.0.684", + "slug": "7-8-0-684" + }, + { + "id": 5003, + "gameVersionTypeID": 3, + "name": "7.8.0.685", + "slug": "7-8-0-685" + }, + { + "id": 5004, + "gameVersionTypeID": 3, + "name": "7.8.0.686", + "slug": "7-8-0-686" + }, + { + "id": 5005, + "gameVersionTypeID": 3, + "name": "7.8.0.687", + "slug": "7-8-0-687" + }, + { + "id": 5006, + "gameVersionTypeID": 3, + "name": "9.11.1.953", + "slug": "9-11-1-953" + }, + { + "id": 5007, + "gameVersionTypeID": 3, + "name": "9.11.1.952", + "slug": "9-11-1-952" + }, + { + "id": 5008, + "gameVersionTypeID": 3, + "name": "9.11.1.951", + "slug": "9-11-1-951" + }, + { + "id": 5009, + "gameVersionTypeID": 3, + "name": "9.11.1.949", + "slug": "9-11-1-949" + }, + { + "id": 5010, + "gameVersionTypeID": 3, + "name": "9.11.1.948", + "slug": "9-11-1-948" + }, + { + "id": 5011, + "gameVersionTypeID": 3, + "name": "9.11.1.947", + "slug": "9-11-1-947" + }, + { + "id": 5012, + "gameVersionTypeID": 3, + "name": "9.11.1.946", + "slug": "9-11-1-946" + }, + { + "id": 5013, + "gameVersionTypeID": 3, + "name": "9.11.1.945", + "slug": "9-11-1-945" + }, + { + "id": 5014, + "gameVersionTypeID": 3, + "name": "9.11.1.944", + "slug": "9-11-1-944" + }, + { + "id": 5015, + "gameVersionTypeID": 3, + "name": "9.11.1.943", + "slug": "9-11-1-943" + }, + { + "id": 5016, + "gameVersionTypeID": 3, + "name": "9.11.1.942", + "slug": "9-11-1-942" + }, + { + "id": 5017, + "gameVersionTypeID": 3, + "name": "9.11.1.941", + "slug": "9-11-1-941" + }, + { + "id": 5018, + "gameVersionTypeID": 3, + "name": "9.11.1.940", + "slug": "9-11-1-940" + }, + { + "id": 5019, + "gameVersionTypeID": 3, + "name": "9.11.1.939", + "slug": "9-11-1-939" + }, + { + "id": 5020, + "gameVersionTypeID": 3, + "name": "9.11.1.938", + "slug": "9-11-1-938" + }, + { + "id": 5021, + "gameVersionTypeID": 3, + "name": "9.11.1.937", + "slug": "9-11-1-937" + }, + { + "id": 5022, + "gameVersionTypeID": 3, + "name": "9.11.1.935", + "slug": "9-11-1-935" + }, + { + "id": 5023, + "gameVersionTypeID": 3, + "name": "9.11.1.934", + "slug": "9-11-1-934" + }, + { + "id": 5024, + "gameVersionTypeID": 3, + "name": "9.11.1.933", + "slug": "9-11-1-933" + }, + { + "id": 5025, + "gameVersionTypeID": 3, + "name": "9.11.1.931", + "slug": "9-11-1-931" + }, + { + "id": 5026, + "gameVersionTypeID": 3, + "name": "9.11.1.930", + "slug": "9-11-1-930" + }, + { + "id": 5027, + "gameVersionTypeID": 3, + "name": "9.11.1.928", + "slug": "9-11-1-928" + }, + { + "id": 5028, + "gameVersionTypeID": 3, + "name": "9.11.1.926", + "slug": "9-11-1-926" + }, + { + "id": 5029, + "gameVersionTypeID": 3, + "name": "9.11.1.925", + "slug": "9-11-1-925" + }, + { + "id": 5030, + "gameVersionTypeID": 3, + "name": "9.11.1.924", + "slug": "9-11-1-924" + }, + { + "id": 5031, + "gameVersionTypeID": 3, + "name": "9.11.1.923", + "slug": "9-11-1-923" + }, + { + "id": 5032, + "gameVersionTypeID": 3, + "name": "9.11.1.922", + "slug": "9-11-1-922" + }, + { + "id": 5033, + "gameVersionTypeID": 3, + "name": "9.11.1.921", + "slug": "9-11-1-921" + }, + { + "id": 5034, + "gameVersionTypeID": 3, + "name": "9.11.1.920", + "slug": "9-11-1-920" + }, + { + "id": 5035, + "gameVersionTypeID": 3, + "name": "9.11.1.919", + "slug": "9-11-1-919" + }, + { + "id": 5036, + "gameVersionTypeID": 3, + "name": "9.11.1.918", + "slug": "9-11-1-918" + }, + { + "id": 5037, + "gameVersionTypeID": 3, + "name": "9.11.1.917", + "slug": "9-11-1-917" + }, + { + "id": 5038, + "gameVersionTypeID": 3, + "name": "9.11.1.916", + "slug": "9-11-1-916" + }, + { + "id": 5039, + "gameVersionTypeID": 3, + "name": "9.11.1.915", + "slug": "9-11-1-915" + }, + { + "id": 5040, + "gameVersionTypeID": 3, + "name": "9.11.1.914", + "slug": "9-11-1-914" + }, + { + "id": 5041, + "gameVersionTypeID": 3, + "name": "9.11.0.913", + "slug": "9-11-0-913" + }, + { + "id": 5042, + "gameVersionTypeID": 3, + "name": "9.11.0.912", + "slug": "9-11-0-912" + }, + { + "id": 5043, + "gameVersionTypeID": 3, + "name": "9.11.0.911", + "slug": "9-11-0-911" + }, + { + "id": 5044, + "gameVersionTypeID": 3, + "name": "9.11.0.910", + "slug": "9-11-0-910" + }, + { + "id": 5045, + "gameVersionTypeID": 3, + "name": "9.11.0.909", + "slug": "9-11-0-909" + }, + { + "id": 5046, + "gameVersionTypeID": 3, + "name": "9.11.0.908", + "slug": "9-11-0-908" + }, + { + "id": 5047, + "gameVersionTypeID": 3, + "name": "9.11.0.907", + "slug": "9-11-0-907" + }, + { + "id": 5048, + "gameVersionTypeID": 3, + "name": "9.11.0.906", + "slug": "9-11-0-906" + }, + { + "id": 5049, + "gameVersionTypeID": 3, + "name": "9.11.0.905", + "slug": "9-11-0-905" + }, + { + "id": 5050, + "gameVersionTypeID": 3, + "name": "9.11.0.904", + "slug": "9-11-0-904" + }, + { + "id": 5051, + "gameVersionTypeID": 3, + "name": "9.11.0.903", + "slug": "9-11-0-903" + }, + { + "id": 5052, + "gameVersionTypeID": 3, + "name": "9.11.0.902", + "slug": "9-11-0-902" + }, + { + "id": 5053, + "gameVersionTypeID": 3, + "name": "9.11.0.901", + "slug": "9-11-0-901" + }, + { + "id": 5054, + "gameVersionTypeID": 3, + "name": "9.11.0.900", + "slug": "9-11-0-900" + }, + { + "id": 5055, + "gameVersionTypeID": 3, + "name": "9.11.0.899", + "slug": "9-11-0-899" + }, + { + "id": 5056, + "gameVersionTypeID": 3, + "name": "9.11.0.898", + "slug": "9-11-0-898" + }, + { + "id": 5057, + "gameVersionTypeID": 3, + "name": "9.11.0.897", + "slug": "9-11-0-897" + }, + { + "id": 5058, + "gameVersionTypeID": 3, + "name": "9.11.0.896", + "slug": "9-11-0-896" + }, + { + "id": 5059, + "gameVersionTypeID": 3, + "name": "9.11.0.895", + "slug": "9-11-0-895" + }, + { + "id": 5060, + "gameVersionTypeID": 3, + "name": "9.11.0.894", + "slug": "9-11-0-894" + }, + { + "id": 5061, + "gameVersionTypeID": 3, + "name": "9.11.0.893", + "slug": "9-11-0-893" + }, + { + "id": 5062, + "gameVersionTypeID": 3, + "name": "9.11.0.892", + "slug": "9-11-0-892" + }, + { + "id": 5063, + "gameVersionTypeID": 3, + "name": "9.11.0.891", + "slug": "9-11-0-891" + }, + { + "id": 5064, + "gameVersionTypeID": 3, + "name": "9.11.0.886", + "slug": "9-11-0-886" + }, + { + "id": 5065, + "gameVersionTypeID": 3, + "name": "9.11.0.885", + "slug": "9-11-0-885" + }, + { + "id": 5066, + "gameVersionTypeID": 3, + "name": "9.11.0.884", + "slug": "9-11-0-884" + }, + { + "id": 5067, + "gameVersionTypeID": 3, + "name": "9.11.0.883", + "slug": "9-11-0-883" + }, + { + "id": 5068, + "gameVersionTypeID": 3, + "name": "9.11.0.882", + "slug": "9-11-0-882" + }, + { + "id": 5069, + "gameVersionTypeID": 3, + "name": "9.11.0.881", + "slug": "9-11-0-881" + }, + { + "id": 5070, + "gameVersionTypeID": 3, + "name": "9.11.0.880", + "slug": "9-11-0-880" + }, + { + "id": 5071, + "gameVersionTypeID": 3, + "name": "9.11.0.879", + "slug": "9-11-0-879" + }, + { + "id": 5072, + "gameVersionTypeID": 3, + "name": "9.10.1.871", + "slug": "9-10-1-871" + }, + { + "id": 5073, + "gameVersionTypeID": 3, + "name": "9.10.1.870", + "slug": "9-10-1-870" + }, + { + "id": 5074, + "gameVersionTypeID": 3, + "name": "9.10.1.869", + "slug": "9-10-1-869" + }, + { + "id": 5075, + "gameVersionTypeID": 3, + "name": "9.10.1.867", + "slug": "9-10-1-867" + }, + { + "id": 5076, + "gameVersionTypeID": 3, + "name": "9.10.1.866", + "slug": "9-10-1-866" + }, + { + "id": 5077, + "gameVersionTypeID": 3, + "name": "9.10.1.865", + "slug": "9-10-1-865" + }, + { + "id": 5078, + "gameVersionTypeID": 3, + "name": "9.10.1.864", + "slug": "9-10-1-864" + }, + { + "id": 5079, + "gameVersionTypeID": 3, + "name": "9.10.1.863", + "slug": "9-10-1-863" + }, + { + "id": 5080, + "gameVersionTypeID": 3, + "name": "9.10.1.862", + "slug": "9-10-1-862" + }, + { + "id": 5081, + "gameVersionTypeID": 3, + "name": "9.10.1.861", + "slug": "9-10-1-861" + }, + { + "id": 5082, + "gameVersionTypeID": 3, + "name": "9.10.1.860", + "slug": "9-10-1-860" + }, + { + "id": 5083, + "gameVersionTypeID": 3, + "name": "9.10.1.859", + "slug": "9-10-1-859" + }, + { + "id": 5084, + "gameVersionTypeID": 3, + "name": "9.10.1.858", + "slug": "9-10-1-858" + }, + { + "id": 5085, + "gameVersionTypeID": 3, + "name": "9.10.1.857", + "slug": "9-10-1-857" + }, + { + "id": 5086, + "gameVersionTypeID": 3, + "name": "9.10.1.856", + "slug": "9-10-1-856" + }, + { + "id": 5087, + "gameVersionTypeID": 3, + "name": "9.10.1.855", + "slug": "9-10-1-855" + }, + { + "id": 5088, + "gameVersionTypeID": 3, + "name": "9.10.1.854", + "slug": "9-10-1-854" + }, + { + "id": 5089, + "gameVersionTypeID": 3, + "name": "9.10.1.853", + "slug": "9-10-1-853" + }, + { + "id": 5090, + "gameVersionTypeID": 3, + "name": "9.10.1.852", + "slug": "9-10-1-852" + }, + { + "id": 5091, + "gameVersionTypeID": 3, + "name": "9.10.1.851", + "slug": "9-10-1-851" + }, + { + "id": 5092, + "gameVersionTypeID": 3, + "name": "9.10.1.850", + "slug": "9-10-1-850" + }, + { + "id": 5093, + "gameVersionTypeID": 3, + "name": "9.10.1.849", + "slug": "9-10-1-849" + }, + { + "id": 5094, + "gameVersionTypeID": 3, + "name": "9.10.0.848", + "slug": "9-10-0-848" + }, + { + "id": 5095, + "gameVersionTypeID": 3, + "name": "9.10.0.847", + "slug": "9-10-0-847" + }, + { + "id": 5096, + "gameVersionTypeID": 3, + "name": "9.10.0.846", + "slug": "9-10-0-846" + }, + { + "id": 5097, + "gameVersionTypeID": 3, + "name": "9.10.0.845", + "slug": "9-10-0-845" + }, + { + "id": 5098, + "gameVersionTypeID": 3, + "name": "9.10.0.844", + "slug": "9-10-0-844" + }, + { + "id": 5099, + "gameVersionTypeID": 3, + "name": "9.10.0.843", + "slug": "9-10-0-843" + }, + { + "id": 5100, + "gameVersionTypeID": 3, + "name": "9.10.0.842", + "slug": "9-10-0-842" + }, + { + "id": 5101, + "gameVersionTypeID": 3, + "name": "9.10.0.841", + "slug": "9-10-0-841" + }, + { + "id": 5102, + "gameVersionTypeID": 3, + "name": "9.10.0.840", + "slug": "9-10-0-840" + }, + { + "id": 5103, + "gameVersionTypeID": 3, + "name": "9.10.0.839", + "slug": "9-10-0-839" + }, + { + "id": 5104, + "gameVersionTypeID": 3, + "name": "9.10.0.838", + "slug": "9-10-0-838" + }, + { + "id": 5105, + "gameVersionTypeID": 3, + "name": "9.10.0.837", + "slug": "9-10-0-837" + }, + { + "id": 5106, + "gameVersionTypeID": 3, + "name": "9.10.0.836", + "slug": "9-10-0-836" + }, + { + "id": 5107, + "gameVersionTypeID": 3, + "name": "9.10.0.835", + "slug": "9-10-0-835" + }, + { + "id": 5108, + "gameVersionTypeID": 3, + "name": "9.10.0.834", + "slug": "9-10-0-834" + }, + { + "id": 5109, + "gameVersionTypeID": 3, + "name": "9.10.0.833", + "slug": "9-10-0-833" + }, + { + "id": 5110, + "gameVersionTypeID": 3, + "name": "9.10.0.832", + "slug": "9-10-0-832" + }, + { + "id": 5111, + "gameVersionTypeID": 3, + "name": "9.10.0.831", + "slug": "9-10-0-831" + }, + { + "id": 5112, + "gameVersionTypeID": 3, + "name": "9.10.0.830", + "slug": "9-10-0-830" + }, + { + "id": 5113, + "gameVersionTypeID": 3, + "name": "9.10.0.829", + "slug": "9-10-0-829" + }, + { + "id": 5114, + "gameVersionTypeID": 3, + "name": "9.10.0.828", + "slug": "9-10-0-828" + }, + { + "id": 5115, + "gameVersionTypeID": 3, + "name": "9.10.0.827", + "slug": "9-10-0-827" + }, + { + "id": 5116, + "gameVersionTypeID": 3, + "name": "9.10.0.826", + "slug": "9-10-0-826" + }, + { + "id": 5117, + "gameVersionTypeID": 3, + "name": "9.10.0.825", + "slug": "9-10-0-825" + }, + { + "id": 5118, + "gameVersionTypeID": 3, + "name": "9.10.0.824", + "slug": "9-10-0-824" + }, + { + "id": 5119, + "gameVersionTypeID": 3, + "name": "9.10.0.823", + "slug": "9-10-0-823" + }, + { + "id": 5120, + "gameVersionTypeID": 3, + "name": "9.10.0.822", + "slug": "9-10-0-822" + }, + { + "id": 5121, + "gameVersionTypeID": 3, + "name": "9.10.0.821", + "slug": "9-10-0-821" + }, + { + "id": 5122, + "gameVersionTypeID": 3, + "name": "9.10.0.820", + "slug": "9-10-0-820" + }, + { + "id": 5123, + "gameVersionTypeID": 3, + "name": "9.10.0.819", + "slug": "9-10-0-819" + }, + { + "id": 5124, + "gameVersionTypeID": 3, + "name": "9.10.0.818", + "slug": "9-10-0-818" + }, + { + "id": 5125, + "gameVersionTypeID": 3, + "name": "9.10.0.817", + "slug": "9-10-0-817" + }, + { + "id": 5126, + "gameVersionTypeID": 3, + "name": "9.10.0.816", + "slug": "9-10-0-816" + }, + { + "id": 5127, + "gameVersionTypeID": 3, + "name": "9.10.0.804", + "slug": "9-10-0-804" + }, + { + "id": 5128, + "gameVersionTypeID": 3, + "name": "9.10.0.803", + "slug": "9-10-0-803" + }, + { + "id": 5129, + "gameVersionTypeID": 3, + "name": "9.10.0.802", + "slug": "9-10-0-802" + }, + { + "id": 5130, + "gameVersionTypeID": 3, + "name": "9.10.0.801", + "slug": "9-10-0-801" + }, + { + "id": 5131, + "gameVersionTypeID": 3, + "name": "9.10.0.800", + "slug": "9-10-0-800" + }, + { + "id": 5132, + "gameVersionTypeID": 3, + "name": "9.10.0.799", + "slug": "9-10-0-799" + }, + { + "id": 5133, + "gameVersionTypeID": 3, + "name": "9.10.0.798", + "slug": "9-10-0-798" + }, + { + "id": 5134, + "gameVersionTypeID": 3, + "name": "9.10.0.797", + "slug": "9-10-0-797" + }, + { + "id": 5135, + "gameVersionTypeID": 3, + "name": "9.10.0.796", + "slug": "9-10-0-796" + }, + { + "id": 5136, + "gameVersionTypeID": 3, + "name": "9.10.0.795", + "slug": "9-10-0-795" + }, + { + "id": 5137, + "gameVersionTypeID": 3, + "name": "9.10.0.794", + "slug": "9-10-0-794" + }, + { + "id": 5138, + "gameVersionTypeID": 3, + "name": "9.10.0.793", + "slug": "9-10-0-793" + }, + { + "id": 5139, + "gameVersionTypeID": 3, + "name": "9.10.0.792", + "slug": "9-10-0-792" + }, + { + "id": 5140, + "gameVersionTypeID": 3, + "name": "9.10.0.791", + "slug": "9-10-0-791" + }, + { + "id": 5141, + "gameVersionTypeID": 3, + "name": "9.10.0.790", + "slug": "9-10-0-790" + }, + { + "id": 5142, + "gameVersionTypeID": 3, + "name": "9.10.0.789", + "slug": "9-10-0-789" + }, + { + "id": 5143, + "gameVersionTypeID": 3, + "name": "9.10.0.787", + "slug": "9-10-0-787" + }, + { + "id": 5144, + "gameVersionTypeID": 3, + "name": "9.10.0.786", + "slug": "9-10-0-786" + }, + { + "id": 5145, + "gameVersionTypeID": 3, + "name": "9.10.0.785", + "slug": "9-10-0-785" + }, + { + "id": 5146, + "gameVersionTypeID": 3, + "name": "9.10.0.784", + "slug": "9-10-0-784" + }, + { + "id": 5147, + "gameVersionTypeID": 3, + "name": "9.10.0.781", + "slug": "9-10-0-781" + }, + { + "id": 5148, + "gameVersionTypeID": 3, + "name": "9.10.0.780", + "slug": "9-10-0-780" + }, + { + "id": 5149, + "gameVersionTypeID": 3, + "name": "9.10.0.779", + "slug": "9-10-0-779" + }, + { + "id": 5150, + "gameVersionTypeID": 3, + "name": "9.10.0.778", + "slug": "9-10-0-778" + }, + { + "id": 5151, + "gameVersionTypeID": 3, + "name": "9.10.0.777", + "slug": "9-10-0-777" + }, + { + "id": 5152, + "gameVersionTypeID": 3, + "name": "9.10.0.776", + "slug": "9-10-0-776" + }, + { + "id": 5153, + "gameVersionTypeID": 3, + "name": "8.9.0.775", + "slug": "8-9-0-775" + }, + { + "id": 5154, + "gameVersionTypeID": 3, + "name": "8.9.0.774", + "slug": "8-9-0-774" + }, + { + "id": 5155, + "gameVersionTypeID": 3, + "name": "8.9.0.773", + "slug": "8-9-0-773" + }, + { + "id": 5156, + "gameVersionTypeID": 3, + "name": "8.9.0.772", + "slug": "8-9-0-772" + }, + { + "id": 5157, + "gameVersionTypeID": 3, + "name": "8.9.0.771", + "slug": "8-9-0-771" + }, + { + "id": 5158, + "gameVersionTypeID": 3, + "name": "8.9.0.768", + "slug": "8-9-0-768" + }, + { + "id": 5159, + "gameVersionTypeID": 3, + "name": "8.9.0.767", + "slug": "8-9-0-767" + }, + { + "id": 5160, + "gameVersionTypeID": 3, + "name": "8.9.0.766", + "slug": "8-9-0-766" + }, + { + "id": 5161, + "gameVersionTypeID": 3, + "name": "8.9.0.765", + "slug": "8-9-0-765" + }, + { + "id": 5162, + "gameVersionTypeID": 3, + "name": "8.9.0.764", + "slug": "8-9-0-764" + }, + { + "id": 5163, + "gameVersionTypeID": 3, + "name": "8.9.0.763", + "slug": "8-9-0-763" + }, + { + "id": 5164, + "gameVersionTypeID": 3, + "name": "8.9.0.762", + "slug": "8-9-0-762" + }, + { + "id": 5165, + "gameVersionTypeID": 3, + "name": "8.9.0.761", + "slug": "8-9-0-761" + }, + { + "id": 5166, + "gameVersionTypeID": 3, + "name": "8.9.0.760", + "slug": "8-9-0-760" + }, + { + "id": 5167, + "gameVersionTypeID": 3, + "name": "8.9.0.759", + "slug": "8-9-0-759" + }, + { + "id": 5168, + "gameVersionTypeID": 3, + "name": "8.9.0.758", + "slug": "8-9-0-758" + }, + { + "id": 5169, + "gameVersionTypeID": 3, + "name": "8.9.0.757", + "slug": "8-9-0-757" + }, + { + "id": 5170, + "gameVersionTypeID": 3, + "name": "8.9.0.756", + "slug": "8-9-0-756" + }, + { + "id": 5171, + "gameVersionTypeID": 3, + "name": "8.9.0.755", + "slug": "8-9-0-755" + }, + { + "id": 5172, + "gameVersionTypeID": 3, + "name": "8.9.0.753", + "slug": "8-9-0-753" + }, + { + "id": 5173, + "gameVersionTypeID": 3, + "name": "8.9.0.751", + "slug": "8-9-0-751" + }, + { + "id": 5174, + "gameVersionTypeID": 3, + "name": "8.9.0.749", + "slug": "8-9-0-749" + }, + { + "id": 5175, + "gameVersionTypeID": 3, + "name": "7.8.1.738", + "slug": "7-8-1-738" + }, + { + "id": 5176, + "gameVersionTypeID": 3, + "name": "7.8.1.737", + "slug": "7-8-1-737" + }, + { + "id": 5177, + "gameVersionTypeID": 3, + "name": "7.8.0.736", + "slug": "7-8-0-736" + }, + { + "id": 5178, + "gameVersionTypeID": 3, + "name": "7.8.0.735", + "slug": "7-8-0-735" + }, + { + "id": 5179, + "gameVersionTypeID": 3, + "name": "7.8.0.734", + "slug": "7-8-0-734" + }, + { + "id": 5180, + "gameVersionTypeID": 3, + "name": "7.8.0.733", + "slug": "7-8-0-733" + }, + { + "id": 5181, + "gameVersionTypeID": 3, + "name": "7.8.0.732", + "slug": "7-8-0-732" + }, + { + "id": 5182, + "gameVersionTypeID": 3, + "name": "7.8.0.731", + "slug": "7-8-0-731" + }, + { + "id": 5183, + "gameVersionTypeID": 3, + "name": "7.8.0.730", + "slug": "7-8-0-730" + }, + { + "id": 5184, + "gameVersionTypeID": 3, + "name": "7.8.0.729", + "slug": "7-8-0-729" + }, + { + "id": 5185, + "gameVersionTypeID": 3, + "name": "7.8.0.728", + "slug": "7-8-0-728" + }, + { + "id": 5186, + "gameVersionTypeID": 3, + "name": "7.8.0.727", + "slug": "7-8-0-727" + }, + { + "id": 5187, + "gameVersionTypeID": 3, + "name": "7.8.0.726", + "slug": "7-8-0-726" + }, + { + "id": 5188, + "gameVersionTypeID": 3, + "name": "7.8.0.725", + "slug": "7-8-0-725" + }, + { + "id": 5189, + "gameVersionTypeID": 3, + "name": "7.8.0.723", + "slug": "7-8-0-723" + }, + { + "id": 5190, + "gameVersionTypeID": 3, + "name": "7.8.0.722", + "slug": "7-8-0-722" + }, + { + "id": 5191, + "gameVersionTypeID": 3, + "name": "7.8.0.721", + "slug": "7-8-0-721" + }, + { + "id": 5192, + "gameVersionTypeID": 3, + "name": "7.8.0.720", + "slug": "7-8-0-720" + }, + { + "id": 5193, + "gameVersionTypeID": 3, + "name": "7.8.0.719", + "slug": "7-8-0-719" + }, + { + "id": 5194, + "gameVersionTypeID": 3, + "name": "7.8.0.716", + "slug": "7-8-0-716" + }, + { + "id": 5195, + "gameVersionTypeID": 3, + "name": "7.8.0.715", + "slug": "7-8-0-715" + }, + { + "id": 5196, + "gameVersionTypeID": 3, + "name": "7.8.0.713", + "slug": "7-8-0-713" + }, + { + "id": 5197, + "gameVersionTypeID": 3, + "name": "7.8.0.712", + "slug": "7-8-0-712" + }, + { + "id": 5198, + "gameVersionTypeID": 3, + "name": "7.8.0.711", + "slug": "7-8-0-711" + }, + { + "id": 5199, + "gameVersionTypeID": 3, + "name": "7.8.0.710", + "slug": "7-8-0-710" + }, + { + "id": 5200, + "gameVersionTypeID": 3, + "name": "7.8.0.708", + "slug": "7-8-0-708" + }, + { + "id": 5201, + "gameVersionTypeID": 3, + "name": "7.8.0.707", + "slug": "7-8-0-707" + }, + { + "id": 5202, + "gameVersionTypeID": 3, + "name": "7.8.0.706", + "slug": "7-8-0-706" + }, + { + "id": 5203, + "gameVersionTypeID": 3, + "name": "7.8.0.705", + "slug": "7-8-0-705" + }, + { + "id": 5204, + "gameVersionTypeID": 3, + "name": "7.8.0.704", + "slug": "7-8-0-704" + }, + { + "id": 5205, + "gameVersionTypeID": 3, + "name": "7.8.0.703", + "slug": "7-8-0-703" + }, + { + "id": 5206, + "gameVersionTypeID": 3, + "name": "7.8.0.702", + "slug": "7-8-0-702" + }, + { + "id": 5207, + "gameVersionTypeID": 3, + "name": "7.8.0.701", + "slug": "7-8-0-701" + }, + { + "id": 5208, + "gameVersionTypeID": 3, + "name": "7.8.0.700", + "slug": "7-8-0-700" + }, + { + "id": 5209, + "gameVersionTypeID": 3, + "name": "7.8.0.699", + "slug": "7-8-0-699" + }, + { + "id": 5210, + "gameVersionTypeID": 3, + "name": "7.8.0.698", + "slug": "7-8-0-698" + }, + { + "id": 5211, + "gameVersionTypeID": 3, + "name": "7.8.0.697", + "slug": "7-8-0-697" + }, + { + "id": 5212, + "gameVersionTypeID": 3, + "name": "7.8.0.696", + "slug": "7-8-0-696" + }, + { + "id": 5213, + "gameVersionTypeID": 3, + "name": "7.8.0.695", + "slug": "7-8-0-695" + }, + { + "id": 5214, + "gameVersionTypeID": 3, + "name": "7.8.0.694", + "slug": "7-8-0-694" + }, + { + "id": 5215, + "gameVersionTypeID": 3, + "name": "7.8.0.693", + "slug": "7-8-0-693" + }, + { + "id": 5216, + "gameVersionTypeID": 3, + "name": "7.8.0.692", + "slug": "7-8-0-692" + }, + { + "id": 5217, + "gameVersionTypeID": 3, + "name": "7.8.0.691", + "slug": "7-8-0-691" + }, + { + "id": 5218, + "gameVersionTypeID": 3, + "name": "7.8.0.690", + "slug": "7-8-0-690" + }, + { + "id": 5219, + "gameVersionTypeID": 3, + "name": "7.8.0.689", + "slug": "7-8-0-689" + }, + { + "id": 5220, + "gameVersionTypeID": 3, + "name": "7.8.0.688", + "slug": "7-8-0-688" + }, + { + "id": 5221, + "gameVersionTypeID": 3, + "name": "9.11.1.965", + "slug": "9-11-1-965" + }, + { + "id": 5222, + "gameVersionTypeID": 3, + "name": "10.12.0.967", + "slug": "10-12-0-967" + }, + { + "id": 5223, + "gameVersionTypeID": 3, + "name": "10.12.0.968", + "slug": "10-12-0-968" + }, + { + "id": 5224, + "gameVersionTypeID": 3, + "name": "10.12.0.969", + "slug": "10-12-0-969" + }, + { + "id": 5225, + "gameVersionTypeID": 3, + "name": "10.12.0.970", + "slug": "10-12-0-970" + }, + { + "id": 5226, + "gameVersionTypeID": 3, + "name": "10.12.0.971", + "slug": "10-12-0-971" + }, + { + "id": 5227, + "gameVersionTypeID": 3, + "name": "10.12.0.972", + "slug": "10-12-0-972" + }, + { + "id": 5228, + "gameVersionTypeID": 3, + "name": "10.12.0.973", + "slug": "10-12-0-973" + }, + { + "id": 5229, + "gameVersionTypeID": 3, + "name": "10.12.0.974", + "slug": "10-12-0-974" + }, + { + "id": 5230, + "gameVersionTypeID": 3, + "name": "10.12.0.975", + "slug": "10-12-0-975" + }, + { + "id": 5231, + "gameVersionTypeID": 3, + "name": "10.12.0.976", + "slug": "10-12-0-976" + }, + { + "id": 5232, + "gameVersionTypeID": 3, + "name": "10.12.0.977", + "slug": "10-12-0-977" + }, + { + "id": 5233, + "gameVersionTypeID": 3, + "name": "10.12.0.979", + "slug": "10-12-0-979" + }, + { + "id": 5234, + "gameVersionTypeID": 3, + "name": "10.12.0.980", + "slug": "10-12-0-980" + }, + { + "id": 5235, + "gameVersionTypeID": 3, + "name": "10.12.0.981", + "slug": "10-12-0-981" + }, + { + "id": 5236, + "gameVersionTypeID": 3, + "name": "10.12.0.982", + "slug": "10-12-0-982" + }, + { + "id": 5237, + "gameVersionTypeID": 3, + "name": "10.12.0.984", + "slug": "10-12-0-984" + }, + { + "id": 5238, + "gameVersionTypeID": 3, + "name": "10.12.0.985", + "slug": "10-12-0-985" + }, + { + "id": 5239, + "gameVersionTypeID": 3, + "name": "10.12.0.986", + "slug": "10-12-0-986" + }, + { + "id": 5240, + "gameVersionTypeID": 3, + "name": "10.12.0.987", + "slug": "10-12-0-987" + }, + { + "id": 5241, + "gameVersionTypeID": 3, + "name": "10.12.0.989", + "slug": "10-12-0-989" + }, + { + "id": 5242, + "gameVersionTypeID": 3, + "name": "10.12.0.990", + "slug": "10-12-0-990" + }, + { + "id": 5243, + "gameVersionTypeID": 3, + "name": "10.12.0.991", + "slug": "10-12-0-991" + }, + { + "id": 5244, + "gameVersionTypeID": 3, + "name": "10.12.0.993", + "slug": "10-12-0-993" + }, + { + "id": 5245, + "gameVersionTypeID": 3, + "name": "10.12.0.994", + "slug": "10-12-0-994" + }, + { + "id": 5246, + "gameVersionTypeID": 3, + "name": "10.12.0.995", + "slug": "10-12-0-995" + }, + { + "id": 5247, + "gameVersionTypeID": 3, + "name": "10.12.0.996", + "slug": "10-12-0-996" + }, + { + "id": 5248, + "gameVersionTypeID": 3, + "name": "10.12.0.997", + "slug": "10-12-0-997" + }, + { + "id": 5249, + "gameVersionTypeID": 3, + "name": "10.12.0.998", + "slug": "10-12-0-998" + }, + { + "id": 5250, + "gameVersionTypeID": 3, + "name": "10.12.0.999", + "slug": "10-12-0-999" + }, + { + "id": 5251, + "gameVersionTypeID": 3, + "name": "10.12.0.1000", + "slug": "10-12-0-1000" + }, + { + "id": 5252, + "gameVersionTypeID": 3, + "name": "10.12.0.1001", + "slug": "10-12-0-1001" + }, + { + "id": 5253, + "gameVersionTypeID": 3, + "name": "10.12.0.1002", + "slug": "10-12-0-1002" + }, + { + "id": 5254, + "gameVersionTypeID": 3, + "name": "10.12.0.1003", + "slug": "10-12-0-1003" + }, + { + "id": 5255, + "gameVersionTypeID": 3, + "name": "10.12.0.1004", + "slug": "10-12-0-1004" + }, + { + "id": 5256, + "gameVersionTypeID": 3, + "name": "10.12.0.1005", + "slug": "10-12-0-1005" + }, + { + "id": 5257, + "gameVersionTypeID": 3, + "name": "10.12.0.1006", + "slug": "10-12-0-1006" + }, + { + "id": 5258, + "gameVersionTypeID": 3, + "name": "10.12.0.1007", + "slug": "10-12-0-1007" + }, + { + "id": 5259, + "gameVersionTypeID": 3, + "name": "10.12.0.1008", + "slug": "10-12-0-1008" + }, + { + "id": 5260, + "gameVersionTypeID": 3, + "name": "10.12.0.1009", + "slug": "10-12-0-1009" + }, + { + "id": 5261, + "gameVersionTypeID": 3, + "name": "10.12.0.1010", + "slug": "10-12-0-1010" + }, + { + "id": 5262, + "gameVersionTypeID": 3, + "name": "10.12.0.1011", + "slug": "10-12-0-1011" + }, + { + "id": 5263, + "gameVersionTypeID": 3, + "name": "10.12.0.1012", + "slug": "10-12-0-1012" + }, + { + "id": 5264, + "gameVersionTypeID": 3, + "name": "10.12.0.1013", + "slug": "10-12-0-1013" + }, + { + "id": 5265, + "gameVersionTypeID": 3, + "name": "10.12.0.1014", + "slug": "10-12-0-1014" + }, + { + "id": 5266, + "gameVersionTypeID": 3, + "name": "10.12.0.1015", + "slug": "10-12-0-1015" + }, + { + "id": 5267, + "gameVersionTypeID": 3, + "name": "10.12.0.1016", + "slug": "10-12-0-1016" + }, + { + "id": 5268, + "gameVersionTypeID": 3, + "name": "10.12.0.1017", + "slug": "10-12-0-1017" + }, + { + "id": 5269, + "gameVersionTypeID": 3, + "name": "10.12.0.1018", + "slug": "10-12-0-1018" + }, + { + "id": 5270, + "gameVersionTypeID": 3, + "name": "10.12.0.1019", + "slug": "10-12-0-1019" + }, + { + "id": 5271, + "gameVersionTypeID": 3, + "name": "10.12.0.1020", + "slug": "10-12-0-1020" + }, + { + "id": 5272, + "gameVersionTypeID": 3, + "name": "10.12.0.1021", + "slug": "10-12-0-1021" + }, + { + "id": 5273, + "gameVersionTypeID": 3, + "name": "10.12.0.1022", + "slug": "10-12-0-1022" + }, + { + "id": 5274, + "gameVersionTypeID": 3, + "name": "10.12.0.1023", + "slug": "10-12-0-1023" + }, + { + "id": 5275, + "gameVersionTypeID": 3, + "name": "10.12.0.1024", + "slug": "10-12-0-1024" + }, + { + "id": 5276, + "gameVersionTypeID": 3, + "name": "10.12.0.1025", + "slug": "10-12-0-1025" + }, + { + "id": 5277, + "gameVersionTypeID": 3, + "name": "10.12.0.1026", + "slug": "10-12-0-1026" + }, + { + "id": 5278, + "gameVersionTypeID": 3, + "name": "10.12.0.1027", + "slug": "10-12-0-1027" + }, + { + "id": 5279, + "gameVersionTypeID": 3, + "name": "10.12.0.1028", + "slug": "10-12-0-1028" + }, + { + "id": 5280, + "gameVersionTypeID": 3, + "name": "10.12.0.1029", + "slug": "10-12-0-1029" + }, + { + "id": 5281, + "gameVersionTypeID": 3, + "name": "10.12.0.1030", + "slug": "10-12-0-1030" + }, + { + "id": 5282, + "gameVersionTypeID": 3, + "name": "10.12.0.1031", + "slug": "10-12-0-1031" + }, + { + "id": 5283, + "gameVersionTypeID": 3, + "name": "10.12.0.1032", + "slug": "10-12-0-1032" + }, + { + "id": 5284, + "gameVersionTypeID": 3, + "name": "10.12.0.1033", + "slug": "10-12-0-1033" + }, + { + "id": 5285, + "gameVersionTypeID": 3, + "name": "10.12.0.1034", + "slug": "10-12-0-1034" + }, + { + "id": 5286, + "gameVersionTypeID": 3, + "name": "10.12.0.1039", + "slug": "10-12-0-1039" + }, + { + "id": 5287, + "gameVersionTypeID": 3, + "name": "10.12.0.1040", + "slug": "10-12-0-1040" + }, + { + "id": 5288, + "gameVersionTypeID": 3, + "name": "10.12.0.1041", + "slug": "10-12-0-1041" + }, + { + "id": 5289, + "gameVersionTypeID": 3, + "name": "10.12.0.1042", + "slug": "10-12-0-1042" + }, + { + "id": 5290, + "gameVersionTypeID": 3, + "name": "10.12.0.1043", + "slug": "10-12-0-1043" + }, + { + "id": 5291, + "gameVersionTypeID": 3, + "name": "10.12.0.1044", + "slug": "10-12-0-1044" + }, + { + "id": 5292, + "gameVersionTypeID": 3, + "name": "10.12.0.1045", + "slug": "10-12-0-1045" + }, + { + "id": 5293, + "gameVersionTypeID": 3, + "name": "10.12.0.1046", + "slug": "10-12-0-1046" + }, + { + "id": 5294, + "gameVersionTypeID": 3, + "name": "10.12.0.1047", + "slug": "10-12-0-1047" + }, + { + "id": 5295, + "gameVersionTypeID": 3, + "name": "10.12.0.1048", + "slug": "10-12-0-1048" + }, + { + "id": 5296, + "gameVersionTypeID": 3, + "name": "10.12.0.1049", + "slug": "10-12-0-1049" + }, + { + "id": 5297, + "gameVersionTypeID": 3, + "name": "10.12.0.1050", + "slug": "10-12-0-1050" + }, + { + "id": 5298, + "gameVersionTypeID": 3, + "name": "10.12.0.1051", + "slug": "10-12-0-1051" + }, + { + "id": 5299, + "gameVersionTypeID": 3, + "name": "10.12.0.1052", + "slug": "10-12-0-1052" + }, + { + "id": 5300, + "gameVersionTypeID": 3, + "name": "10.12.0.1053", + "slug": "10-12-0-1053" + }, + { + "id": 5301, + "gameVersionTypeID": 3, + "name": "10.12.0.1054", + "slug": "10-12-0-1054" + }, + { + "id": 5302, + "gameVersionTypeID": 3, + "name": "10.12.0.1055", + "slug": "10-12-0-1055" + }, + { + "id": 5303, + "gameVersionTypeID": 3, + "name": "10.12.0.1056", + "slug": "10-12-0-1056" + }, + { + "id": 5304, + "gameVersionTypeID": 3, + "name": "10.12.0.1057", + "slug": "10-12-0-1057" + }, + { + "id": 5305, + "gameVersionTypeID": 3, + "name": "10.12.0.1059", + "slug": "10-12-0-1059" + }, + { + "id": 5306, + "gameVersionTypeID": 3, + "name": "10.12.1.1060", + "slug": "10-12-1-1060" + }, + { + "id": 5307, + "gameVersionTypeID": 3, + "name": "10.12.1.1061", + "slug": "10-12-1-1061" + }, + { + "id": 5308, + "gameVersionTypeID": 3, + "name": "10.12.1.1063", + "slug": "10-12-1-1063" + }, + { + "id": 5309, + "gameVersionTypeID": 3, + "name": "10.12.1.1065", + "slug": "10-12-1-1065" + }, + { + "id": 5310, + "gameVersionTypeID": 3, + "name": "10.12.1.1066", + "slug": "10-12-1-1066" + }, + { + "id": 5311, + "gameVersionTypeID": 3, + "name": "10.12.1.1067", + "slug": "10-12-1-1067" + }, + { + "id": 5312, + "gameVersionTypeID": 3, + "name": "10.12.1.1068", + "slug": "10-12-1-1068" + }, + { + "id": 5313, + "gameVersionTypeID": 3, + "name": "10.12.1.1069", + "slug": "10-12-1-1069" + }, + { + "id": 5314, + "gameVersionTypeID": 3, + "name": "10.12.1.1070", + "slug": "10-12-1-1070" + }, + { + "id": 5315, + "gameVersionTypeID": 3, + "name": "10.12.1.1071", + "slug": "10-12-1-1071" + }, + { + "id": 5316, + "gameVersionTypeID": 3, + "name": "10.12.1.1072", + "slug": "10-12-1-1072" + }, + { + "id": 5317, + "gameVersionTypeID": 3, + "name": "10.12.1.1073", + "slug": "10-12-1-1073" + }, + { + "id": 5318, + "gameVersionTypeID": 3, + "name": "10.12.1.1074", + "slug": "10-12-1-1074" + }, + { + "id": 5319, + "gameVersionTypeID": 3, + "name": "10.12.1.1075", + "slug": "10-12-1-1075" + }, + { + "id": 5320, + "gameVersionTypeID": 3, + "name": "10.12.1.1076", + "slug": "10-12-1-1076" + }, + { + "id": 5321, + "gameVersionTypeID": 3, + "name": "10.12.1.1077", + "slug": "10-12-1-1077" + }, + { + "id": 5322, + "gameVersionTypeID": 3, + "name": "10.12.1.1078", + "slug": "10-12-1-1078" + }, + { + "id": 5323, + "gameVersionTypeID": 3, + "name": "10.12.1.1079", + "slug": "10-12-1-1079" + }, + { + "id": 5324, + "gameVersionTypeID": 3, + "name": "10.12.1.1080", + "slug": "10-12-1-1080" + }, + { + "id": 5325, + "gameVersionTypeID": 3, + "name": "10.12.1.1081", + "slug": "10-12-1-1081" + }, + { + "id": 5326, + "gameVersionTypeID": 3, + "name": "10.12.1.1082", + "slug": "10-12-1-1082" + }, + { + "id": 5327, + "gameVersionTypeID": 3, + "name": "10.12.1.1083", + "slug": "10-12-1-1083" + }, + { + "id": 5328, + "gameVersionTypeID": 3, + "name": "10.12.1.1084", + "slug": "10-12-1-1084" + }, + { + "id": 5329, + "gameVersionTypeID": 3, + "name": "10.12.1.1085", + "slug": "10-12-1-1085" + }, + { + "id": 5330, + "gameVersionTypeID": 3, + "name": "10.12.1.1087", + "slug": "10-12-1-1087" + }, + { + "id": 5331, + "gameVersionTypeID": 3, + "name": "10.12.1.1088", + "slug": "10-12-1-1088" + }, + { + "id": 5332, + "gameVersionTypeID": 3, + "name": "10.12.1.1090", + "slug": "10-12-1-1090" + }, + { + "id": 5333, + "gameVersionTypeID": 3, + "name": "10.12.1.1091", + "slug": "10-12-1-1091" + }, + { + "id": 5334, + "gameVersionTypeID": 3, + "name": "10.12.1.1092", + "slug": "10-12-1-1092" + }, + { + "id": 5335, + "gameVersionTypeID": 3, + "name": "10.12.1.1093", + "slug": "10-12-1-1093" + }, + { + "id": 5336, + "gameVersionTypeID": 3, + "name": "10.12.1.1094", + "slug": "10-12-1-1094" + }, + { + "id": 5337, + "gameVersionTypeID": 3, + "name": "10.12.1.1095", + "slug": "10-12-1-1095" + }, + { + "id": 5338, + "gameVersionTypeID": 3, + "name": "10.12.1.1096", + "slug": "10-12-1-1096" + }, + { + "id": 5339, + "gameVersionTypeID": 3, + "name": "10.12.1.1097", + "slug": "10-12-1-1097" + }, + { + "id": 5340, + "gameVersionTypeID": 3, + "name": "10.12.1.1098", + "slug": "10-12-1-1098" + }, + { + "id": 5341, + "gameVersionTypeID": 3, + "name": "10.12.1.1099", + "slug": "10-12-1-1099" + }, + { + "id": 5342, + "gameVersionTypeID": 3, + "name": "10.12.1.1100", + "slug": "10-12-1-1100" + }, + { + "id": 5343, + "gameVersionTypeID": 3, + "name": "10.12.1.1101", + "slug": "10-12-1-1101" + }, + { + "id": 5344, + "gameVersionTypeID": 3, + "name": "10.12.1.1103", + "slug": "10-12-1-1103" + }, + { + "id": 5345, + "gameVersionTypeID": 3, + "name": "10.12.1.1104", + "slug": "10-12-1-1104" + }, + { + "id": 5346, + "gameVersionTypeID": 3, + "name": "10.12.1.1105", + "slug": "10-12-1-1105" + }, + { + "id": 5347, + "gameVersionTypeID": 3, + "name": "10.12.1.1106", + "slug": "10-12-1-1106" + }, + { + "id": 5348, + "gameVersionTypeID": 3, + "name": "10.12.1.1107", + "slug": "10-12-1-1107" + }, + { + "id": 5349, + "gameVersionTypeID": 3, + "name": "10.12.1.1108", + "slug": "10-12-1-1108" + }, + { + "id": 5350, + "gameVersionTypeID": 3, + "name": "10.12.1.1109", + "slug": "10-12-1-1109" + }, + { + "id": 5351, + "gameVersionTypeID": 3, + "name": "10.12.1.1110", + "slug": "10-12-1-1110" + }, + { + "id": 5352, + "gameVersionTypeID": 3, + "name": "10.12.1.1111", + "slug": "10-12-1-1111" + }, + { + "id": 5353, + "gameVersionTypeID": 3, + "name": "10.12.1.1112", + "slug": "10-12-1-1112" + }, + { + "id": 5354, + "gameVersionTypeID": 3, + "name": "10.12.1.1113", + "slug": "10-12-1-1113" + }, + { + "id": 5355, + "gameVersionTypeID": 3, + "name": "10.12.1.1114", + "slug": "10-12-1-1114" + }, + { + "id": 5356, + "gameVersionTypeID": 3, + "name": "10.12.1.1115", + "slug": "10-12-1-1115" + }, + { + "id": 5357, + "gameVersionTypeID": 3, + "name": "10.12.1.1116", + "slug": "10-12-1-1116" + }, + { + "id": 5358, + "gameVersionTypeID": 3, + "name": "10.12.1.1117", + "slug": "10-12-1-1117" + }, + { + "id": 5359, + "gameVersionTypeID": 3, + "name": "10.12.1.1119", + "slug": "10-12-1-1119" + }, + { + "id": 5360, + "gameVersionTypeID": 3, + "name": "10.12.1.1120", + "slug": "10-12-1-1120" + }, + { + "id": 5361, + "gameVersionTypeID": 3, + "name": "10.12.2.1121", + "slug": "10-12-2-1121" + }, + { + "id": 5362, + "gameVersionTypeID": 3, + "name": "10.12.2.1122", + "slug": "10-12-2-1122" + }, + { + "id": 5363, + "gameVersionTypeID": 3, + "name": "10.12.2.1123", + "slug": "10-12-2-1123" + }, + { + "id": 5364, + "gameVersionTypeID": 3, + "name": "10.12.2.1124", + "slug": "10-12-2-1124" + }, + { + "id": 5365, + "gameVersionTypeID": 3, + "name": "10.12.2.1125", + "slug": "10-12-2-1125" + }, + { + "id": 5366, + "gameVersionTypeID": 3, + "name": "10.12.2.1126", + "slug": "10-12-2-1126" + }, + { + "id": 5367, + "gameVersionTypeID": 3, + "name": "10.12.2.1127", + "slug": "10-12-2-1127" + }, + { + "id": 5368, + "gameVersionTypeID": 3, + "name": "10.12.2.1128", + "slug": "10-12-2-1128" + }, + { + "id": 5369, + "gameVersionTypeID": 3, + "name": "10.12.2.1129", + "slug": "10-12-2-1129" + }, + { + "id": 5370, + "gameVersionTypeID": 3, + "name": "10.12.2.1130", + "slug": "10-12-2-1130" + }, + { + "id": 5371, + "gameVersionTypeID": 3, + "name": "10.12.2.1131", + "slug": "10-12-2-1131" + }, + { + "id": 5372, + "gameVersionTypeID": 3, + "name": "10.12.2.1132", + "slug": "10-12-2-1132" + }, + { + "id": 5373, + "gameVersionTypeID": 3, + "name": "10.12.2.1133", + "slug": "10-12-2-1133" + }, + { + "id": 5374, + "gameVersionTypeID": 3, + "name": "10.12.2.1145", + "slug": "10-12-2-1145" + }, + { + "id": 5375, + "gameVersionTypeID": 3, + "name": "10.12.2.1147", + "slug": "10-12-2-1147" + }, + { + "id": 5376, + "gameVersionTypeID": 3, + "name": "10.13.0.1150", + "slug": "10-13-0-1150" + }, + { + "id": 5377, + "gameVersionTypeID": 3, + "name": "10.13.0.1151", + "slug": "10-13-0-1151" + }, + { + "id": 5378, + "gameVersionTypeID": 3, + "name": "10.13.0.1152", + "slug": "10-13-0-1152" + }, + { + "id": 5379, + "gameVersionTypeID": 3, + "name": "10.13.0.1153", + "slug": "10-13-0-1153" + }, + { + "id": 5380, + "gameVersionTypeID": 3, + "name": "10.12.2.1154", + "slug": "10-12-2-1154" + }, + { + "id": 5381, + "gameVersionTypeID": 3, + "name": "10.12.2.1155", + "slug": "10-12-2-1155" + }, + { + "id": 5382, + "gameVersionTypeID": 3, + "name": "10.13.0.1156", + "slug": "10-13-0-1156" + }, + { + "id": 5383, + "gameVersionTypeID": 3, + "name": "10.13.0.1157", + "slug": "10-13-0-1157" + }, + { + "id": 5384, + "gameVersionTypeID": 3, + "name": "10.13.0.1158", + "slug": "10-13-0-1158" + }, + { + "id": 5385, + "gameVersionTypeID": 3, + "name": "10.13.0.1159", + "slug": "10-13-0-1159" + }, + { + "id": 5386, + "gameVersionTypeID": 3, + "name": "10.13.0.1160", + "slug": "10-13-0-1160" + }, + { + "id": 5387, + "gameVersionTypeID": 3, + "name": "10.12.2.1161", + "slug": "10-12-2-1161" + }, + { + "id": 5388, + "gameVersionTypeID": 3, + "name": "10.13.0.1162", + "slug": "10-13-0-1162" + }, + { + "id": 5389, + "gameVersionTypeID": 3, + "name": "10.13.0.1166", + "slug": "10-13-0-1166" + }, + { + "id": 5390, + "gameVersionTypeID": 3, + "name": "10.13.0.1167", + "slug": "10-13-0-1167" + }, + { + "id": 5391, + "gameVersionTypeID": 3, + "name": "10.13.0.1168", + "slug": "10-13-0-1168" + }, + { + "id": 5392, + "gameVersionTypeID": 3, + "name": "10.13.0.1169", + "slug": "10-13-0-1169" + }, + { + "id": 5393, + "gameVersionTypeID": 3, + "name": "10.13.0.1170", + "slug": "10-13-0-1170" + }, + { + "id": 5394, + "gameVersionTypeID": 3, + "name": "10.13.0.1171", + "slug": "10-13-0-1171" + }, + { + "id": 5395, + "gameVersionTypeID": 3, + "name": "10.13.0.1172", + "slug": "10-13-0-1172" + }, + { + "id": 5396, + "gameVersionTypeID": 3, + "name": "10.13.0.1174", + "slug": "10-13-0-1174" + }, + { + "id": 5397, + "gameVersionTypeID": 3, + "name": "10.13.0.1175", + "slug": "10-13-0-1175" + }, + { + "id": 5398, + "gameVersionTypeID": 3, + "name": "10.13.0.1176", + "slug": "10-13-0-1176" + }, + { + "id": 5399, + "gameVersionTypeID": 3, + "name": "10.13.0.1177", + "slug": "10-13-0-1177" + }, + { + "id": 5400, + "gameVersionTypeID": 3, + "name": "10.13.0.1178", + "slug": "10-13-0-1178" + }, + { + "id": 5401, + "gameVersionTypeID": 3, + "name": "10.13.0.1179", + "slug": "10-13-0-1179" + }, + { + "id": 5402, + "gameVersionTypeID": 3, + "name": "10.13.0.1181", + "slug": "10-13-0-1181" + }, + { + "id": 5403, + "gameVersionTypeID": 3, + "name": "10.13.0.1182", + "slug": "10-13-0-1182" + }, + { + "id": 5404, + "gameVersionTypeID": 3, + "name": "10.13.0.1183", + "slug": "10-13-0-1183" + }, + { + "id": 5405, + "gameVersionTypeID": 3, + "name": "10.13.0.1185", + "slug": "10-13-0-1185" + }, + { + "id": 5406, + "gameVersionTypeID": 3, + "name": "10.13.0.1186", + "slug": "10-13-0-1186" + }, + { + "id": 5407, + "gameVersionTypeID": 3, + "name": "10.13.0.1187", + "slug": "10-13-0-1187" + }, + { + "id": 5408, + "gameVersionTypeID": 3, + "name": "10.13.0.1188", + "slug": "10-13-0-1188" + }, + { + "id": 5409, + "gameVersionTypeID": 3, + "name": "10.13.0.1189", + "slug": "10-13-0-1189" + }, + { + "id": 5410, + "gameVersionTypeID": 3, + "name": "10.13.0.1190", + "slug": "10-13-0-1190" + }, + { + "id": 5411, + "gameVersionTypeID": 3, + "name": "10.13.0.1191", + "slug": "10-13-0-1191" + }, + { + "id": 5412, + "gameVersionTypeID": 3, + "name": "10.13.0.1194", + "slug": "10-13-0-1194" + }, + { + "id": 5413, + "gameVersionTypeID": 3, + "name": "10.13.0.1195", + "slug": "10-13-0-1195" + }, + { + "id": 5414, + "gameVersionTypeID": 3, + "name": "10.13.0.1198", + "slug": "10-13-0-1198" + }, + { + "id": 5415, + "gameVersionTypeID": 3, + "name": "10.13.0.1199", + "slug": "10-13-0-1199" + }, + { + "id": 5416, + "gameVersionTypeID": 3, + "name": "10.13.0.1200", + "slug": "10-13-0-1200" + }, + { + "id": 5417, + "gameVersionTypeID": 3, + "name": "10.13.0.1201", + "slug": "10-13-0-1201" + }, + { + "id": 5418, + "gameVersionTypeID": 3, + "name": "10.13.0.1202", + "slug": "10-13-0-1202" + }, + { + "id": 5419, + "gameVersionTypeID": 3, + "name": "10.13.0.1203", + "slug": "10-13-0-1203" + }, + { + "id": 5420, + "gameVersionTypeID": 3, + "name": "10.13.0.1205", + "slug": "10-13-0-1205" + }, + { + "id": 5421, + "gameVersionTypeID": 3, + "name": "10.13.0.1206", + "slug": "10-13-0-1206" + }, + { + "id": 5422, + "gameVersionTypeID": 3, + "name": "10.13.0.1207", + "slug": "10-13-0-1207" + }, + { + "id": 5423, + "gameVersionTypeID": 3, + "name": "10.13.0.1208", + "slug": "10-13-0-1208" + }, + { + "id": 5424, + "gameVersionTypeID": 3, + "name": "10.13.1.1210", + "slug": "10-13-1-1210" + }, + { + "id": 5425, + "gameVersionTypeID": 3, + "name": "10.13.1.1211", + "slug": "10-13-1-1211" + }, + { + "id": 5426, + "gameVersionTypeID": 3, + "name": "10.13.1.1212", + "slug": "10-13-1-1212" + }, + { + "id": 5427, + "gameVersionTypeID": 3, + "name": "10.13.1.1213", + "slug": "10-13-1-1213" + }, + { + "id": 5428, + "gameVersionTypeID": 3, + "name": "10.13.1.1214", + "slug": "10-13-1-1214" + }, + { + "id": 5429, + "gameVersionTypeID": 3, + "name": "10.13.1.1215", + "slug": "10-13-1-1215" + }, + { + "id": 5430, + "gameVersionTypeID": 3, + "name": "10.13.1.1216", + "slug": "10-13-1-1216" + }, + { + "id": 5431, + "gameVersionTypeID": 3, + "name": "10.13.1.1217", + "slug": "10-13-1-1217" + }, + { + "id": 5432, + "gameVersionTypeID": 3, + "name": "10.13.1.1219", + "slug": "10-13-1-1219" + }, + { + "id": 5433, + "gameVersionTypeID": 3, + "name": "10.13.1.1220", + "slug": "10-13-1-1220" + }, + { + "id": 5434, + "gameVersionTypeID": 3, + "name": "10.13.1.1221", + "slug": "10-13-1-1221" + }, + { + "id": 5435, + "gameVersionTypeID": 3, + "name": "10.13.1.1222", + "slug": "10-13-1-1222" + }, + { + "id": 5436, + "gameVersionTypeID": 3, + "name": "10.13.1.1223", + "slug": "10-13-1-1223" + }, + { + "id": 5437, + "gameVersionTypeID": 3, + "name": "10.13.1.1224", + "slug": "10-13-1-1224" + }, + { + "id": 5438, + "gameVersionTypeID": 3, + "name": "10.13.1.1225", + "slug": "10-13-1-1225" + }, + { + "id": 5439, + "gameVersionTypeID": 3, + "name": "10.13.1.1226", + "slug": "10-13-1-1226" + }, + { + "id": 5440, + "gameVersionTypeID": 3, + "name": "10.13.1.1229", + "slug": "10-13-1-1229" + }, + { + "id": 5441, + "gameVersionTypeID": 3, + "name": "10.13.2.1230", + "slug": "10-13-2-1230" + }, + { + "id": 5442, + "gameVersionTypeID": 3, + "name": "10.13.2.1232", + "slug": "10-13-2-1232" + }, + { + "id": 5443, + "gameVersionTypeID": 3, + "name": "10.13.2.1233", + "slug": "10-13-2-1233" + }, + { + "id": 5444, + "gameVersionTypeID": 3, + "name": "10.13.2.1234", + "slug": "10-13-2-1234" + }, + { + "id": 5445, + "gameVersionTypeID": 3, + "name": "10.13.2.1235", + "slug": "10-13-2-1235" + }, + { + "id": 5446, + "gameVersionTypeID": 3, + "name": "10.13.2.1236", + "slug": "10-13-2-1236" + }, + { + "id": 5447, + "gameVersionTypeID": 3, + "name": "11.14.0.1237", + "slug": "11-14-0-1237" + }, + { + "id": 5448, + "gameVersionTypeID": 3, + "name": "11.14.0.1238", + "slug": "11-14-0-1238" + }, + { + "id": 5449, + "gameVersionTypeID": 3, + "name": "11.14.0.1239", + "slug": "11-14-0-1239" + }, + { + "id": 5450, + "gameVersionTypeID": 3, + "name": "10.13.2.1240", + "slug": "10-13-2-1240" + }, + { + "id": 5451, + "gameVersionTypeID": 3, + "name": "11.14.0.1241", + "slug": "11-14-0-1241" + }, + { + "id": 5452, + "gameVersionTypeID": 3, + "name": "11.14.0.1242", + "slug": "11-14-0-1242" + }, + { + "id": 5453, + "gameVersionTypeID": 3, + "name": "11.14.0.1243", + "slug": "11-14-0-1243" + }, + { + "id": 5454, + "gameVersionTypeID": 3, + "name": "11.14.0.1244", + "slug": "11-14-0-1244" + }, + { + "id": 5455, + "gameVersionTypeID": 3, + "name": "11.14.0.1245", + "slug": "11-14-0-1245" + }, + { + "id": 5456, + "gameVersionTypeID": 3, + "name": "11.14.0.1246", + "slug": "11-14-0-1246" + }, + { + "id": 5457, + "gameVersionTypeID": 3, + "name": "11.14.0.1247", + "slug": "11-14-0-1247" + }, + { + "id": 5458, + "gameVersionTypeID": 3, + "name": "11.14.0.1248", + "slug": "11-14-0-1248" + }, + { + "id": 5459, + "gameVersionTypeID": 3, + "name": "11.14.0.1249", + "slug": "11-14-0-1249" + }, + { + "id": 5460, + "gameVersionTypeID": 3, + "name": "11.14.0.1251", + "slug": "11-14-0-1251" + }, + { + "id": 5461, + "gameVersionTypeID": 3, + "name": "11.14.0.1252", + "slug": "11-14-0-1252" + }, + { + "id": 5462, + "gameVersionTypeID": 3, + "name": "10.13.2.1253", + "slug": "10-13-2-1253" + }, + { + "id": 5463, + "gameVersionTypeID": 3, + "name": "10.13.2.1254", + "slug": "10-13-2-1254" + }, + { + "id": 5464, + "gameVersionTypeID": 3, + "name": "11.14.0.1255", + "slug": "11-14-0-1255" + }, + { + "id": 5465, + "gameVersionTypeID": 3, + "name": "10.13.2.1256", + "slug": "10-13-2-1256" + }, + { + "id": 5466, + "gameVersionTypeID": 3, + "name": "11.14.0.1257", + "slug": "11-14-0-1257" + }, + { + "id": 5467, + "gameVersionTypeID": 3, + "name": "10.13.2.1258", + "slug": "10-13-2-1258" + }, + { + "id": 5468, + "gameVersionTypeID": 3, + "name": "11.14.0.1259", + "slug": "11-14-0-1259" + }, + { + "id": 5469, + "gameVersionTypeID": 3, + "name": "11.14.0.1260", + "slug": "11-14-0-1260" + }, + { + "id": 5470, + "gameVersionTypeID": 3, + "name": "11.14.0.1261", + "slug": "11-14-0-1261" + }, + { + "id": 5471, + "gameVersionTypeID": 3, + "name": "11.14.0.1262", + "slug": "11-14-0-1262" + }, + { + "id": 5472, + "gameVersionTypeID": 3, + "name": "10.13.2.1263", + "slug": "10-13-2-1263" + }, + { + "id": 5473, + "gameVersionTypeID": 3, + "name": "10.13.2.1264", + "slug": "10-13-2-1264" + }, + { + "id": 5474, + "gameVersionTypeID": 3, + "name": "11.14.0.1266", + "slug": "11-14-0-1266" + }, + { + "id": 5475, + "gameVersionTypeID": 3, + "name": "11.14.0.1267", + "slug": "11-14-0-1267" + }, + { + "id": 5476, + "gameVersionTypeID": 3, + "name": "11.14.0.1268", + "slug": "11-14-0-1268" + }, + { + "id": 5477, + "gameVersionTypeID": 3, + "name": "11.14.0.1269", + "slug": "11-14-0-1269" + }, + { + "id": 5478, + "gameVersionTypeID": 3, + "name": "10.13.2.1270", + "slug": "10-13-2-1270" + }, + { + "id": 5479, + "gameVersionTypeID": 3, + "name": "11.14.0.1271", + "slug": "11-14-0-1271" + }, + { + "id": 5480, + "gameVersionTypeID": 3, + "name": "10.13.2.1272", + "slug": "10-13-2-1272" + }, + { + "id": 5481, + "gameVersionTypeID": 3, + "name": "11.14.0.1273", + "slug": "11-14-0-1273" + }, + { + "id": 5482, + "gameVersionTypeID": 3, + "name": "11.14.0.1274", + "slug": "11-14-0-1274" + }, + { + "id": 5483, + "gameVersionTypeID": 3, + "name": "10.13.2.1276", + "slug": "10-13-2-1276" + }, + { + "id": 5484, + "gameVersionTypeID": 3, + "name": "10.13.2.1277", + "slug": "10-13-2-1277" + }, + { + "id": 5485, + "gameVersionTypeID": 3, + "name": "11.14.0.1278", + "slug": "11-14-0-1278" + }, + { + "id": 5486, + "gameVersionTypeID": 3, + "name": "11.14.0.1279", + "slug": "11-14-0-1279" + }, + { + "id": 5487, + "gameVersionTypeID": 3, + "name": "11.14.0.1280", + "slug": "11-14-0-1280" + }, + { + "id": 5488, + "gameVersionTypeID": 3, + "name": "11.14.0.1281", + "slug": "11-14-0-1281" + }, + { + "id": 5489, + "gameVersionTypeID": 3, + "name": "10.13.2.1283", + "slug": "10-13-2-1283" + }, + { + "id": 5490, + "gameVersionTypeID": 3, + "name": "10.13.2.1284", + "slug": "10-13-2-1284" + }, + { + "id": 5491, + "gameVersionTypeID": 3, + "name": "11.14.0.1285", + "slug": "11-14-0-1285" + }, + { + "id": 5492, + "gameVersionTypeID": 3, + "name": "10.13.2.1286", + "slug": "10-13-2-1286" + }, + { + "id": 5493, + "gameVersionTypeID": 3, + "name": "11.14.0.1287", + "slug": "11-14-0-1287" + }, + { + "id": 5494, + "gameVersionTypeID": 3, + "name": "11.14.0.1288", + "slug": "11-14-0-1288" + }, + { + "id": 5495, + "gameVersionTypeID": 3, + "name": "11.14.0.1289", + "slug": "11-14-0-1289" + }, + { + "id": 5496, + "gameVersionTypeID": 3, + "name": "11.14.0.1290", + "slug": "11-14-0-1290" + }, + { + "id": 5497, + "gameVersionTypeID": 3, + "name": "10.13.2.1291", + "slug": "10-13-2-1291" + }, + { + "id": 5498, + "gameVersionTypeID": 3, + "name": "11.14.0.1292", + "slug": "11-14-0-1292" + }, + { + "id": 5499, + "gameVersionTypeID": 3, + "name": "11.14.0.1293", + "slug": "11-14-0-1293" + }, + { + "id": 5500, + "gameVersionTypeID": 3, + "name": "11.14.0.1294", + "slug": "11-14-0-1294" + }, + { + "id": 5501, + "gameVersionTypeID": 3, + "name": "11.14.0.1295", + "slug": "11-14-0-1295" + }, + { + "id": 5502, + "gameVersionTypeID": 3, + "name": "11.14.0.1296", + "slug": "11-14-0-1296" + }, + { + "id": 5503, + "gameVersionTypeID": 3, + "name": "11.14.0.1297", + "slug": "11-14-0-1297" + }, + { + "id": 5504, + "gameVersionTypeID": 3, + "name": "11.14.0.1298", + "slug": "11-14-0-1298" + }, + { + "id": 5505, + "gameVersionTypeID": 3, + "name": "11.14.0.1299", + "slug": "11-14-0-1299" + }, + { + "id": 5506, + "gameVersionTypeID": 3, + "name": "10.13.2.1300", + "slug": "10-13-2-1300" + }, + { + "id": 5507, + "gameVersionTypeID": 3, + "name": "11.14.1.1301", + "slug": "11-14-1-1301" + }, + { + "id": 5508, + "gameVersionTypeID": 3, + "name": "11.14.1.1302", + "slug": "11-14-1-1302" + }, + { + "id": 5509, + "gameVersionTypeID": 3, + "name": "11.14.1.1303", + "slug": "11-14-1-1303" + }, + { + "id": 5510, + "gameVersionTypeID": 3, + "name": "11.14.1.1305", + "slug": "11-14-1-1305" + }, + { + "id": 5511, + "gameVersionTypeID": 3, + "name": "11.14.1.1306", + "slug": "11-14-1-1306" + }, + { + "id": 5512, + "gameVersionTypeID": 3, + "name": "10.13.2.1307", + "slug": "10-13-2-1307" + }, + { + "id": 5513, + "gameVersionTypeID": 3, + "name": "11.14.1.1308", + "slug": "11-14-1-1308" + }, + { + "id": 5514, + "gameVersionTypeID": 3, + "name": "11.14.1.1309", + "slug": "11-14-1-1309" + }, + { + "id": 5515, + "gameVersionTypeID": 3, + "name": "11.14.1.1311", + "slug": "11-14-1-1311" + }, + { + "id": 5516, + "gameVersionTypeID": 3, + "name": "11.14.1.1312", + "slug": "11-14-1-1312" + }, + { + "id": 5517, + "gameVersionTypeID": 3, + "name": "11.14.1.1313", + "slug": "11-14-1-1313" + }, + { + "id": 5518, + "gameVersionTypeID": 3, + "name": "11.14.1.1314", + "slug": "11-14-1-1314" + }, + { + "id": 5519, + "gameVersionTypeID": 3, + "name": "11.14.1.1315", + "slug": "11-14-1-1315" + }, + { + "id": 5520, + "gameVersionTypeID": 3, + "name": "11.14.1.1316", + "slug": "11-14-1-1316" + }, + { + "id": 5521, + "gameVersionTypeID": 3, + "name": "11.14.1.1317", + "slug": "11-14-1-1317" + }, + { + "id": 5522, + "gameVersionTypeID": 3, + "name": "11.14.1.1318", + "slug": "11-14-1-1318" + }, + { + "id": 5523, + "gameVersionTypeID": 3, + "name": "11.14.1.1319", + "slug": "11-14-1-1319" + }, + { + "id": 5524, + "gameVersionTypeID": 3, + "name": "11.14.1.1320", + "slug": "11-14-1-1320" + }, + { + "id": 5525, + "gameVersionTypeID": 3, + "name": "11.14.1.1321", + "slug": "11-14-1-1321" + }, + { + "id": 5526, + "gameVersionTypeID": 3, + "name": "11.14.1.1322", + "slug": "11-14-1-1322" + }, + { + "id": 5527, + "gameVersionTypeID": 3, + "name": "11.14.1.1323", + "slug": "11-14-1-1323" + }, + { + "id": 5528, + "gameVersionTypeID": 3, + "name": "11.14.1.1324", + "slug": "11-14-1-1324" + }, + { + "id": 5529, + "gameVersionTypeID": 3, + "name": "11.14.1.1325", + "slug": "11-14-1-1325" + }, + { + "id": 5530, + "gameVersionTypeID": 3, + "name": "11.14.1.1326", + "slug": "11-14-1-1326" + }, + { + "id": 5531, + "gameVersionTypeID": 3, + "name": "11.14.1.1327", + "slug": "11-14-1-1327" + }, + { + "id": 5532, + "gameVersionTypeID": 3, + "name": "11.14.1.1328", + "slug": "11-14-1-1328" + }, + { + "id": 5533, + "gameVersionTypeID": 3, + "name": "11.14.1.1329", + "slug": "11-14-1-1329" + }, + { + "id": 5534, + "gameVersionTypeID": 3, + "name": "11.14.1.1332", + "slug": "11-14-1-1332" + }, + { + "id": 5535, + "gameVersionTypeID": 3, + "name": "11.14.1.1333", + "slug": "11-14-1-1333" + }, + { + "id": 5536, + "gameVersionTypeID": 3, + "name": "11.14.1.1334", + "slug": "11-14-1-1334" + }, + { + "id": 5537, + "gameVersionTypeID": 3, + "name": "11.14.1.1335", + "slug": "11-14-1-1335" + }, + { + "id": 5538, + "gameVersionTypeID": 3, + "name": "11.14.1.1336", + "slug": "11-14-1-1336" + }, + { + "id": 5539, + "gameVersionTypeID": 3, + "name": "11.14.1.1337", + "slug": "11-14-1-1337" + }, + { + "id": 5540, + "gameVersionTypeID": 3, + "name": "11.14.1.1338", + "slug": "11-14-1-1338" + }, + { + "id": 5541, + "gameVersionTypeID": 3, + "name": "11.14.1.1339", + "slug": "11-14-1-1339" + }, + { + "id": 5542, + "gameVersionTypeID": 3, + "name": "10.13.2.1340", + "slug": "10-13-2-1340" + }, + { + "id": 5543, + "gameVersionTypeID": 3, + "name": "11.14.1.1341", + "slug": "11-14-1-1341" + }, + { + "id": 5544, + "gameVersionTypeID": 3, + "name": "10.13.2.1342", + "slug": "10-13-2-1342" + }, + { + "id": 5545, + "gameVersionTypeID": 3, + "name": "10.13.2.1343", + "slug": "10-13-2-1343" + }, + { + "id": 5546, + "gameVersionTypeID": 3, + "name": "9.11.1.1345", + "slug": "9-11-1-1345" + }, + { + "id": 5547, + "gameVersionTypeID": 3, + "name": "10.13.2.1347", + "slug": "10-13-2-1347" + }, + { + "id": 5548, + "gameVersionTypeID": 3, + "name": "11.14.1.1349", + "slug": "11-14-1-1349" + }, + { + "id": 5549, + "gameVersionTypeID": 3, + "name": "11.14.1.1350", + "slug": "11-14-1-1350" + }, + { + "id": 5550, + "gameVersionTypeID": 3, + "name": "10.13.2.1351", + "slug": "10-13-2-1351" + }, + { + "id": 5551, + "gameVersionTypeID": 3, + "name": "10.13.2.1352", + "slug": "10-13-2-1352" + }, + { + "id": 5552, + "gameVersionTypeID": 3, + "name": "11.14.1.1353", + "slug": "11-14-1-1353" + }, + { + "id": 5553, + "gameVersionTypeID": 3, + "name": "11.14.1.1354", + "slug": "11-14-1-1354" + }, + { + "id": 5554, + "gameVersionTypeID": 3, + "name": "10.13.3.1355", + "slug": "10-13-3-1355" + }, + { + "id": 5555, + "gameVersionTypeID": 3, + "name": "10.13.3.1356", + "slug": "10-13-3-1356" + }, + { + "id": 5556, + "gameVersionTypeID": 3, + "name": "11.14.1.1357", + "slug": "11-14-1-1357" + }, + { + "id": 5557, + "gameVersionTypeID": 3, + "name": "10.13.3.1358", + "slug": "10-13-3-1358" + }, + { + "id": 5558, + "gameVersionTypeID": 3, + "name": "11.14.1.1359", + "slug": "11-14-1-1359" + }, + { + "id": 5559, + "gameVersionTypeID": 3, + "name": "10.13.3.1360", + "slug": "10-13-3-1360" + }, + { + "id": 5560, + "gameVersionTypeID": 3, + "name": "11.14.1.1361", + "slug": "11-14-1-1361" + }, + { + "id": 5561, + "gameVersionTypeID": 3, + "name": "10.13.3.1362", + "slug": "10-13-3-1362" + }, + { + "id": 5562, + "gameVersionTypeID": 3, + "name": "10.13.3.1363", + "slug": "10-13-3-1363" + }, + { + "id": 5563, + "gameVersionTypeID": 3, + "name": "10.13.3.1364", + "slug": "10-13-3-1364" + }, + { + "id": 5564, + "gameVersionTypeID": 3, + "name": "10.13.3.1365", + "slug": "10-13-3-1365" + }, + { + "id": 5565, + "gameVersionTypeID": 3, + "name": "10.13.3.1366", + "slug": "10-13-3-1366" + }, + { + "id": 5566, + "gameVersionTypeID": 3, + "name": "10.13.3.1367", + "slug": "10-13-3-1367" + }, + { + "id": 5567, + "gameVersionTypeID": 3, + "name": "10.13.3.1368", + "slug": "10-13-3-1368" + }, + { + "id": 5568, + "gameVersionTypeID": 3, + "name": "10.13.3.1369", + "slug": "10-13-3-1369" + }, + { + "id": 5569, + "gameVersionTypeID": 3, + "name": "10.13.3.1370", + "slug": "10-13-3-1370" + }, + { + "id": 5570, + "gameVersionTypeID": 3, + "name": "11.14.1.1371", + "slug": "11-14-1-1371" + }, + { + "id": 5571, + "gameVersionTypeID": 3, + "name": "10.13.3.1372", + "slug": "10-13-3-1372" + }, + { + "id": 5572, + "gameVersionTypeID": 3, + "name": "10.13.3.1373", + "slug": "10-13-3-1373" + }, + { + "id": 5573, + "gameVersionTypeID": 3, + "name": "11.14.1.1375", + "slug": "11-14-1-1375" + }, + { + "id": 5574, + "gameVersionTypeID": 3, + "name": "10.13.3.1376", + "slug": "10-13-3-1376" + }, + { + "id": 5575, + "gameVersionTypeID": 3, + "name": "10.13.3.1377", + "slug": "10-13-3-1377" + }, + { + "id": 5576, + "gameVersionTypeID": 3, + "name": "10.13.3.1379", + "slug": "10-13-3-1379" + }, + { + "id": 5577, + "gameVersionTypeID": 3, + "name": "10.13.3.1380", + "slug": "10-13-3-1380" + }, + { + "id": 5578, + "gameVersionTypeID": 3, + "name": "10.13.3.1381", + "slug": "10-13-3-1381" + }, + { + "id": 5579, + "gameVersionTypeID": 3, + "name": "10.13.3.1382", + "slug": "10-13-3-1382" + }, + { + "id": 5580, + "gameVersionTypeID": 3, + "name": "10.13.3.1383", + "slug": "10-13-3-1383" + }, + { + "id": 5581, + "gameVersionTypeID": 3, + "name": "10.13.3.1384", + "slug": "10-13-3-1384" + }, + { + "id": 5582, + "gameVersionTypeID": 3, + "name": "10.13.3.1385", + "slug": "10-13-3-1385" + }, + { + "id": 5583, + "gameVersionTypeID": 3, + "name": "10.13.3.1387", + "slug": "10-13-3-1387" + }, + { + "id": 5584, + "gameVersionTypeID": 3, + "name": "10.13.3.1388", + "slug": "10-13-3-1388" + }, + { + "id": 5585, + "gameVersionTypeID": 3, + "name": "10.13.3.1389", + "slug": "10-13-3-1389" + }, + { + "id": 5586, + "gameVersionTypeID": 3, + "name": "11.14.1.1390", + "slug": "11-14-1-1390" + }, + { + "id": 5587, + "gameVersionTypeID": 3, + "name": "10.13.3.1391", + "slug": "10-13-3-1391" + }, + { + "id": 5588, + "gameVersionTypeID": 3, + "name": "11.14.1.1392", + "slug": "11-14-1-1392" + }, + { + "id": 5589, + "gameVersionTypeID": 3, + "name": "10.13.3.1393", + "slug": "10-13-3-1393" + }, + { + "id": 5590, + "gameVersionTypeID": 3, + "name": "10.13.3.1394", + "slug": "10-13-3-1394" + }, + { + "id": 5591, + "gameVersionTypeID": 3, + "name": "10.13.3.1395", + "slug": "10-13-3-1395" + }, + { + "id": 5592, + "gameVersionTypeID": 3, + "name": "11.14.1.1397", + "slug": "11-14-1-1397" + }, + { + "id": 5593, + "gameVersionTypeID": 3, + "name": "11.14.1.1398", + "slug": "11-14-1-1398" + }, + { + "id": 5594, + "gameVersionTypeID": 3, + "name": "10.13.3.1399", + "slug": "10-13-3-1399" + }, + { + "id": 5595, + "gameVersionTypeID": 3, + "name": "10.13.3.1401", + "slug": "10-13-3-1401" + }, + { + "id": 5596, + "gameVersionTypeID": 3, + "name": "11.14.1.1402", + "slug": "11-14-1-1402" + }, + { + "id": 5597, + "gameVersionTypeID": 3, + "name": "10.13.3.1403", + "slug": "10-13-3-1403" + }, + { + "id": 5598, + "gameVersionTypeID": 3, + "name": "11.14.1.1404", + "slug": "11-14-1-1404" + }, + { + "id": 5599, + "gameVersionTypeID": 3, + "name": "11.14.1.1405", + "slug": "11-14-1-1405" + }, + { + "id": 5600, + "gameVersionTypeID": 3, + "name": "10.13.3.1406", + "slug": "10-13-3-1406" + }, + { + "id": 5601, + "gameVersionTypeID": 3, + "name": "10.13.3.1407", + "slug": "10-13-3-1407" + }, + { + "id": 5602, + "gameVersionTypeID": 3, + "name": "10.13.3.1408", + "slug": "10-13-3-1408" + }, + { + "id": 5603, + "gameVersionTypeID": 3, + "name": "11.14.1.1409", + "slug": "11-14-1-1409" + }, + { + "id": 5604, + "gameVersionTypeID": 3, + "name": "11.14.1.1410", + "slug": "11-14-1-1410" + }, + { + "id": 5605, + "gameVersionTypeID": 3, + "name": "11.14.1.1411", + "slug": "11-14-1-1411" + }, + { + "id": 5606, + "gameVersionTypeID": 3, + "name": "11.14.1.1412", + "slug": "11-14-1-1412" + }, + { + "id": 5607, + "gameVersionTypeID": 3, + "name": "11.14.1.1413", + "slug": "11-14-1-1413" + }, + { + "id": 5608, + "gameVersionTypeID": 3, + "name": "11.14.1.1414", + "slug": "11-14-1-1414" + }, + { + "id": 5609, + "gameVersionTypeID": 3, + "name": "11.14.1.1415", + "slug": "11-14-1-1415" + }, + { + "id": 5610, + "gameVersionTypeID": 3, + "name": "11.14.1.1416", + "slug": "11-14-1-1416" + }, + { + "id": 5611, + "gameVersionTypeID": 3, + "name": "11.14.1.1417", + "slug": "11-14-1-1417" + }, + { + "id": 5612, + "gameVersionTypeID": 3, + "name": "11.14.1.1419", + "slug": "11-14-1-1419" + }, + { + "id": 5613, + "gameVersionTypeID": 3, + "name": "10.13.3.1420", + "slug": "10-13-3-1420" + }, + { + "id": 5614, + "gameVersionTypeID": 3, + "name": "11.14.2.1421", + "slug": "11-14-2-1421" + }, + { + "id": 5615, + "gameVersionTypeID": 3, + "name": "10.13.3.1422", + "slug": "10-13-3-1422" + }, + { + "id": 5616, + "gameVersionTypeID": 3, + "name": "11.14.2.1423", + "slug": "11-14-2-1423" + }, + { + "id": 5617, + "gameVersionTypeID": 3, + "name": "10.13.3.1424", + "slug": "10-13-3-1424" + }, + { + "id": 5618, + "gameVersionTypeID": 3, + "name": "10.12.0.1058", + "slug": "10-12-0-1058" + }, + { + "id": 5619, + "gameVersionTypeID": 3, + "name": "10.13.0.1180", + "slug": "10-13-0-1180" + }, + { + "id": 5620, + "gameVersionTypeID": 3, + "name": "10.13.0.1184", + "slug": "10-13-0-1184" + }, + { + "id": 5621, + "gameVersionTypeID": 3, + "name": "10.13.0.1197", + "slug": "10-13-0-1197" + }, + { + "id": 5622, + "gameVersionTypeID": 3, + "name": "10.13.0.1204", + "slug": "10-13-0-1204" + }, + { + "id": 5623, + "gameVersionTypeID": 3, + "name": "10.13.2.1231", + "slug": "10-13-2-1231" + }, + { + "id": 5624, + "gameVersionTypeID": 3, + "name": "11.14.0.1265", + "slug": "11-14-0-1265" + }, + { + "id": 5625, + "gameVersionTypeID": 3, + "name": "10.13.2.1275", + "slug": "10-13-2-1275" + }, + { + "id": 5626, + "gameVersionTypeID": 3, + "name": "11.14.0.1282", + "slug": "11-14-0-1282" + }, + { + "id": 5627, + "gameVersionTypeID": 3, + "name": "11.14.1.1310", + "slug": "11-14-1-1310" + }, + { + "id": 5628, + "gameVersionTypeID": 3, + "name": "10.13.2.1346", + "slug": "10-13-2-1346" + }, + { + "id": 5629, + "gameVersionTypeID": 3, + "name": "10.13.3.1374", + "slug": "10-13-3-1374" + }, + { + "id": 5630, + "gameVersionTypeID": 3, + "name": "10.13.3.1378", + "slug": "10-13-3-1378" + }, + { + "id": 5631, + "gameVersionTypeID": 3, + "name": "11.14.1.1396", + "slug": "11-14-1-1396" + }, + { + "id": 5632, + "gameVersionTypeID": 3, + "name": "11.14.1.1418", + "slug": "11-14-1-1418" + }, + { + "id": 5633, + "gameVersionTypeID": 3, + "name": "10.12.1.1118", + "slug": "10-12-1-1118" + }, + { + "id": 5634, + "gameVersionTypeID": 3, + "name": "10.13.3.1400", + "slug": "10-13-3-1400" + }, + { + "id": 5635, + "gameVersionTypeID": 3, + "name": "11.14.2.1426", + "slug": "11-14-2-1426" + }, + { + "id": 5636, + "gameVersionTypeID": 3, + "name": "11.14.2.1427", + "slug": "11-14-2-1427" + }, + { + "id": 5637, + "gameVersionTypeID": 3, + "name": "10.13.3.1428", + "slug": "10-13-3-1428" + }, + { + "id": 5638, + "gameVersionTypeID": 3, + "name": "11.14.2.1429", + "slug": "11-14-2-1429" + }, + { + "id": 5639, + "gameVersionTypeID": 3, + "name": "11.14.2.1430", + "slug": "11-14-2-1430" + }, + { + "id": 5640, + "gameVersionTypeID": 3, + "name": "11.14.2.1431", + "slug": "11-14-2-1431" + }, + { + "id": 5641, + "gameVersionTypeID": 3, + "name": "11.14.2.1433", + "slug": "11-14-2-1433" + }, + { + "id": 5642, + "gameVersionTypeID": 4, + "name": "1.8.7", + "slug": "1-8-7" + }, + { + "id": 5643, + "gameVersionTypeID": 3, + "name": "11.14.2.1434", + "slug": "11-14-2-1434" + }, + { + "id": 5644, + "gameVersionTypeID": 3, + "name": "11.14.2.1435", + "slug": "11-14-2-1435" + }, + { + "id": 5645, + "gameVersionTypeID": 3, + "name": "11.14.2.1436", + "slug": "11-14-2-1436" + }, + { + "id": 5646, + "gameVersionTypeID": 3, + "name": "11.14.2.1437", + "slug": "11-14-2-1437" + }, + { + "id": 5647, + "gameVersionTypeID": 3, + "name": "11.14.2.1439", + "slug": "11-14-2-1439" + }, + { + "id": 5648, + "gameVersionTypeID": 3, + "name": "11.14.2.1440", + "slug": "11-14-2-1440" + }, + { + "id": 5649, + "gameVersionTypeID": 3, + "name": "11.14.2.1441", + "slug": "11-14-2-1441" + }, + { + "id": 5650, + "gameVersionTypeID": 3, + "name": "11.14.2.1442", + "slug": "11-14-2-1442" + }, + { + "id": 5651, + "gameVersionTypeID": 3, + "name": "11.14.2.1443", + "slug": "11-14-2-1443" + }, + { + "id": 5652, + "gameVersionTypeID": 3, + "name": "11.14.2.1444", + "slug": "11-14-2-1444" + }, + { + "id": 5653, + "gameVersionTypeID": 3, + "name": "10.13.4.1445", + "slug": "10-13-4-1445" + }, + { + "id": 5654, + "gameVersionTypeID": 3, + "name": "11.14.3.1446", + "slug": "11-14-3-1446" + }, + { + "id": 5655, + "gameVersionTypeID": 3, + "name": "10.13.4.1447", + "slug": "10-13-4-1447" + }, + { + "id": 5656, + "gameVersionTypeID": 3, + "name": "10.13.4.1448", + "slug": "10-13-4-1448" + }, + { + "id": 5657, + "gameVersionTypeID": 3, + "name": "11.14.3.1449", + "slug": "11-14-3-1449" + }, + { + "id": 5658, + "gameVersionTypeID": 3, + "name": "11.14.3.1450", + "slug": "11-14-3-1450" + }, + { + "id": 5659, + "gameVersionTypeID": 3, + "name": "10.13.4.1451", + "slug": "10-13-4-1451" + }, + { + "id": 5660, + "gameVersionTypeID": 3, + "name": "10.13.4.1452", + "slug": "10-13-4-1452" + }, + { + "id": 5661, + "gameVersionTypeID": 3, + "name": "11.14.3.1453", + "slug": "11-14-3-1453" + }, + { + "id": 5662, + "gameVersionTypeID": 3, + "name": "10.13.4.1456", + "slug": "10-13-4-1456" + }, + { + "id": 5663, + "gameVersionTypeID": 3, + "name": "11.14.3.1457", + "slug": "11-14-3-1457" + }, + { + "id": 5664, + "gameVersionTypeID": 3, + "name": "11.14.3.1458", + "slug": "11-14-3-1458" + }, + { + "id": 5665, + "gameVersionTypeID": 3, + "name": "11.14.3.1459", + "slug": "11-14-3-1459" + }, + { + "id": 5666, + "gameVersionTypeID": 3, + "name": "11.14.3.1460", + "slug": "11-14-3-1460" + }, + { + "id": 5667, + "gameVersionTypeID": 3, + "name": "11.14.3.1461", + "slug": "11-14-3-1461" + }, + { + "id": 5668, + "gameVersionTypeID": 3, + "name": "11.14.3.1462", + "slug": "11-14-3-1462" + }, + { + "id": 5669, + "gameVersionTypeID": 3, + "name": "11.14.3.1463", + "slug": "11-14-3-1463" + }, + { + "id": 5670, + "gameVersionTypeID": 3, + "name": "11.14.3.1464", + "slug": "11-14-3-1464" + }, + { + "id": 5671, + "gameVersionTypeID": 3, + "name": "11.14.3.1465", + "slug": "11-14-3-1465" + }, + { + "id": 5672, + "gameVersionTypeID": 3, + "name": "11.14.3.1466", + "slug": "11-14-3-1466" + }, + { + "id": 5673, + "gameVersionTypeID": 3, + "name": "11.14.3.1467", + "slug": "11-14-3-1467" + }, + { + "id": 5674, + "gameVersionTypeID": 3, + "name": "11.14.3.1468", + "slug": "11-14-3-1468" + }, + { + "id": 5675, + "gameVersionTypeID": 3, + "name": "10.13.4.1469", + "slug": "10-13-4-1469" + }, + { + "id": 5676, + "gameVersionTypeID": 3, + "name": "10.13.4.1470", + "slug": "10-13-4-1470" + }, + { + "id": 5677, + "gameVersionTypeID": 3, + "name": "10.13.4.1472", + "slug": "10-13-4-1472" + }, + { + "id": 5678, + "gameVersionTypeID": 3, + "name": "11.14.3.1473", + "slug": "11-14-3-1473" + }, + { + "id": 5679, + "gameVersionTypeID": 3, + "name": "11.14.3.1474", + "slug": "11-14-3-1474" + }, + { + "id": 5681, + "gameVersionTypeID": 3, + "name": "11.14.3.1475", + "slug": "11-14-3-1475" + }, + { + "id": 5682, + "gameVersionTypeID": 3, + "name": "11.14.3.1476", + "slug": "11-14-3-1476" + }, + { + "id": 5683, + "gameVersionTypeID": 3, + "name": "11.14.3.1479", + "slug": "11-14-3-1479" + }, + { + "id": 5684, + "gameVersionTypeID": 3, + "name": "11.14.3.1480", + "slug": "11-14-3-1480" + }, + { + "id": 5686, + "gameVersionTypeID": 3, + "name": "10.13.4.1481", + "slug": "10-13-4-1481" + }, + { + "id": 5687, + "gameVersionTypeID": 3, + "name": "11.14.3.1482", + "slug": "11-14-3-1482" + }, + { + "id": 5688, + "gameVersionTypeID": 3, + "name": "11.14.3.1483", + "slug": "11-14-3-1483" + }, + { + "id": 5689, + "gameVersionTypeID": 3, + "name": "11.14.3.1484", + "slug": "11-14-3-1484" + }, + { + "id": 5690, + "gameVersionTypeID": 3, + "name": "11.14.3.1485", + "slug": "11-14-3-1485" + }, + { + "id": 5691, + "gameVersionTypeID": 3, + "name": "11.14.3.1486", + "slug": "11-14-3-1486" + }, + { + "id": 5692, + "gameVersionTypeID": 3, + "name": "11.14.3.1487", + "slug": "11-14-3-1487" + }, + { + "id": 5693, + "gameVersionTypeID": 3, + "name": "10.13.4.1490", + "slug": "10-13-4-1490" + }, + { + "id": 5694, + "gameVersionTypeID": 3, + "name": "11.14.3.1491", + "slug": "11-14-3-1491" + }, + { + "id": 5695, + "gameVersionTypeID": 3, + "name": "10.13.4.1492", + "slug": "10-13-4-1492" + }, + { + "id": 5696, + "gameVersionTypeID": 3, + "name": "11.14.3.1493", + "slug": "11-14-3-1493" + }, + { + "id": 5697, + "gameVersionTypeID": 3, + "name": "11.14.3.1494", + "slug": "11-14-3-1494" + }, + { + "id": 5698, + "gameVersionTypeID": 3, + "name": "11.14.3.1495", + "slug": "11-14-3-1495" + }, + { + "id": 5699, + "gameVersionTypeID": 3, + "name": "11.14.3.1496", + "slug": "11-14-3-1496" + }, + { + "id": 5700, + "gameVersionTypeID": 3, + "name": "11.14.3.1497", + "slug": "11-14-3-1497" + }, + { + "id": 5701, + "gameVersionTypeID": 3, + "name": "11.14.3.1498", + "slug": "11-14-3-1498" + }, + { + "id": 5702, + "gameVersionTypeID": 3, + "name": "11.14.3.1499", + "slug": "11-14-3-1499" + }, + { + "id": 5703, + "gameVersionTypeID": 4, + "name": "1.8.8", + "slug": "1-8-8" + }, + { + "id": 5704, + "gameVersionTypeID": 3, + "name": "11.14.3.1500", + "slug": "11-14-3-1500" + }, + { + "id": 5705, + "gameVersionTypeID": 3, + "name": "11.14.3.1501", + "slug": "11-14-3-1501" + }, + { + "id": 5706, + "gameVersionTypeID": 3, + "name": "11.14.3.1502", + "slug": "11-14-3-1502" + }, + { + "id": 5707, + "gameVersionTypeID": 552, + "name": "1.9-Snapshot", + "slug": "1-9-Snapshot" + }, + { + "id": 5708, + "gameVersionTypeID": 3, + "name": "11.14.3.1503", + "slug": "11-14-3-1503" + }, + { + "id": 5709, + "gameVersionTypeID": 3, + "name": "11.14.3.1504", + "slug": "11-14-3-1504" + }, + { + "id": 5710, + "gameVersionTypeID": 3, + "name": "11.14.3.1505", + "slug": "11-14-3-1505" + }, + { + "id": 5711, + "gameVersionTypeID": 3, + "name": "11.14.3.1506", + "slug": "11-14-3-1506" + }, + { + "id": 5712, + "gameVersionTypeID": 3, + "name": "11.14.3.1507", + "slug": "11-14-3-1507" + }, + { + "id": 5713, + "gameVersionTypeID": 3, + "name": "11.14.3.1508", + "slug": "11-14-3-1508" + }, + { + "id": 5714, + "gameVersionTypeID": 3, + "name": "11.14.3.1509", + "slug": "11-14-3-1509" + }, + { + "id": 5715, + "gameVersionTypeID": 3, + "name": "11.14.3.1510", + "slug": "11-14-3-1510" + }, + { + "id": 5716, + "gameVersionTypeID": 3, + "name": "11.14.3.1511", + "slug": "11-14-3-1511" + }, + { + "id": 5717, + "gameVersionTypeID": 3, + "name": "11.14.3.1512", + "slug": "11-14-3-1512" + }, + { + "id": 5718, + "gameVersionTypeID": 3, + "name": "11.14.3.1513", + "slug": "11-14-3-1513" + }, + { + "id": 5719, + "gameVersionTypeID": 3, + "name": "11.14.3.1514", + "slug": "11-14-3-1514" + }, + { + "id": 5720, + "gameVersionTypeID": 3, + "name": "11.14.3.1515", + "slug": "11-14-3-1515" + }, + { + "id": 5721, + "gameVersionTypeID": 3, + "name": "11.14.3.1516", + "slug": "11-14-3-1516" + }, + { + "id": 5722, + "gameVersionTypeID": 3, + "name": "10.13.4.1517", + "slug": "10-13-4-1517" + }, + { + "id": 5723, + "gameVersionTypeID": 3, + "name": "11.14.3.1518", + "slug": "11-14-3-1518" + }, + { + "id": 5725, + "gameVersionTypeID": 3, + "name": "11.14.3.1519", + "slug": "11-14-3-1519" + }, + { + "id": 5726, + "gameVersionTypeID": 3, + "name": "11.14.3.1520", + "slug": "11-14-3-1520" + }, + { + "id": 5727, + "gameVersionTypeID": 3, + "name": "11.14.3.1521", + "slug": "11-14-3-1521" + }, + { + "id": 5728, + "gameVersionTypeID": 3, + "name": "11.14.3.1523", + "slug": "11-14-3-1523" + }, + { + "id": 5729, + "gameVersionTypeID": 3, + "name": "11.14.3.1524", + "slug": "11-14-3-1524" + }, + { + "id": 5730, + "gameVersionTypeID": 3, + "name": "11.14.3.1525", + "slug": "11-14-3-1525" + }, + { + "id": 5731, + "gameVersionTypeID": 3, + "name": "11.14.3.1526", + "slug": "11-14-3-1526" + }, + { + "id": 5732, + "gameVersionTypeID": 3, + "name": "11.14.3.1529", + "slug": "11-14-3-1529" + }, + { + "id": 5733, + "gameVersionTypeID": 3, + "name": "11.14.3.1530", + "slug": "11-14-3-1530" + }, + { + "id": 5734, + "gameVersionTypeID": 3, + "name": "11.14.3.1531", + "slug": "11-14-3-1531" + }, + { + "id": 5735, + "gameVersionTypeID": 3, + "name": "11.14.3.1532", + "slug": "11-14-3-1532" + }, + { + "id": 5736, + "gameVersionTypeID": 3, + "name": "11.14.3.1533", + "slug": "11-14-3-1533" + }, + { + "id": 5737, + "gameVersionTypeID": 3, + "name": "11.14.3.1534", + "slug": "11-14-3-1534" + }, + { + "id": 5738, + "gameVersionTypeID": 3, + "name": "11.14.3.1535", + "slug": "11-14-3-1535" + }, + { + "id": 5739, + "gameVersionTypeID": 3, + "name": "10.13.4.1539", + "slug": "10-13-4-1539" + }, + { + "id": 5740, + "gameVersionTypeID": 3, + "name": "10.13.4.1540", + "slug": "10-13-4-1540" + }, + { + "id": 5741, + "gameVersionTypeID": 3, + "name": "10.13.4.1541", + "slug": "10-13-4-1541" + }, + { + "id": 5742, + "gameVersionTypeID": 3, + "name": "11.14.3.1542", + "slug": "11-14-3-1542" + }, + { + "id": 5743, + "gameVersionTypeID": 3, + "name": "11.14.3.1543", + "slug": "11-14-3-1543" + }, + { + "id": 5744, + "gameVersionTypeID": 3, + "name": "11.14.3.1544", + "slug": "11-14-3-1544" + }, + { + "id": 5745, + "gameVersionTypeID": 3, + "name": "11.14.3.1545", + "slug": "11-14-3-1545" + }, + { + "id": 5746, + "gameVersionTypeID": 3, + "name": "11.14.3.1546", + "slug": "11-14-3-1546" + }, + { + "id": 5747, + "gameVersionTypeID": 3, + "name": "11.14.3.1547", + "slug": "11-14-3-1547" + }, + { + "id": 5748, + "gameVersionTypeID": 3, + "name": "11.14.3.1548", + "slug": "11-14-3-1548" + }, + { + "id": 5749, + "gameVersionTypeID": 3, + "name": "11.14.3.1549", + "slug": "11-14-3-1549" + }, + { + "id": 5750, + "gameVersionTypeID": 3, + "name": "11.14.3.1550", + "slug": "11-14-3-1550" + }, + { + "id": 5751, + "gameVersionTypeID": 3, + "name": "11.14.3.1551", + "slug": "11-14-3-1551" + }, + { + "id": 5752, + "gameVersionTypeID": 3, + "name": "11.14.3.1552", + "slug": "11-14-3-1552" + }, + { + "id": 5753, + "gameVersionTypeID": 3, + "name": "11.14.3.1553", + "slug": "11-14-3-1553" + }, + { + "id": 5754, + "gameVersionTypeID": 3, + "name": "11.14.3.1554", + "slug": "11-14-3-1554" + }, + { + "id": 5755, + "gameVersionTypeID": 3, + "name": "11.14.3.1555", + "slug": "11-14-3-1555" + }, + { + "id": 5756, + "gameVersionTypeID": 3, + "name": "11.14.3.1556", + "slug": "11-14-3-1556" + }, + { + "id": 5758, + "gameVersionTypeID": 3, + "name": "10.13.4.1557", + "slug": "10-13-4-1557" + }, + { + "id": 5759, + "gameVersionTypeID": 3, + "name": "10.13.4.1558", + "slug": "10-13-4-1558" + }, + { + "id": 5760, + "gameVersionTypeID": 3, + "name": "11.14.3.1559", + "slug": "11-14-3-1559" + }, + { + "id": 5761, + "gameVersionTypeID": 3, + "name": "11.14.3.1560", + "slug": "11-14-3-1560" + }, + { + "id": 5762, + "gameVersionTypeID": 3, + "name": "11.14.3.1561", + "slug": "11-14-3-1561" + }, + { + "id": 5763, + "gameVersionTypeID": 3, + "name": "11.14.3.1562", + "slug": "11-14-3-1562" + }, + { + "id": 5764, + "gameVersionTypeID": 3, + "name": "11.14.4.1563", + "slug": "11-14-4-1563" + }, + { + "id": 5765, + "gameVersionTypeID": 3, + "name": "10.13.4.1564", + "slug": "10-13-4-1564" + }, + { + "id": 5766, + "gameVersionTypeID": 3, + "name": "11.14.4.1565", + "slug": "11-14-4-1565" + }, + { + "id": 5767, + "gameVersionTypeID": 3, + "name": "10.13.4.1566", + "slug": "10-13-4-1566" + }, + { + "id": 5768, + "gameVersionTypeID": 3, + "name": "11.14.4.1568", + "slug": "11-14-4-1568" + }, + { + "id": 5769, + "gameVersionTypeID": 3, + "name": "11.14.4.1569", + "slug": "11-14-4-1569" + }, + { + "id": 5770, + "gameVersionTypeID": 3, + "name": "11.14.4.1570", + "slug": "11-14-4-1570" + }, + { + "id": 5771, + "gameVersionTypeID": 3, + "name": "11.14.4.1571", + "slug": "11-14-4-1571" + }, + { + "id": 5772, + "gameVersionTypeID": 3, + "name": "11.14.4.1572", + "slug": "11-14-4-1572" + }, + { + "id": 5773, + "gameVersionTypeID": 3, + "name": "11.14.4.1575", + "slug": "11-14-4-1575" + }, + { + "id": 5774, + "gameVersionTypeID": 3, + "name": "11.14.4.1576", + "slug": "11-14-4-1576" + }, + { + "id": 5775, + "gameVersionTypeID": 3, + "name": "11.14.4.1577", + "slug": "11-14-4-1577" + }, + { + "id": 5776, + "gameVersionTypeID": 3, + "name": "11.14.4.1579", + "slug": "11-14-4-1579" + }, + { + "id": 5777, + "gameVersionTypeID": 3, + "name": "11.14.4.1580", + "slug": "11-14-4-1580" + }, + { + "id": 5778, + "gameVersionTypeID": 3, + "name": "11.14.4.1581", + "slug": "11-14-4-1581" + }, + { + "id": 5779, + "gameVersionTypeID": 3, + "name": "11.14.4.1582", + "slug": "11-14-4-1582" + }, + { + "id": 5780, + "gameVersionTypeID": 3, + "name": "11.14.4.1583", + "slug": "11-14-4-1583" + }, + { + "id": 5781, + "gameVersionTypeID": 3, + "name": "11.14.4.1584", + "slug": "11-14-4-1584" + }, + { + "id": 5782, + "gameVersionTypeID": 3, + "name": "11.14.4.1585", + "slug": "11-14-4-1585" + }, + { + "id": 5783, + "gameVersionTypeID": 3, + "name": "11.14.4.1586", + "slug": "11-14-4-1586" + }, + { + "id": 5784, + "gameVersionTypeID": 3, + "name": "11.14.4.1587", + "slug": "11-14-4-1587" + }, + { + "id": 5785, + "gameVersionTypeID": 3, + "name": "11.14.4.1588", + "slug": "11-14-4-1588" + }, + { + "id": 5786, + "gameVersionTypeID": 3, + "name": "11.14.4.1589", + "slug": "11-14-4-1589" + }, + { + "id": 5787, + "gameVersionTypeID": 3, + "name": "11.14.4.1590", + "slug": "11-14-4-1590" + }, + { + "id": 5788, + "gameVersionTypeID": 3, + "name": "11.15.0.1591", + "slug": "11-15-0-1591" + }, + { + "id": 5789, + "gameVersionTypeID": 3, + "name": "11.15.0.1592", + "slug": "11-15-0-1592" + }, + { + "id": 5790, + "gameVersionTypeID": 3, + "name": "11.15.0.1594", + "slug": "11-15-0-1594" + }, + { + "id": 5791, + "gameVersionTypeID": 3, + "name": "11.15.0.1595", + "slug": "11-15-0-1595" + }, + { + "id": 5792, + "gameVersionTypeID": 3, + "name": "11.15.0.1596", + "slug": "11-15-0-1596" + }, + { + "id": 5793, + "gameVersionTypeID": 3, + "name": "11.15.0.1600", + "slug": "11-15-0-1600" + }, + { + "id": 5794, + "gameVersionTypeID": 3, + "name": "11.15.0.1601", + "slug": "11-15-0-1601" + }, + { + "id": 5795, + "gameVersionTypeID": 3, + "name": "11.15.0.1602", + "slug": "11-15-0-1602" + }, + { + "id": 5796, + "gameVersionTypeID": 3, + "name": "11.15.0.1603", + "slug": "11-15-0-1603" + }, + { + "id": 5797, + "gameVersionTypeID": 3, + "name": "11.15.0.1604", + "slug": "11-15-0-1604" + }, + { + "id": 5798, + "gameVersionTypeID": 3, + "name": "11.15.0.1605", + "slug": "11-15-0-1605" + }, + { + "id": 5799, + "gameVersionTypeID": 3, + "name": "11.15.0.1606", + "slug": "11-15-0-1606" + }, + { + "id": 5800, + "gameVersionTypeID": 3, + "name": "11.15.0.1607", + "slug": "11-15-0-1607" + }, + { + "id": 5801, + "gameVersionTypeID": 3, + "name": "11.15.0.1608", + "slug": "11-15-0-1608" + }, + { + "id": 5802, + "gameVersionTypeID": 3, + "name": "11.15.0.1609", + "slug": "11-15-0-1609" + }, + { + "id": 5803, + "gameVersionTypeID": 3, + "name": "11.15.0.1610", + "slug": "11-15-0-1610" + }, + { + "id": 5804, + "gameVersionTypeID": 3, + "name": "11.15.0.1611", + "slug": "11-15-0-1611" + }, + { + "id": 5805, + "gameVersionTypeID": 3, + "name": "11.15.0.1612", + "slug": "11-15-0-1612" + }, + { + "id": 5806, + "gameVersionTypeID": 4, + "name": "1.8.9", + "slug": "1-8-9" + }, + { + "id": 5807, + "gameVersionTypeID": 3, + "name": "11.15.0.1613", + "slug": "11-15-0-1613" + }, + { + "id": 5808, + "gameVersionTypeID": 3, + "name": "10.13.4.1614", + "slug": "10-13-4-1614" + }, + { + "id": 5809, + "gameVersionTypeID": 3, + "name": "11.15.0.1615", + "slug": "11-15-0-1615" + }, + { + "id": 5810, + "gameVersionTypeID": 3, + "name": "11.15.0.1616", + "slug": "11-15-0-1616" + }, + { + "id": 5811, + "gameVersionTypeID": 3, + "name": "11.15.0.1617", + "slug": "11-15-0-1617" + }, + { + "id": 5812, + "gameVersionTypeID": 3, + "name": "11.15.0.1618", + "slug": "11-15-0-1618" + }, + { + "id": 5813, + "gameVersionTypeID": 3, + "name": "11.15.0.1619", + "slug": "11-15-0-1619" + }, + { + "id": 5814, + "gameVersionTypeID": 3, + "name": "11.15.0.1620", + "slug": "11-15-0-1620" + }, + { + "id": 5815, + "gameVersionTypeID": 3, + "name": "11.15.0.1621", + "slug": "11-15-0-1621" + }, + { + "id": 5816, + "gameVersionTypeID": 3, + "name": "11.15.0.1622", + "slug": "11-15-0-1622" + }, + { + "id": 5817, + "gameVersionTypeID": 3, + "name": "11.15.0.1623", + "slug": "11-15-0-1623" + }, + { + "id": 5818, + "gameVersionTypeID": 3, + "name": "11.15.0.1624", + "slug": "11-15-0-1624" + }, + { + "id": 5819, + "gameVersionTypeID": 3, + "name": "11.15.0.1625", + "slug": "11-15-0-1625" + }, + { + "id": 5820, + "gameVersionTypeID": 3, + "name": "11.15.0.1626", + "slug": "11-15-0-1626" + }, + { + "id": 5821, + "gameVersionTypeID": 3, + "name": "11.15.0.1627", + "slug": "11-15-0-1627" + }, + { + "id": 5822, + "gameVersionTypeID": 3, + "name": "11.15.0.1628", + "slug": "11-15-0-1628" + }, + { + "id": 5823, + "gameVersionTypeID": 3, + "name": "11.15.0.1630", + "slug": "11-15-0-1630" + }, + { + "id": 5824, + "gameVersionTypeID": 3, + "name": "11.15.0.1632", + "slug": "11-15-0-1632" + }, + { + "id": 5825, + "gameVersionTypeID": 3, + "name": "11.15.0.1633", + "slug": "11-15-0-1633" + }, + { + "id": 5826, + "gameVersionTypeID": 3, + "name": "11.15.0.1634", + "slug": "11-15-0-1634" + }, + { + "id": 5827, + "gameVersionTypeID": 3, + "name": "11.15.0.1635", + "slug": "11-15-0-1635" + }, + { + "id": 5828, + "gameVersionTypeID": 3, + "name": "11.15.0.1636", + "slug": "11-15-0-1636" + }, + { + "id": 5829, + "gameVersionTypeID": 3, + "name": "11.15.0.1637", + "slug": "11-15-0-1637" + }, + { + "id": 5830, + "gameVersionTypeID": 3, + "name": "11.15.0.1638", + "slug": "11-15-0-1638" + }, + { + "id": 5831, + "gameVersionTypeID": 3, + "name": "11.15.0.1639", + "slug": "11-15-0-1639" + }, + { + "id": 5832, + "gameVersionTypeID": 3, + "name": "11.15.0.1640", + "slug": "11-15-0-1640" + }, + { + "id": 5833, + "gameVersionTypeID": 3, + "name": "11.15.0.1641", + "slug": "11-15-0-1641" + }, + { + "id": 5834, + "gameVersionTypeID": 3, + "name": "11.15.0.1642", + "slug": "11-15-0-1642" + }, + { + "id": 5835, + "gameVersionTypeID": 3, + "name": "11.15.0.1643", + "slug": "11-15-0-1643" + }, + { + "id": 5836, + "gameVersionTypeID": 3, + "name": "11.15.0.1644", + "slug": "11-15-0-1644" + }, + { + "id": 5837, + "gameVersionTypeID": 3, + "name": "11.15.0.1645", + "slug": "11-15-0-1645" + }, + { + "id": 5838, + "gameVersionTypeID": 3, + "name": "11.15.0.1646", + "slug": "11-15-0-1646" + }, + { + "id": 5839, + "gameVersionTypeID": 3, + "name": "11.15.0.1647", + "slug": "11-15-0-1647" + }, + { + "id": 5840, + "gameVersionTypeID": 3, + "name": "11.15.0.1649", + "slug": "11-15-0-1649" + }, + { + "id": 5841, + "gameVersionTypeID": 3, + "name": "11.15.0.1650", + "slug": "11-15-0-1650" + }, + { + "id": 5842, + "gameVersionTypeID": 3, + "name": "11.15.0.1651", + "slug": "11-15-0-1651" + }, + { + "id": 5843, + "gameVersionTypeID": 3, + "name": "11.15.0.1652", + "slug": "11-15-0-1652" + }, + { + "id": 5844, + "gameVersionTypeID": 3, + "name": "11.15.0.1653", + "slug": "11-15-0-1653" + }, + { + "id": 5845, + "gameVersionTypeID": 3, + "name": "11.15.0.1654", + "slug": "11-15-0-1654" + }, + { + "id": 5846, + "gameVersionTypeID": 3, + "name": "11.15.0.1655", + "slug": "11-15-0-1655" + }, + { + "id": 5847, + "gameVersionTypeID": 3, + "name": "11.15.0.1656", + "slug": "11-15-0-1656" + }, + { + "id": 5848, + "gameVersionTypeID": 3, + "name": "11.15.0.1657", + "slug": "11-15-0-1657" + }, + { + "id": 5849, + "gameVersionTypeID": 3, + "name": "11.15.0.1658", + "slug": "11-15-0-1658" + }, + { + "id": 5850, + "gameVersionTypeID": 3, + "name": "11.15.0.1659", + "slug": "11-15-0-1659" + }, + { + "id": 5851, + "gameVersionTypeID": 3, + "name": "11.15.0.1661", + "slug": "11-15-0-1661" + }, + { + "id": 5852, + "gameVersionTypeID": 3, + "name": "11.15.0.1662", + "slug": "11-15-0-1662" + }, + { + "id": 5853, + "gameVersionTypeID": 3, + "name": "11.15.0.1663", + "slug": "11-15-0-1663" + }, + { + "id": 5854, + "gameVersionTypeID": 3, + "name": "11.15.0.1664", + "slug": "11-15-0-1664" + }, + { + "id": 5855, + "gameVersionTypeID": 3, + "name": "11.15.0.1665", + "slug": "11-15-0-1665" + }, + { + "id": 5856, + "gameVersionTypeID": 3, + "name": "11.15.0.1666", + "slug": "11-15-0-1666" + }, + { + "id": 5857, + "gameVersionTypeID": 3, + "name": "11.15.0.1668", + "slug": "11-15-0-1668" + }, + { + "id": 5858, + "gameVersionTypeID": 3, + "name": "11.15.0.1669", + "slug": "11-15-0-1669" + }, + { + "id": 5859, + "gameVersionTypeID": 3, + "name": "11.15.0.1670", + "slug": "11-15-0-1670" + }, + { + "id": 5860, + "gameVersionTypeID": 3, + "name": "11.15.0.1671", + "slug": "11-15-0-1671" + }, + { + "id": 5861, + "gameVersionTypeID": 3, + "name": "11.15.0.1672", + "slug": "11-15-0-1672" + }, + { + "id": 5862, + "gameVersionTypeID": 3, + "name": "11.15.0.1673", + "slug": "11-15-0-1673" + }, + { + "id": 5863, + "gameVersionTypeID": 3, + "name": "11.15.0.1674", + "slug": "11-15-0-1674" + }, + { + "id": 5864, + "gameVersionTypeID": 3, + "name": "11.15.0.1675", + "slug": "11-15-0-1675" + }, + { + "id": 5865, + "gameVersionTypeID": 3, + "name": "11.15.0.1676", + "slug": "11-15-0-1676" + }, + { + "id": 5866, + "gameVersionTypeID": 3, + "name": "11.15.0.1677", + "slug": "11-15-0-1677" + }, + { + "id": 5867, + "gameVersionTypeID": 3, + "name": "11.15.0.1681", + "slug": "11-15-0-1681" + }, + { + "id": 5868, + "gameVersionTypeID": 3, + "name": "11.15.0.1683", + "slug": "11-15-0-1683" + }, + { + "id": 5869, + "gameVersionTypeID": 3, + "name": "11.15.0.1682", + "slug": "11-15-0-1682" + }, + { + "id": 5870, + "gameVersionTypeID": 3, + "name": "11.15.0.1684", + "slug": "11-15-0-1684" + }, + { + "id": 5871, + "gameVersionTypeID": 3, + "name": "11.15.0.1686", + "slug": "11-15-0-1686" + }, + { + "id": 5872, + "gameVersionTypeID": 3, + "name": "11.15.0.1687", + "slug": "11-15-0-1687" + }, + { + "id": 5873, + "gameVersionTypeID": 3, + "name": "11.15.0.1688", + "slug": "11-15-0-1688" + }, + { + "id": 5874, + "gameVersionTypeID": 3, + "name": "11.15.0.1689", + "slug": "11-15-0-1689" + }, + { + "id": 5875, + "gameVersionTypeID": 3, + "name": "11.15.0.1690", + "slug": "11-15-0-1690" + }, + { + "id": 5876, + "gameVersionTypeID": 3, + "name": "11.15.0.1691", + "slug": "11-15-0-1691" + }, + { + "id": 5877, + "gameVersionTypeID": 3, + "name": "11.15.0.1692", + "slug": "11-15-0-1692" + }, + { + "id": 5878, + "gameVersionTypeID": 3, + "name": "11.15.0.1693", + "slug": "11-15-0-1693" + }, + { + "id": 5879, + "gameVersionTypeID": 3, + "name": "11.15.0.1694", + "slug": "11-15-0-1694" + }, + { + "id": 5880, + "gameVersionTypeID": 3, + "name": "11.15.0.1695", + "slug": "11-15-0-1695" + }, + { + "id": 5881, + "gameVersionTypeID": 3, + "name": "11.15.0.1696", + "slug": "11-15-0-1696" + }, + { + "id": 5882, + "gameVersionTypeID": 3, + "name": "11.15.0.1697", + "slug": "11-15-0-1697" + }, + { + "id": 5883, + "gameVersionTypeID": 3, + "name": "11.15.0.1698", + "slug": "11-15-0-1698" + }, + { + "id": 5884, + "gameVersionTypeID": 3, + "name": "11.15.0.1699", + "slug": "11-15-0-1699" + }, + { + "id": 5885, + "gameVersionTypeID": 3, + "name": "11.15.0.1700", + "slug": "11-15-0-1700" + }, + { + "id": 5886, + "gameVersionTypeID": 3, + "name": "11.15.0.1701", + "slug": "11-15-0-1701" + }, + { + "id": 5887, + "gameVersionTypeID": 3, + "name": "11.15.0.1702", + "slug": "11-15-0-1702" + }, + { + "id": 5888, + "gameVersionTypeID": 3, + "name": "11.15.0.1703", + "slug": "11-15-0-1703" + }, + { + "id": 5889, + "gameVersionTypeID": 3, + "name": "11.15.0.1705", + "slug": "11-15-0-1705" + }, + { + "id": 5890, + "gameVersionTypeID": 3, + "name": "11.15.0.1706", + "slug": "11-15-0-1706" + }, + { + "id": 5891, + "gameVersionTypeID": 3, + "name": "11.15.0.1707", + "slug": "11-15-0-1707" + }, + { + "id": 5892, + "gameVersionTypeID": 3, + "name": "11.15.0.1708", + "slug": "11-15-0-1708" + }, + { + "id": 5893, + "gameVersionTypeID": 3, + "name": "11.15.0.1709", + "slug": "11-15-0-1709" + }, + { + "id": 5894, + "gameVersionTypeID": 3, + "name": "11.15.0.1710", + "slug": "11-15-0-1710" + }, + { + "id": 5895, + "gameVersionTypeID": 3, + "name": "11.15.0.1711", + "slug": "11-15-0-1711" + }, + { + "id": 5896, + "gameVersionTypeID": 3, + "name": "11.15.0.1712", + "slug": "11-15-0-1712" + }, + { + "id": 5897, + "gameVersionTypeID": 3, + "name": "11.15.0.1713", + "slug": "11-15-0-1713" + }, + { + "id": 5898, + "gameVersionTypeID": 3, + "name": "11.15.0.1714", + "slug": "11-15-0-1714" + }, + { + "id": 5899, + "gameVersionTypeID": 3, + "name": "11.15.0.1715", + "slug": "11-15-0-1715" + }, + { + "id": 5900, + "gameVersionTypeID": 3, + "name": "11.15.0.1716", + "slug": "11-15-0-1716" + }, + { + "id": 5901, + "gameVersionTypeID": 3, + "name": "11.15.0.1718", + "slug": "11-15-0-1718" + }, + { + "id": 5902, + "gameVersionTypeID": 3, + "name": "11.15.0.1719", + "slug": "11-15-0-1719" + }, + { + "id": 5903, + "gameVersionTypeID": 3, + "name": "11.15.0.1720", + "slug": "11-15-0-1720" + }, + { + "id": 5904, + "gameVersionTypeID": 3, + "name": "11.15.0.1721", + "slug": "11-15-0-1721" + }, + { + "id": 5905, + "gameVersionTypeID": 3, + "name": "11.15.1.1722", + "slug": "11-15-1-1722" + }, + { + "id": 5906, + "gameVersionTypeID": 3, + "name": "11.15.1.1723", + "slug": "11-15-1-1723" + }, + { + "id": 5907, + "gameVersionTypeID": 3, + "name": "11.15.1.1724", + "slug": "11-15-1-1724" + }, + { + "id": 5908, + "gameVersionTypeID": 3, + "name": "11.15.1.1725", + "slug": "11-15-1-1725" + }, + { + "id": 5909, + "gameVersionTypeID": 3, + "name": "11.15.1.1726", + "slug": "11-15-1-1726" + }, + { + "id": 5910, + "gameVersionTypeID": 3, + "name": "11.15.1.1727", + "slug": "11-15-1-1727" + }, + { + "id": 5911, + "gameVersionTypeID": 3, + "name": "11.15.1.1729", + "slug": "11-15-1-1729" + }, + { + "id": 5912, + "gameVersionTypeID": 5, + "name": "1.7.3", + "slug": "1-7-3" + }, + { + "id": 5913, + "gameVersionTypeID": 3, + "name": "11.15.1.1730", + "slug": "11-15-1-1730" + }, + { + "id": 5914, + "gameVersionTypeID": 3, + "name": "11.15.1.1731", + "slug": "11-15-1-1731" + }, + { + "id": 5915, + "gameVersionTypeID": 3, + "name": "11.15.1.1732", + "slug": "11-15-1-1732" + }, + { + "id": 5916, + "gameVersionTypeID": 3, + "name": "11.15.1.1733", + "slug": "11-15-1-1733" + }, + { + "id": 5917, + "gameVersionTypeID": 3, + "name": "11.15.1.1734", + "slug": "11-15-1-1734" + }, + { + "id": 5918, + "gameVersionTypeID": 3, + "name": "11.15.1.1735", + "slug": "11-15-1-1735" + }, + { + "id": 5919, + "gameVersionTypeID": 3, + "name": "11.15.1.1736", + "slug": "11-15-1-1736" + }, + { + "id": 5920, + "gameVersionTypeID": 3, + "name": "11.15.1.1737", + "slug": "11-15-1-1737" + }, + { + "id": 5921, + "gameVersionTypeID": 3, + "name": "11.15.1.1738", + "slug": "11-15-1-1738" + }, + { + "id": 5922, + "gameVersionTypeID": 3, + "name": "11.15.1.1739", + "slug": "11-15-1-1739" + }, + { + "id": 5923, + "gameVersionTypeID": 3, + "name": "11.15.1.1740", + "slug": "11-15-1-1740" + }, + { + "id": 5924, + "gameVersionTypeID": 3, + "name": "11.15.1.1741", + "slug": "11-15-1-1741" + }, + { + "id": 5925, + "gameVersionTypeID": 3, + "name": "11.15.1.1742", + "slug": "11-15-1-1742" + }, + { + "id": 5926, + "gameVersionTypeID": 3, + "name": "11.15.1.1743", + "slug": "11-15-1-1743" + }, + { + "id": 5927, + "gameVersionTypeID": 3, + "name": "11.15.1.1744", + "slug": "11-15-1-1744" + }, + { + "id": 5928, + "gameVersionTypeID": 3, + "name": "11.15.1.1745", + "slug": "11-15-1-1745" + }, + { + "id": 5929, + "gameVersionTypeID": 3, + "name": "11.15.1.1746", + "slug": "11-15-1-1746" + }, + { + "id": 5930, + "gameVersionTypeID": 3, + "name": "11.15.1.1747", + "slug": "11-15-1-1747" + }, + { + "id": 5931, + "gameVersionTypeID": 3, + "name": "11.15.1.1748", + "slug": "11-15-1-1748" + }, + { + "id": 5932, + "gameVersionTypeID": 3, + "name": "11.15.1.1749", + "slug": "11-15-1-1749" + }, + { + "id": 5933, + "gameVersionTypeID": 3, + "name": "11.15.1.1750", + "slug": "11-15-1-1750" + }, + { + "id": 5934, + "gameVersionTypeID": 3, + "name": "11.15.1.1751", + "slug": "11-15-1-1751" + }, + { + "id": 5935, + "gameVersionTypeID": 3, + "name": "11.15.1.1752", + "slug": "11-15-1-1752" + }, + { + "id": 5936, + "gameVersionTypeID": 3, + "name": "11.15.1.1754", + "slug": "11-15-1-1754" + }, + { + "id": 5937, + "gameVersionTypeID": 3, + "name": "11.15.1.1755", + "slug": "11-15-1-1755" + }, + { + "id": 5938, + "gameVersionTypeID": 3, + "name": "11.15.1.1756", + "slug": "11-15-1-1756" + }, + { + "id": 5939, + "gameVersionTypeID": 3, + "name": "11.15.1.1757", + "slug": "11-15-1-1757" + }, + { + "id": 5940, + "gameVersionTypeID": 3, + "name": "11.15.1.1758", + "slug": "11-15-1-1758" + }, + { + "id": 5941, + "gameVersionTypeID": 3, + "name": "11.15.1.1759", + "slug": "11-15-1-1759" + }, + { + "id": 5942, + "gameVersionTypeID": 3, + "name": "11.15.1.1760", + "slug": "11-15-1-1760" + }, + { + "id": 5943, + "gameVersionTypeID": 3, + "name": "11.15.1.1761", + "slug": "11-15-1-1761" + }, + { + "id": 5944, + "gameVersionTypeID": 3, + "name": "11.15.1.1762", + "slug": "11-15-1-1762" + }, + { + "id": 5945, + "gameVersionTypeID": 3, + "name": "11.15.1.1763", + "slug": "11-15-1-1763" + }, + { + "id": 5946, + "gameVersionTypeID": 552, + "name": "1.9", + "slug": "1-9" + }, + { + "id": 5947, + "gameVersionTypeID": 3, + "name": "11.15.1.1764", + "slug": "11-15-1-1764" + }, + { + "id": 5948, + "gameVersionTypeID": 3, + "name": "11.15.1.1765", + "slug": "11-15-1-1765" + }, + { + "id": 5949, + "gameVersionTypeID": 3, + "name": "12.16.0.1766", + "slug": "12-16-0-1766" + }, + { + "id": 5950, + "gameVersionTypeID": 3, + "name": "12.16.0.1767", + "slug": "12-16-0-1767" + }, + { + "id": 5951, + "gameVersionTypeID": 3, + "name": "12.16.0.1768", + "slug": "12-16-0-1768" + }, + { + "id": 5952, + "gameVersionTypeID": 3, + "name": "12.16.0.1769", + "slug": "12-16-0-1769" + }, + { + "id": 5953, + "gameVersionTypeID": 3, + "name": "12.16.0.1770", + "slug": "12-16-0-1770" + }, + { + "id": 5954, + "gameVersionTypeID": 3, + "name": "12.16.0.1771", + "slug": "12-16-0-1771" + }, + { + "id": 5955, + "gameVersionTypeID": 3, + "name": "12.16.0.1772", + "slug": "12-16-0-1772" + }, + { + "id": 5956, + "gameVersionTypeID": 3, + "name": "12.16.0.1773", + "slug": "12-16-0-1773" + }, + { + "id": 5957, + "gameVersionTypeID": 3, + "name": "12.16.0.1774", + "slug": "12-16-0-1774" + }, + { + "id": 5958, + "gameVersionTypeID": 3, + "name": "12.16.0.1775", + "slug": "12-16-0-1775" + }, + { + "id": 5959, + "gameVersionTypeID": 3, + "name": "12.16.0.1776", + "slug": "12-16-0-1776" + }, + { + "id": 5960, + "gameVersionTypeID": 3, + "name": "11.15.1.1777", + "slug": "11-15-1-1777" + }, + { + "id": 5961, + "gameVersionTypeID": 3, + "name": "12.16.0.1778", + "slug": "12-16-0-1778" + }, + { + "id": 5962, + "gameVersionTypeID": 3, + "name": "12.16.0.1779", + "slug": "12-16-0-1779" + }, + { + "id": 5963, + "gameVersionTypeID": 3, + "name": "12.16.0.1780", + "slug": "12-16-0-1780" + }, + { + "id": 5964, + "gameVersionTypeID": 3, + "name": "12.16.0.1781", + "slug": "12-16-0-1781" + }, + { + "id": 5965, + "gameVersionTypeID": 3, + "name": "12.16.0.1782", + "slug": "12-16-0-1782" + }, + { + "id": 5966, + "gameVersionTypeID": 3, + "name": "11.15.1.1783", + "slug": "11-15-1-1783" + }, + { + "id": 5967, + "gameVersionTypeID": 3, + "name": "12.16.0.1784", + "slug": "12-16-0-1784" + }, + { + "id": 5968, + "gameVersionTypeID": 3, + "name": "11.15.1.1785", + "slug": "11-15-1-1785" + }, + { + "id": 5969, + "gameVersionTypeID": 3, + "name": "12.16.0.1786", + "slug": "12-16-0-1786" + }, + { + "id": 5970, + "gameVersionTypeID": 3, + "name": "12.16.0.1787", + "slug": "12-16-0-1787" + }, + { + "id": 5971, + "gameVersionTypeID": 3, + "name": "12.16.0.1788", + "slug": "12-16-0-1788" + }, + { + "id": 5972, + "gameVersionTypeID": 3, + "name": "12.16.0.1789", + "slug": "12-16-0-1789" + }, + { + "id": 5973, + "gameVersionTypeID": 3, + "name": "12.16.0.1790", + "slug": "12-16-0-1790" + }, + { + "id": 5974, + "gameVersionTypeID": 3, + "name": "11.15.1.1791", + "slug": "11-15-1-1791" + }, + { + "id": 5975, + "gameVersionTypeID": 3, + "name": "12.16.0.1792", + "slug": "12-16-0-1792" + }, + { + "id": 5976, + "gameVersionTypeID": 3, + "name": "12.16.0.1793", + "slug": "12-16-0-1793" + }, + { + "id": 5977, + "gameVersionTypeID": 3, + "name": "11.15.1.1794", + "slug": "11-15-1-1794" + }, + { + "id": 5978, + "gameVersionTypeID": 3, + "name": "12.16.0.1795", + "slug": "12-16-0-1795" + }, + { + "id": 5979, + "gameVersionTypeID": 3, + "name": "12.16.0.1796", + "slug": "12-16-0-1796" + }, + { + "id": 5980, + "gameVersionTypeID": 3, + "name": "12.16.0.1797", + "slug": "12-16-0-1797" + }, + { + "id": 5981, + "gameVersionTypeID": 3, + "name": "12.16.0.1798", + "slug": "12-16-0-1798" + }, + { + "id": 5982, + "gameVersionTypeID": 3, + "name": "12.16.0.1799", + "slug": "12-16-0-1799" + }, + { + "id": 5983, + "gameVersionTypeID": 3, + "name": "12.16.0.1800", + "slug": "12-16-0-1800" + }, + { + "id": 5984, + "gameVersionTypeID": 3, + "name": "12.16.0.1801", + "slug": "12-16-0-1801" + }, + { + "id": 5985, + "gameVersionTypeID": 3, + "name": "12.16.0.1802", + "slug": "12-16-0-1802" + }, + { + "id": 5986, + "gameVersionTypeID": 3, + "name": "12.16.0.1803", + "slug": "12-16-0-1803" + }, + { + "id": 5987, + "gameVersionTypeID": 3, + "name": "12.16.0.1804", + "slug": "12-16-0-1804" + }, + { + "id": 5988, + "gameVersionTypeID": 3, + "name": "12.16.0.1805", + "slug": "12-16-0-1805" + }, + { + "id": 5989, + "gameVersionTypeID": 3, + "name": "12.16.0.1806", + "slug": "12-16-0-1806" + }, + { + "id": 5990, + "gameVersionTypeID": 3, + "name": "12.16.0.1807", + "slug": "12-16-0-1807" + }, + { + "id": 5991, + "gameVersionTypeID": 3, + "name": "11.15.1.1808", + "slug": "11-15-1-1808" + }, + { + "id": 5992, + "gameVersionTypeID": 3, + "name": "12.16.0.1809", + "slug": "12-16-0-1809" + }, + { + "id": 5993, + "gameVersionTypeID": 3, + "name": "12.16.0.1810", + "slug": "12-16-0-1810" + }, + { + "id": 5994, + "gameVersionTypeID": 3, + "name": "12.16.0.1811", + "slug": "12-16-0-1811" + }, + { + "id": 5995, + "gameVersionTypeID": 3, + "name": "12.16.0.1812", + "slug": "12-16-0-1812" + }, + { + "id": 5996, + "gameVersionTypeID": 3, + "name": "12.16.0.1813", + "slug": "12-16-0-1813" + }, + { + "id": 5997, + "gameVersionTypeID": 552, + "name": "1.9.2", + "slug": "1-9-2" + }, + { + "id": 5998, + "gameVersionTypeID": 552, + "name": "1.9.1", + "slug": "1-9-1" + }, + { + "id": 5999, + "gameVersionTypeID": 3, + "name": "12.16.0.1814", + "slug": "12-16-0-1814" + }, + { + "id": 6000, + "gameVersionTypeID": 3, + "name": "12.16.0.1815", + "slug": "12-16-0-1815" + }, + { + "id": 6001, + "gameVersionTypeID": 3, + "name": "12.16.0.1816", + "slug": "12-16-0-1816" + }, + { + "id": 6004, + "gameVersionTypeID": 3, + "name": "12.16.0.1817", + "slug": "12-16-0-1817" + }, + { + "id": 6005, + "gameVersionTypeID": 3, + "name": "12.16.0.1819", + "slug": "12-16-0-1819" + }, + { + "id": 6006, + "gameVersionTypeID": 3, + "name": "12.16.0.1820", + "slug": "12-16-0-1820" + }, + { + "id": 6007, + "gameVersionTypeID": 3, + "name": "12.16.0.1821", + "slug": "12-16-0-1821" + }, + { + "id": 6008, + "gameVersionTypeID": 3, + "name": "12.16.0.1822", + "slug": "12-16-0-1822" + }, + { + "id": 6009, + "gameVersionTypeID": 3, + "name": "12.16.0.1823", + "slug": "12-16-0-1823" + }, + { + "id": 6010, + "gameVersionTypeID": 3, + "name": "12.16.0.1824", + "slug": "12-16-0-1824" + }, + { + "id": 6011, + "gameVersionTypeID": 3, + "name": "12.16.0.1825", + "slug": "12-16-0-1825" + }, + { + "id": 6012, + "gameVersionTypeID": 3, + "name": "12.16.0.1826", + "slug": "12-16-0-1826" + }, + { + "id": 6013, + "gameVersionTypeID": 3, + "name": "12.16.0.1827", + "slug": "12-16-0-1827" + }, + { + "id": 6014, + "gameVersionTypeID": 3, + "name": "12.16.0.1828", + "slug": "12-16-0-1828" + }, + { + "id": 6015, + "gameVersionTypeID": 3, + "name": "12.16.0.1829", + "slug": "12-16-0-1829" + }, + { + "id": 6016, + "gameVersionTypeID": 3, + "name": "12.16.0.1830", + "slug": "12-16-0-1830" + }, + { + "id": 6017, + "gameVersionTypeID": 3, + "name": "12.16.0.1831", + "slug": "12-16-0-1831" + }, + { + "id": 6018, + "gameVersionTypeID": 3, + "name": "12.16.0.1832", + "slug": "12-16-0-1832" + }, + { + "id": 6019, + "gameVersionTypeID": 3, + "name": "12.16.0.1833", + "slug": "12-16-0-1833" + }, + { + "id": 6020, + "gameVersionTypeID": 3, + "name": "12.16.0.1834", + "slug": "12-16-0-1834" + }, + { + "id": 6021, + "gameVersionTypeID": 3, + "name": "12.16.0.1835", + "slug": "12-16-0-1835" + }, + { + "id": 6022, + "gameVersionTypeID": 3, + "name": "12.16.0.1836", + "slug": "12-16-0-1836" + }, + { + "id": 6023, + "gameVersionTypeID": 3, + "name": "12.16.0.1837", + "slug": "12-16-0-1837" + }, + { + "id": 6024, + "gameVersionTypeID": 3, + "name": "12.16.0.1838", + "slug": "12-16-0-1838" + }, + { + "id": 6025, + "gameVersionTypeID": 3, + "name": "12.16.0.1839", + "slug": "12-16-0-1839" + }, + { + "id": 6026, + "gameVersionTypeID": 3, + "name": "12.16.0.1840", + "slug": "12-16-0-1840" + }, + { + "id": 6027, + "gameVersionTypeID": 3, + "name": "12.16.0.1841", + "slug": "12-16-0-1841" + }, + { + "id": 6028, + "gameVersionTypeID": 3, + "name": "12.16.0.1842", + "slug": "12-16-0-1842" + }, + { + "id": 6029, + "gameVersionTypeID": 3, + "name": "12.16.0.1843", + "slug": "12-16-0-1843" + }, + { + "id": 6030, + "gameVersionTypeID": 3, + "name": "12.16.0.1844", + "slug": "12-16-0-1844" + }, + { + "id": 6031, + "gameVersionTypeID": 3, + "name": "12.16.0.1845", + "slug": "12-16-0-1845" + }, + { + "id": 6032, + "gameVersionTypeID": 3, + "name": "12.16.0.1846", + "slug": "12-16-0-1846" + }, + { + "id": 6033, + "gameVersionTypeID": 3, + "name": "11.15.1.1847", + "slug": "11-15-1-1847" + }, + { + "id": 6034, + "gameVersionTypeID": 3, + "name": "12.16.0.1848", + "slug": "12-16-0-1848" + }, + { + "id": 6035, + "gameVersionTypeID": 3, + "name": "12.16.0.1849", + "slug": "12-16-0-1849" + }, + { + "id": 6036, + "gameVersionTypeID": 3, + "name": "12.16.0.1850", + "slug": "12-16-0-1850" + }, + { + "id": 6037, + "gameVersionTypeID": 3, + "name": "12.16.0.1851", + "slug": "12-16-0-1851" + }, + { + "id": 6038, + "gameVersionTypeID": 3, + "name": "12.16.0.1852", + "slug": "12-16-0-1852" + }, + { + "id": 6039, + "gameVersionTypeID": 3, + "name": "12.16.0.1853", + "slug": "12-16-0-1853" + }, + { + "id": 6040, + "gameVersionTypeID": 3, + "name": "12.16.0.1854", + "slug": "12-16-0-1854" + }, + { + "id": 6041, + "gameVersionTypeID": 3, + "name": "11.15.1.1855", + "slug": "11-15-1-1855" + }, + { + "id": 6042, + "gameVersionTypeID": 3, + "name": "12.16.0.1856", + "slug": "12-16-0-1856" + }, + { + "id": 6043, + "gameVersionTypeID": 3, + "name": "12.16.0.1857", + "slug": "12-16-0-1857" + }, + { + "id": 6044, + "gameVersionTypeID": 3, + "name": "12.16.0.1858", + "slug": "12-16-0-1858" + }, + { + "id": 6045, + "gameVersionTypeID": 3, + "name": "12.16.0.1859", + "slug": "12-16-0-1859" + }, + { + "id": 6046, + "gameVersionTypeID": 3, + "name": "12.16.0.1860", + "slug": "12-16-0-1860" + }, + { + "id": 6047, + "gameVersionTypeID": 3, + "name": "12.16.0.1861", + "slug": "12-16-0-1861" + }, + { + "id": 6048, + "gameVersionTypeID": 3, + "name": "12.16.0.1862", + "slug": "12-16-0-1862" + }, + { + "id": 6049, + "gameVersionTypeID": 3, + "name": "12.16.0.1863", + "slug": "12-16-0-1863" + }, + { + "id": 6050, + "gameVersionTypeID": 3, + "name": "12.16.0.1864", + "slug": "12-16-0-1864" + }, + { + "id": 6051, + "gameVersionTypeID": 3, + "name": "12.16.0.1865", + "slug": "12-16-0-1865" + }, + { + "id": 6053, + "gameVersionTypeID": 3, + "name": "12.16.0.1866", + "slug": "12-16-0-1866" + }, + { + "id": 6054, + "gameVersionTypeID": 3, + "name": "12.16.0.1867", + "slug": "12-16-0-1867" + }, + { + "id": 6055, + "gameVersionTypeID": 3, + "name": "12.16.0.1868", + "slug": "12-16-0-1868" + }, + { + "id": 6056, + "gameVersionTypeID": 3, + "name": "12.16.0.1869", + "slug": "12-16-0-1869" + }, + { + "id": 6057, + "gameVersionTypeID": 3, + "name": "12.16.0.1870", + "slug": "12-16-0-1870" + }, + { + "id": 6058, + "gameVersionTypeID": 3, + "name": "12.16.0.1871", + "slug": "12-16-0-1871" + }, + { + "id": 6059, + "gameVersionTypeID": 3, + "name": "11.15.1.1872", + "slug": "11-15-1-1872" + }, + { + "id": 6060, + "gameVersionTypeID": 3, + "name": "11.15.1.1873", + "slug": "11-15-1-1873" + }, + { + "id": 6061, + "gameVersionTypeID": 3, + "name": "12.16.0.1874", + "slug": "12-16-0-1874" + }, + { + "id": 6062, + "gameVersionTypeID": 3, + "name": "11.15.1.1875", + "slug": "11-15-1-1875" + }, + { + "id": 6063, + "gameVersionTypeID": 3, + "name": "12.16.0.1877", + "slug": "12-16-0-1877" + }, + { + "id": 6064, + "gameVersionTypeID": 3, + "name": "12.16.0.1878", + "slug": "12-16-0-1878" + }, + { + "id": 6065, + "gameVersionTypeID": 3, + "name": "12.16.0.1879", + "slug": "12-16-0-1879" + }, + { + "id": 6066, + "gameVersionTypeID": 3, + "name": "12.16.0.1880", + "slug": "12-16-0-1880" + }, + { + "id": 6067, + "gameVersionTypeID": 3, + "name": "12.16.0.1881", + "slug": "12-16-0-1881" + }, + { + "id": 6068, + "gameVersionTypeID": 3, + "name": "12.16.0.1882", + "slug": "12-16-0-1882" + }, + { + "id": 6069, + "gameVersionTypeID": 3, + "name": "12.16.0.1883", + "slug": "12-16-0-1883" + }, + { + "id": 6070, + "gameVersionTypeID": 3, + "name": "12.16.0.1884", + "slug": "12-16-0-1884" + }, + { + "id": 6071, + "gameVersionTypeID": 3, + "name": "12.16.0.1885", + "slug": "12-16-0-1885" + }, + { + "id": 6072, + "gameVersionTypeID": 3, + "name": "12.16.0.1886", + "slug": "12-16-0-1886" + }, + { + "id": 6073, + "gameVersionTypeID": 3, + "name": "12.16.1.1887", + "slug": "12-16-1-1887" + }, + { + "id": 6074, + "gameVersionTypeID": 3, + "name": "12.16.1.1888", + "slug": "12-16-1-1888" + }, + { + "id": 6075, + "gameVersionTypeID": 3, + "name": "12.16.1.1889", + "slug": "12-16-1-1889" + }, + { + "id": 6076, + "gameVersionTypeID": 3, + "name": "11.15.1.1890", + "slug": "11-15-1-1890" + }, + { + "id": 6077, + "gameVersionTypeID": 3, + "name": "12.16.1.1891", + "slug": "12-16-1-1891" + }, + { + "id": 6078, + "gameVersionTypeID": 3, + "name": "12.16.1.1892", + "slug": "12-16-1-1892" + }, + { + "id": 6079, + "gameVersionTypeID": 3, + "name": "12.16.1.1893", + "slug": "12-16-1-1893" + }, + { + "id": 6080, + "gameVersionTypeID": 3, + "name": "12.16.1.1894", + "slug": "12-16-1-1894" + }, + { + "id": 6081, + "gameVersionTypeID": 3, + "name": "12.16.1.1895", + "slug": "12-16-1-1895" + }, + { + "id": 6082, + "gameVersionTypeID": 3, + "name": "12.16.1.1896", + "slug": "12-16-1-1896" + }, + { + "id": 6083, + "gameVersionTypeID": 3, + "name": "12.16.1.1897", + "slug": "12-16-1-1897" + }, + { + "id": 6084, + "gameVersionTypeID": 552, + "name": "1.9.4", + "slug": "1-9-4" + }, + { + "id": 6085, + "gameVersionTypeID": 552, + "name": "1.9.3", + "slug": "1-9-3" + }, + { + "id": 6086, + "gameVersionTypeID": 3, + "name": "12.16.1.1898", + "slug": "12-16-1-1898" + }, + { + "id": 6087, + "gameVersionTypeID": 3, + "name": "12.16.1.1899", + "slug": "12-16-1-1899" + }, + { + "id": 6088, + "gameVersionTypeID": 3, + "name": "12.16.1.1900", + "slug": "12-16-1-1900" + }, + { + "id": 6089, + "gameVersionTypeID": 3, + "name": "12.16.1.1901", + "slug": "12-16-1-1901" + }, + { + "id": 6090, + "gameVersionTypeID": 3, + "name": "11.15.1.1902", + "slug": "11-15-1-1902" + }, + { + "id": 6091, + "gameVersionTypeID": 3, + "name": "12.16.1.1904", + "slug": "12-16-1-1904" + }, + { + "id": 6092, + "gameVersionTypeID": 3, + "name": "12.16.1.1905", + "slug": "12-16-1-1905" + }, + { + "id": 6093, + "gameVersionTypeID": 3, + "name": "12.16.1.1906", + "slug": "12-16-1-1906" + }, + { + "id": 6094, + "gameVersionTypeID": 3, + "name": "12.16.1.1907", + "slug": "12-16-1-1907" + }, + { + "id": 6095, + "gameVersionTypeID": 3, + "name": "12.16.1.1908", + "slug": "12-16-1-1908" + }, + { + "id": 6096, + "gameVersionTypeID": 3, + "name": "12.16.1.1909", + "slug": "12-16-1-1909" + }, + { + "id": 6097, + "gameVersionTypeID": 3, + "name": "12.17.0.1908", + "slug": "12-17-0-1908" + }, + { + "id": 6098, + "gameVersionTypeID": 3, + "name": "12.17.0.1909", + "slug": "12-17-0-1909" + }, + { + "id": 6099, + "gameVersionTypeID": 3, + "name": "12.17.0.1910", + "slug": "12-17-0-1910" + }, + { + "id": 6100, + "gameVersionTypeID": 3, + "name": "12.17.0.1912", + "slug": "12-17-0-1912" + }, + { + "id": 6101, + "gameVersionTypeID": 3, + "name": "12.17.0.1913", + "slug": "12-17-0-1913" + }, + { + "id": 6102, + "gameVersionTypeID": 3, + "name": "12.17.0.1914", + "slug": "12-17-0-1914" + }, + { + "id": 6103, + "gameVersionTypeID": 3, + "name": "12.17.0.1915", + "slug": "12-17-0-1915" + }, + { + "id": 6104, + "gameVersionTypeID": 3, + "name": "12.17.0.1916", + "slug": "12-17-0-1916" + }, + { + "id": 6105, + "gameVersionTypeID": 3, + "name": "12.17.0.1917", + "slug": "12-17-0-1917" + }, + { + "id": 6106, + "gameVersionTypeID": 3, + "name": "12.17.0.1918", + "slug": "12-17-0-1918" + }, + { + "id": 6107, + "gameVersionTypeID": 3, + "name": "12.17.0.1919", + "slug": "12-17-0-1919" + }, + { + "id": 6108, + "gameVersionTypeID": 3, + "name": "12.17.0.1920", + "slug": "12-17-0-1920" + }, + { + "id": 6109, + "gameVersionTypeID": 3, + "name": "12.17.0.1921", + "slug": "12-17-0-1921" + }, + { + "id": 6110, + "gameVersionTypeID": 3, + "name": "12.17.0.1922", + "slug": "12-17-0-1922" + }, + { + "id": 6111, + "gameVersionTypeID": 3, + "name": "12.16.1.1923", + "slug": "12-16-1-1923" + }, + { + "id": 6112, + "gameVersionTypeID": 3, + "name": "12.17.0.1924", + "slug": "12-17-0-1924" + }, + { + "id": 6113, + "gameVersionTypeID": 3, + "name": "12.17.0.1925", + "slug": "12-17-0-1925" + }, + { + "id": 6114, + "gameVersionTypeID": 3, + "name": "12.17.0.1926", + "slug": "12-17-0-1926" + }, + { + "id": 6115, + "gameVersionTypeID": 3, + "name": "12.17.0.1927", + "slug": "12-17-0-1927" + }, + { + "id": 6116, + "gameVersionTypeID": 3, + "name": "12.17.0.1928", + "slug": "12-17-0-1928" + }, + { + "id": 6117, + "gameVersionTypeID": 3, + "name": "12.17.0.1929", + "slug": "12-17-0-1929" + }, + { + "id": 6118, + "gameVersionTypeID": 3, + "name": "12.17.0.1930", + "slug": "12-17-0-1930" + }, + { + "id": 6119, + "gameVersionTypeID": 3, + "name": "12.17.0.1931", + "slug": "12-17-0-1931" + }, + { + "id": 6120, + "gameVersionTypeID": 3, + "name": "12.17.0.1932", + "slug": "12-17-0-1932" + }, + { + "id": 6121, + "gameVersionTypeID": 3, + "name": "12.17.0.1933", + "slug": "12-17-0-1933" + }, + { + "id": 6122, + "gameVersionTypeID": 3, + "name": "12.16.1.1934", + "slug": "12-16-1-1934" + }, + { + "id": 6123, + "gameVersionTypeID": 3, + "name": "12.17.0.1935", + "slug": "12-17-0-1935" + }, + { + "id": 6124, + "gameVersionTypeID": 3, + "name": "12.17.0.1936", + "slug": "12-17-0-1936" + }, + { + "id": 6125, + "gameVersionTypeID": 3, + "name": "12.17.0.1937", + "slug": "12-17-0-1937" + }, + { + "id": 6126, + "gameVersionTypeID": 3, + "name": "12.16.1.1938", + "slug": "12-16-1-1938" + }, + { + "id": 6127, + "gameVersionTypeID": 3, + "name": "12.17.0.1939", + "slug": "12-17-0-1939" + }, + { + "id": 6128, + "gameVersionTypeID": 3, + "name": "12.17.0.1940", + "slug": "12-17-0-1940" + }, + { + "id": 6129, + "gameVersionTypeID": 3, + "name": "12.17.0.1941", + "slug": "12-17-0-1941" + }, + { + "id": 6130, + "gameVersionTypeID": 3, + "name": "12.16.0.1942", + "slug": "12-16-0-1942" + }, + { + "id": 6131, + "gameVersionTypeID": 3, + "name": "12.17.0.1943", + "slug": "12-17-0-1943" + }, + { + "id": 6132, + "gameVersionTypeID": 3, + "name": "12.17.0.1944", + "slug": "12-17-0-1944" + }, + { + "id": 6133, + "gameVersionTypeID": 3, + "name": "12.17.0.1945", + "slug": "12-17-0-1945" + }, + { + "id": 6134, + "gameVersionTypeID": 3, + "name": "12.17.0.1946", + "slug": "12-17-0-1946" + }, + { + "id": 6135, + "gameVersionTypeID": 3, + "name": "12.17.0.1947", + "slug": "12-17-0-1947" + }, + { + "id": 6136, + "gameVersionTypeID": 3, + "name": "12.17.0.1948", + "slug": "12-17-0-1948" + }, + { + "id": 6137, + "gameVersionTypeID": 3, + "name": "12.17.0.1949", + "slug": "12-17-0-1949" + }, + { + "id": 6138, + "gameVersionTypeID": 3, + "name": "12.17.0.1950", + "slug": "12-17-0-1950" + }, + { + "id": 6139, + "gameVersionTypeID": 3, + "name": "12.17.0.1951", + "slug": "12-17-0-1951" + }, + { + "id": 6140, + "gameVersionTypeID": 3, + "name": "12.17.0.1952", + "slug": "12-17-0-1952" + }, + { + "id": 6141, + "gameVersionTypeID": 3, + "name": "12.17.0.1953", + "slug": "12-17-0-1953" + }, + { + "id": 6142, + "gameVersionTypeID": 3, + "name": "12.17.0.1954", + "slug": "12-17-0-1954" + }, + { + "id": 6143, + "gameVersionTypeID": 572, + "name": "1.10-Snapshot", + "slug": "1-10-snapshot" + }, + { + "id": 6144, + "gameVersionTypeID": 572, + "name": "1.10", + "slug": "1-10" + }, + { + "id": 6145, + "gameVersionTypeID": 3, + "name": "12.17.0.1955", + "slug": "12-17-0-1955" + }, + { + "id": 6146, + "gameVersionTypeID": 3, + "name": "12.17.0.1956", + "slug": "12-17-0-1956" + }, + { + "id": 6147, + "gameVersionTypeID": 3, + "name": "12.17.0.1957", + "slug": "12-17-0-1957" + }, + { + "id": 6148, + "gameVersionTypeID": 3, + "name": "12.17.0.1958", + "slug": "12-17-0-1958" + }, + { + "id": 6149, + "gameVersionTypeID": 3, + "name": "12.17.0.1959", + "slug": "12-17-0-1959" + }, + { + "id": 6150, + "gameVersionTypeID": 3, + "name": "12.17.0.1960", + "slug": "12-17-0-1960" + }, + { + "id": 6151, + "gameVersionTypeID": 3, + "name": "12.17.0.1961", + "slug": "12-17-0-1961" + }, + { + "id": 6152, + "gameVersionTypeID": 3, + "name": "12.17.0.1962", + "slug": "12-17-0-1962" + }, + { + "id": 6153, + "gameVersionTypeID": 3, + "name": "12.17.0.1963", + "slug": "12-17-0-1963" + }, + { + "id": 6154, + "gameVersionTypeID": 3, + "name": "12.17.0.1964", + "slug": "12-17-0-1964" + }, + { + "id": 6155, + "gameVersionTypeID": 3, + "name": "12.17.0.1965", + "slug": "12-17-0-1965" + }, + { + "id": 6156, + "gameVersionTypeID": 3, + "name": "12.17.0.1966", + "slug": "12-17-0-1966" + }, + { + "id": 6157, + "gameVersionTypeID": 3, + "name": "12.17.0.1967", + "slug": "12-17-0-1967" + }, + { + "id": 6158, + "gameVersionTypeID": 3, + "name": "12.17.0.1968", + "slug": "12-17-0-1968" + }, + { + "id": 6159, + "gameVersionTypeID": 3, + "name": "12.17.0.1969", + "slug": "12-17-0-1969" + }, + { + "id": 6160, + "gameVersionTypeID": 572, + "name": "1.10.1", + "slug": "1-10-1" + }, + { + "id": 6161, + "gameVersionTypeID": 3, + "name": "12.17.0.1970", + "slug": "12-17-0-1970" + }, + { + "id": 6162, + "gameVersionTypeID": 3, + "name": "12.17.0.1973", + "slug": "12-17-0-1973" + }, + { + "id": 6163, + "gameVersionTypeID": 3, + "name": "12.17.0.1974", + "slug": "12-17-0-1974" + }, + { + "id": 6164, + "gameVersionTypeID": 3, + "name": "12.17.0.1976", + "slug": "12-17-0-1976" + }, + { + "id": 6165, + "gameVersionTypeID": 3, + "name": "12.17.0.1978", + "slug": "12-17-0-1978" + }, + { + "id": 6166, + "gameVersionTypeID": 3, + "name": "12.17.0.1980", + "slug": "12-17-0-1980" + }, + { + "id": 6167, + "gameVersionTypeID": 3, + "name": "12.18.0.1981", + "slug": "12-18-0-1981" + }, + { + "id": 6168, + "gameVersionTypeID": 3, + "name": "12.18.0.1982", + "slug": "12-18-0-1982" + }, + { + "id": 6169, + "gameVersionTypeID": 3, + "name": "12.18.0.1983", + "slug": "12-18-0-1983" + }, + { + "id": 6170, + "gameVersionTypeID": 572, + "name": "1.10.2", + "slug": "1-10-2" + }, + { + "id": 6171, + "gameVersionTypeID": 3, + "name": "12.18.0.1984", + "slug": "12-18-0-1984" + }, + { + "id": 6172, + "gameVersionTypeID": 3, + "name": "12.18.0.1986", + "slug": "12-18-0-1986" + }, + { + "id": 6173, + "gameVersionTypeID": 3, + "name": "12.17.0.1987", + "slug": "12-17-0-1987" + }, + { + "id": 6174, + "gameVersionTypeID": 3, + "name": "12.18.0.1989", + "slug": "12-18-0-1989" + }, + { + "id": 6175, + "gameVersionTypeID": 3, + "name": "12.18.0.1991", + "slug": "12-18-0-1991" + }, + { + "id": 6176, + "gameVersionTypeID": 3, + "name": "12.18.0.1992", + "slug": "12-18-0-1992" + }, + { + "id": 6177, + "gameVersionTypeID": 3, + "name": "12.18.0.1993", + "slug": "12-18-0-1993" + }, + { + "id": 6178, + "gameVersionTypeID": 3, + "name": "12.18.0.1994", + "slug": "12-18-0-1994" + }, + { + "id": 6179, + "gameVersionTypeID": 3, + "name": "12.18.0.1995", + "slug": "12-18-0-1995" + }, + { + "id": 6180, + "gameVersionTypeID": 3, + "name": "12.18.0.1996", + "slug": "12-18-0-1996" + }, + { + "id": 6181, + "gameVersionTypeID": 3, + "name": "12.18.0.1997", + "slug": "12-18-0-1997" + }, + { + "id": 6182, + "gameVersionTypeID": 3, + "name": "12.18.0.1999", + "slug": "12-18-0-1999" + }, + { + "id": 6183, + "gameVersionTypeID": 3, + "name": "12.18.0.2000", + "slug": "12-18-0-2000" + }, + { + "id": 6184, + "gameVersionTypeID": 3, + "name": "12.18.0.2001", + "slug": "12-18-0-2001" + }, + { + "id": 6185, + "gameVersionTypeID": 3, + "name": "12.18.0.2002", + "slug": "12-18-0-2002" + }, + { + "id": 6186, + "gameVersionTypeID": 3, + "name": "12.18.0.2003", + "slug": "12-18-0-2003" + }, + { + "id": 6187, + "gameVersionTypeID": 3, + "name": "12.18.0.2004", + "slug": "12-18-0-2004" + }, + { + "id": 6188, + "gameVersionTypeID": 3, + "name": "12.18.0.2005", + "slug": "12-18-0-2005" + }, + { + "id": 6189, + "gameVersionTypeID": 3, + "name": "12.18.0.2006", + "slug": "12-18-0-2006" + }, + { + "id": 6190, + "gameVersionTypeID": 3, + "name": "12.18.0.2007", + "slug": "12-18-0-2007" + }, + { + "id": 6194, + "gameVersionTypeID": 3, + "name": "12.18.0.2008", + "slug": "12-18-0-2008" + }, + { + "id": 6195, + "gameVersionTypeID": 3, + "name": "12.18.0.2009", + "slug": "12-18-0-2009" + }, + { + "id": 6196, + "gameVersionTypeID": 3, + "name": "12.18.0.2010", + "slug": "12-18-0-2010" + }, + { + "id": 6197, + "gameVersionTypeID": 3, + "name": "12.18.1.2011", + "slug": "12-18-1-2011" + }, + { + "id": 6198, + "gameVersionTypeID": 3, + "name": "12.18.1.2012", + "slug": "12-18-1-2012" + }, + { + "id": 6199, + "gameVersionTypeID": 3, + "name": "12.18.1.2013", + "slug": "12-18-1-2013" + }, + { + "id": 6200, + "gameVersionTypeID": 3, + "name": "12.18.1.2014", + "slug": "12-18-1-2014" + }, + { + "id": 6201, + "gameVersionTypeID": 3, + "name": "12.17.0.1990", + "slug": "12-17-0-1990" + }, + { + "id": 6202, + "gameVersionTypeID": 3, + "name": "12.18.1.2015", + "slug": "12-18-1-2015" + }, + { + "id": 6203, + "gameVersionTypeID": 3, + "name": "12.18.1.2016", + "slug": "12-18-1-2016" + }, + { + "id": 6204, + "gameVersionTypeID": 3, + "name": "12.18.1.2017", + "slug": "12-18-1-2017" + }, + { + "id": 6205, + "gameVersionTypeID": 3, + "name": "12.18.1.2018", + "slug": "12-18-1-2018" + }, + { + "id": 6206, + "gameVersionTypeID": 3, + "name": "12.18.1.2019", + "slug": "12-18-1-2019" + }, + { + "id": 6207, + "gameVersionTypeID": 3, + "name": "12.18.1.2020", + "slug": "12-18-1-2020" + }, + { + "id": 6208, + "gameVersionTypeID": 3, + "name": "12.18.1.2021", + "slug": "12-18-1-2021" + }, + { + "id": 6209, + "gameVersionTypeID": 3, + "name": "12.18.1.2022", + "slug": "12-18-1-2022" + }, + { + "id": 6210, + "gameVersionTypeID": 3, + "name": "12.18.1.2023", + "slug": "12-18-1-2023" + }, + { + "id": 6211, + "gameVersionTypeID": 3, + "name": "12.18.1.2024", + "slug": "12-18-1-2024" + }, + { + "id": 6212, + "gameVersionTypeID": 3, + "name": "12.18.1.2025", + "slug": "12-18-1-2025" + }, + { + "id": 6213, + "gameVersionTypeID": 3, + "name": "12.18.1.2026", + "slug": "12-18-1-2026" + }, + { + "id": 6214, + "gameVersionTypeID": 3, + "name": "12.18.1.2027", + "slug": "12-18-1-2027" + }, + { + "id": 6215, + "gameVersionTypeID": 3, + "name": "12.18.1.2028", + "slug": "12-18-1-2028" + }, + { + "id": 6216, + "gameVersionTypeID": 3, + "name": "12.18.1.2029", + "slug": "12-18-1-2029" + }, + { + "id": 6217, + "gameVersionTypeID": 3, + "name": "12.18.1.2030", + "slug": "12-18-1-2030" + }, + { + "id": 6218, + "gameVersionTypeID": 3, + "name": "12.18.1.2031", + "slug": "12-18-1-2031" + }, + { + "id": 6219, + "gameVersionTypeID": 3, + "name": "12.18.1.2032", + "slug": "12-18-1-2032" + }, + { + "id": 6220, + "gameVersionTypeID": 3, + "name": "12.18.1.2033", + "slug": "12-18-1-2033" + }, + { + "id": 6221, + "gameVersionTypeID": 3, + "name": "12.18.1.2034", + "slug": "12-18-1-2034" + }, + { + "id": 6222, + "gameVersionTypeID": 3, + "name": "12.18.1.2035", + "slug": "12-18-1-2035" + }, + { + "id": 6223, + "gameVersionTypeID": 3, + "name": "12.18.1.2036", + "slug": "12-18-1-2036" + }, + { + "id": 6224, + "gameVersionTypeID": 3, + "name": "12.18.1.2037", + "slug": "12-18-1-2037" + }, + { + "id": 6225, + "gameVersionTypeID": 3, + "name": "12.18.1.2038", + "slug": "12-18-1-2038" + }, + { + "id": 6226, + "gameVersionTypeID": 3, + "name": "12.18.1.2039", + "slug": "12-18-1-2039" + }, + { + "id": 6227, + "gameVersionTypeID": 3, + "name": "12.18.1.2040", + "slug": "12-18-1-2040" + }, + { + "id": 6228, + "gameVersionTypeID": 3, + "name": "12.18.1.2041", + "slug": "12-18-1-2041" + }, + { + "id": 6229, + "gameVersionTypeID": 3, + "name": "12.18.1.2042", + "slug": "12-18-1-2042" + }, + { + "id": 6230, + "gameVersionTypeID": 3, + "name": "12.18.1.2043", + "slug": "12-18-1-2043" + }, + { + "id": 6231, + "gameVersionTypeID": 3, + "name": "12.18.1.2044", + "slug": "12-18-1-2044" + }, + { + "id": 6232, + "gameVersionTypeID": 3, + "name": "12.18.1.2045", + "slug": "12-18-1-2045" + }, + { + "id": 6233, + "gameVersionTypeID": 3, + "name": "12.18.1.2046", + "slug": "12-18-1-2046" + }, + { + "id": 6234, + "gameVersionTypeID": 3, + "name": "12.18.1.2047", + "slug": "12-18-1-2047" + }, + { + "id": 6235, + "gameVersionTypeID": 3, + "name": "12.18.1.2048", + "slug": "12-18-1-2048" + }, + { + "id": 6236, + "gameVersionTypeID": 3, + "name": "12.18.1.2049", + "slug": "12-18-1-2049" + }, + { + "id": 6237, + "gameVersionTypeID": 3, + "name": "12.18.1.2050", + "slug": "12-18-1-2050" + }, + { + "id": 6238, + "gameVersionTypeID": 3, + "name": "12.17.0.2051", + "slug": "12-17-0-2051" + }, + { + "id": 6239, + "gameVersionTypeID": 599, + "name": "1.11-Snapshot", + "slug": "1-11-snapshot" + }, + { + "id": 6241, + "gameVersionTypeID": 3, + "name": "12.18.1.2052", + "slug": "12-18-1-2052" + }, + { + "id": 6242, + "gameVersionTypeID": 3, + "name": "12.18.1.2053", + "slug": "12-18-1-2053" + }, + { + "id": 6243, + "gameVersionTypeID": 3, + "name": "12.18.1.2054", + "slug": "12-18-1-2054" + }, + { + "id": 6244, + "gameVersionTypeID": 3, + "name": "12.18.1.2055", + "slug": "12-18-1-2055" + }, + { + "id": 6245, + "gameVersionTypeID": 3, + "name": "12.18.1.2056", + "slug": "12-18-1-2056" + }, + { + "id": 6246, + "gameVersionTypeID": 3, + "name": "12.18.1.2057", + "slug": "12-18-1-2057" + }, + { + "id": 6247, + "gameVersionTypeID": 3, + "name": "12.18.1.2058", + "slug": "12-18-1-2058" + }, + { + "id": 6248, + "gameVersionTypeID": 3, + "name": "12.18.1.2059", + "slug": "12-18-1-2059" + }, + { + "id": 6249, + "gameVersionTypeID": 3, + "name": "12.18.1.2060", + "slug": "12-18-1-2060" + }, + { + "id": 6250, + "gameVersionTypeID": 3, + "name": "12.18.1.2061", + "slug": "12-18-1-2061" + }, + { + "id": 6251, + "gameVersionTypeID": 3, + "name": "12.18.1.2062", + "slug": "12-18-1-2062" + }, + { + "id": 6252, + "gameVersionTypeID": 3, + "name": "12.18.1.2063", + "slug": "12-18-1-2063" + }, + { + "id": 6253, + "gameVersionTypeID": 3, + "name": "12.18.1.2064", + "slug": "12-18-1-2064" + }, + { + "id": 6254, + "gameVersionTypeID": 3, + "name": "12.18.1.2065", + "slug": "12-18-1-2065" + }, + { + "id": 6255, + "gameVersionTypeID": 3, + "name": "12.18.1.2066", + "slug": "12-18-1-2066" + }, + { + "id": 6256, + "gameVersionTypeID": 3, + "name": "12.18.1.2067", + "slug": "12-18-1-2067" + }, + { + "id": 6257, + "gameVersionTypeID": 3, + "name": "12.18.1.2068", + "slug": "12-18-1-2068" + }, + { + "id": 6258, + "gameVersionTypeID": 3, + "name": "12.18.1.2069", + "slug": "12-18-1-2069" + }, + { + "id": 6259, + "gameVersionTypeID": 3, + "name": "12.18.1.2070", + "slug": "12-18-1-2070" + }, + { + "id": 6260, + "gameVersionTypeID": 3, + "name": "12.18.1.2071", + "slug": "12-18-1-2071" + }, + { + "id": 6261, + "gameVersionTypeID": 3, + "name": "12.18.1.2072", + "slug": "12-18-1-2072" + }, + { + "id": 6262, + "gameVersionTypeID": 3, + "name": "12.18.1.2073", + "slug": "12-18-1-2073" + }, + { + "id": 6263, + "gameVersionTypeID": 3, + "name": "12.18.1.2074", + "slug": "12-18-1-2074" + }, + { + "id": 6264, + "gameVersionTypeID": 3, + "name": "12.18.1.2075", + "slug": "12-18-1-2075" + }, + { + "id": 6265, + "gameVersionTypeID": 3, + "name": "12.18.1.2076", + "slug": "12-18-1-2076" + }, + { + "id": 6266, + "gameVersionTypeID": 3, + "name": "12.18.1.2077", + "slug": "12-18-1-2077" + }, + { + "id": 6267, + "gameVersionTypeID": 3, + "name": "12.18.1.2078", + "slug": "12-18-1-2078" + }, + { + "id": 6268, + "gameVersionTypeID": 3, + "name": "12.18.1.2079", + "slug": "12-18-1-2079" + }, + { + "id": 6269, + "gameVersionTypeID": 3, + "name": "12.18.1.2080", + "slug": "12-18-1-2080" + }, + { + "id": 6270, + "gameVersionTypeID": 3, + "name": "12.18.1.2081", + "slug": "12-18-1-2081" + }, + { + "id": 6271, + "gameVersionTypeID": 3, + "name": "12.18.1.2082", + "slug": "12-18-1-2082" + }, + { + "id": 6272, + "gameVersionTypeID": 3, + "name": "12.18.1.2083", + "slug": "12-18-1-2083" + }, + { + "id": 6273, + "gameVersionTypeID": 3, + "name": "12.18.1.2084", + "slug": "12-18-1-2084" + }, + { + "id": 6274, + "gameVersionTypeID": 3, + "name": "12.18.1.2085", + "slug": "12-18-1-2085" + }, + { + "id": 6275, + "gameVersionTypeID": 3, + "name": "12.18.1.2086", + "slug": "12-18-1-2086" + }, + { + "id": 6276, + "gameVersionTypeID": 3, + "name": "12.18.1.2087", + "slug": "12-18-1-2087" + }, + { + "id": 6277, + "gameVersionTypeID": 3, + "name": "12.18.1.2088", + "slug": "12-18-1-2088" + }, + { + "id": 6279, + "gameVersionTypeID": 3, + "name": "12.18.1.2089", + "slug": "12-18-1-2089" + }, + { + "id": 6280, + "gameVersionTypeID": 3, + "name": "12.18.1.2090", + "slug": "12-18-1-2090" + }, + { + "id": 6281, + "gameVersionTypeID": 3, + "name": "12.18.1.2091", + "slug": "12-18-1-2091" + }, + { + "id": 6282, + "gameVersionTypeID": 3, + "name": "12.18.1.2092", + "slug": "12-18-1-2092" + }, + { + "id": 6283, + "gameVersionTypeID": 3, + "name": "12.18.1.2093", + "slug": "12-18-1-2093" + }, + { + "id": 6284, + "gameVersionTypeID": 3, + "name": "12.18.1.2094", + "slug": "12-18-1-2094" + }, + { + "id": 6285, + "gameVersionTypeID": 3, + "name": "12.18.1.2095", + "slug": "12-18-1-2095" + }, + { + "id": 6286, + "gameVersionTypeID": 3, + "name": "12.18.2.2097", + "slug": "12-18-2-2097" + }, + { + "id": 6287, + "gameVersionTypeID": 3, + "name": "12.18.2.2098", + "slug": "12-18-2-2098" + }, + { + "id": 6288, + "gameVersionTypeID": 3, + "name": "12.18.2.2099", + "slug": "12-18-2-2099" + }, + { + "id": 6289, + "gameVersionTypeID": 3, + "name": "12.18.2.2100", + "slug": "12-18-2-2100" + }, + { + "id": 6290, + "gameVersionTypeID": 3, + "name": "12.18.2.2101", + "slug": "12-18-2-2101" + }, + { + "id": 6291, + "gameVersionTypeID": 3, + "name": "12.18.2.2102", + "slug": "12-18-2-2102" + }, + { + "id": 6292, + "gameVersionTypeID": 3, + "name": "12.18.2.2103", + "slug": "12-18-2-2103" + }, + { + "id": 6293, + "gameVersionTypeID": 3, + "name": "12.18.2.2104", + "slug": "12-18-2-2104" + }, + { + "id": 6294, + "gameVersionTypeID": 3, + "name": "12.18.2.2105", + "slug": "12-18-2-2105" + }, + { + "id": 6295, + "gameVersionTypeID": 3, + "name": "12.18.2.2106", + "slug": "12-18-2-2106" + }, + { + "id": 6297, + "gameVersionTypeID": 3, + "name": "12.18.2.2107", + "slug": "12-18-2-2107" + }, + { + "id": 6298, + "gameVersionTypeID": 615, + "name": "0.16", + "slug": "0-16" + }, + { + "id": 6299, + "gameVersionTypeID": 3, + "name": "12.18.2.2109", + "slug": "12-18-2-2109" + }, + { + "id": 6300, + "gameVersionTypeID": 3, + "name": "12.18.2.2110", + "slug": "12-18-2-2110" + }, + { + "id": 6301, + "gameVersionTypeID": 3, + "name": "12.18.2.2111", + "slug": "12-18-2-2111" + }, + { + "id": 6302, + "gameVersionTypeID": 3, + "name": "12.18.2.2112", + "slug": "12-18-2-2112" + }, + { + "id": 6303, + "gameVersionTypeID": 3, + "name": "12.18.2.2113", + "slug": "12-18-2-2113" + }, + { + "id": 6304, + "gameVersionTypeID": 3, + "name": "12.18.2.2114", + "slug": "12-18-2-2114" + }, + { + "id": 6305, + "gameVersionTypeID": 3, + "name": "12.18.2.2115", + "slug": "12-18-2-2115" + }, + { + "id": 6306, + "gameVersionTypeID": 3, + "name": "12.18.2.2116", + "slug": "12-18-2-2116" + }, + { + "id": 6307, + "gameVersionTypeID": 3, + "name": "12.18.2.2117", + "slug": "12-18-2-2117" + }, + { + "id": 6308, + "gameVersionTypeID": 3, + "name": "12.18.2.2118", + "slug": "12-18-2-2118" + }, + { + "id": 6309, + "gameVersionTypeID": 3, + "name": "12.18.2.2119", + "slug": "12-18-2-2119" + }, + { + "id": 6310, + "gameVersionTypeID": 3, + "name": "12.18.2.2120", + "slug": "12-18-2-2120" + }, + { + "id": 6311, + "gameVersionTypeID": 3, + "name": "12.18.2.2121", + "slug": "12-18-2-2121" + }, + { + "id": 6312, + "gameVersionTypeID": 3, + "name": "12.18.2.2122", + "slug": "12-18-2-2122" + }, + { + "id": 6313, + "gameVersionTypeID": 3, + "name": "12.18.2.2123", + "slug": "12-18-2-2123" + }, + { + "id": 6315, + "gameVersionTypeID": 3, + "name": "12.18.2.2124", + "slug": "12-18-2-2124" + }, + { + "id": 6316, + "gameVersionTypeID": 3, + "name": "12.18.2.2125", + "slug": "12-18-2-2125" + }, + { + "id": 6317, + "gameVersionTypeID": 599, + "name": "1.11", + "slug": "1-11" + }, + { + "id": 6318, + "gameVersionTypeID": 3, + "name": "13.19.0.2126", + "slug": "13-19-0-2126" + }, + { + "id": 6319, + "gameVersionTypeID": 3, + "name": "13.19.0.2127", + "slug": "13-19-0-2127" + }, + { + "id": 6320, + "gameVersionTypeID": 3, + "name": "13.19.0.2128", + "slug": "13-19-0-2128" + }, + { + "id": 6321, + "gameVersionTypeID": 3, + "name": "13.19.0.2129", + "slug": "13-19-0-2129" + }, + { + "id": 6322, + "gameVersionTypeID": 3, + "name": "13.19.0.2130", + "slug": "13-19-0-2130" + }, + { + "id": 6323, + "gameVersionTypeID": 3, + "name": "13.19.0.2131", + "slug": "13-19-0-2131" + }, + { + "id": 6324, + "gameVersionTypeID": 3, + "name": "12.18.2.2132", + "slug": "12-18-2-2132" + }, + { + "id": 6325, + "gameVersionTypeID": 3, + "name": "13.19.0.2133", + "slug": "13-19-0-2133" + }, + { + "id": 6326, + "gameVersionTypeID": 3, + "name": "12.18.2.2134", + "slug": "12-18-2-2134" + }, + { + "id": 6327, + "gameVersionTypeID": 3, + "name": "13.19.0.2135", + "slug": "13-19-0-2135" + }, + { + "id": 6328, + "gameVersionTypeID": 3, + "name": "13.19.0.2136", + "slug": "13-19-0-2136" + }, + { + "id": 6329, + "gameVersionTypeID": 3, + "name": "13.19.0.2137", + "slug": "13-19-0-2137" + }, + { + "id": 6330, + "gameVersionTypeID": 3, + "name": "13.19.0.2138", + "slug": "13-19-0-2138" + }, + { + "id": 6331, + "gameVersionTypeID": 3, + "name": "12.18.2.2139", + "slug": "12-18-2-2139" + }, + { + "id": 6332, + "gameVersionTypeID": 3, + "name": "12.18.2.2140", + "slug": "12-18-2-2140" + }, + { + "id": 6333, + "gameVersionTypeID": 3, + "name": "13.19.0.2141", + "slug": "13-19-0-2141" + }, + { + "id": 6334, + "gameVersionTypeID": 3, + "name": "13.19.0.2142", + "slug": "13-19-0-2142" + }, + { + "id": 6335, + "gameVersionTypeID": 3, + "name": "13.19.0.2143", + "slug": "13-19-0-2143" + }, + { + "id": 6336, + "gameVersionTypeID": 3, + "name": "13.19.0.2144", + "slug": "13-19-0-2144" + }, + { + "id": 6337, + "gameVersionTypeID": 3, + "name": "13.19.0.2145", + "slug": "13-19-0-2145" + }, + { + "id": 6338, + "gameVersionTypeID": 3, + "name": "13.19.0.2146", + "slug": "13-19-0-2146" + }, + { + "id": 6339, + "gameVersionTypeID": 3, + "name": "12.18.2.2147", + "slug": "12-18-2-2147" + }, + { + "id": 6340, + "gameVersionTypeID": 3, + "name": "13.19.0.2148", + "slug": "13-19-0-2148" + }, + { + "id": 6341, + "gameVersionTypeID": 3, + "name": "13.19.0.2149", + "slug": "13-19-0-2149" + }, + { + "id": 6342, + "gameVersionTypeID": 3, + "name": "13.19.0.2150", + "slug": "13-19-0-2150" + }, + { + "id": 6343, + "gameVersionTypeID": 3, + "name": "12.18.2.2151", + "slug": "12-18-2-2151" + }, + { + "id": 6344, + "gameVersionTypeID": 3, + "name": "13.19.0.2152", + "slug": "13-19-0-2152" + }, + { + "id": 6345, + "gameVersionTypeID": 3, + "name": "13.19.0.2153", + "slug": "13-19-0-2153" + }, + { + "id": 6346, + "gameVersionTypeID": 3, + "name": "13.19.0.2154", + "slug": "13-19-0-2154" + }, + { + "id": 6347, + "gameVersionTypeID": 3, + "name": "13.19.0.2155", + "slug": "13-19-0-2155" + }, + { + "id": 6348, + "gameVersionTypeID": 3, + "name": "13.19.0.2156", + "slug": "13-19-0-2156" + }, + { + "id": 6349, + "gameVersionTypeID": 3, + "name": "13.19.0.2157", + "slug": "13-19-0-2157" + }, + { + "id": 6350, + "gameVersionTypeID": 3, + "name": "13.19.0.2159", + "slug": "13-19-0-2159" + }, + { + "id": 6351, + "gameVersionTypeID": 3, + "name": "13.19.0.2160", + "slug": "13-19-0-2160" + }, + { + "id": 6352, + "gameVersionTypeID": 3, + "name": "13.19.0.2161", + "slug": "13-19-0-2161" + }, + { + "id": 6353, + "gameVersionTypeID": 3, + "name": "13.19.0.2162", + "slug": "13-19-0-2162" + }, + { + "id": 6354, + "gameVersionTypeID": 3, + "name": "13.19.0.2165", + "slug": "13-19-0-2165" + }, + { + "id": 6355, + "gameVersionTypeID": 3, + "name": "12.18.2.2166", + "slug": "12-18-2-2166" + }, + { + "id": 6356, + "gameVersionTypeID": 3, + "name": "13.19.0.2167", + "slug": "13-19-0-2167" + }, + { + "id": 6357, + "gameVersionTypeID": 3, + "name": "13.19.0.2168", + "slug": "13-19-0-2168" + }, + { + "id": 6358, + "gameVersionTypeID": 3, + "name": "13.19.0.2169", + "slug": "13-19-0-2169" + }, + { + "id": 6359, + "gameVersionTypeID": 3, + "name": "12.18.2.2171", + "slug": "12-18-2-2171" + }, + { + "id": 6360, + "gameVersionTypeID": 3, + "name": "13.19.0.2172", + "slug": "13-19-0-2172" + }, + { + "id": 6361, + "gameVersionTypeID": 3, + "name": "13.19.0.2173", + "slug": "13-19-0-2173" + }, + { + "id": 6362, + "gameVersionTypeID": 3, + "name": "13.19.0.2174", + "slug": "13-19-0-2174" + }, + { + "id": 6363, + "gameVersionTypeID": 3, + "name": "13.19.0.2175", + "slug": "13-19-0-2175" + }, + { + "id": 6364, + "gameVersionTypeID": 3, + "name": "13.19.0.2176", + "slug": "13-19-0-2176" + }, + { + "id": 6365, + "gameVersionTypeID": 3, + "name": "13.19.0.2177", + "slug": "13-19-0-2177" + }, + { + "id": 6366, + "gameVersionTypeID": 3, + "name": "13.19.0.2178", + "slug": "13-19-0-2178" + }, + { + "id": 6367, + "gameVersionTypeID": 3, + "name": "12.18.2.2179", + "slug": "12-18-2-2179" + }, + { + "id": 6368, + "gameVersionTypeID": 3, + "name": "13.19.0.2180", + "slug": "13-19-0-2180" + }, + { + "id": 6369, + "gameVersionTypeID": 1, + "name": "Beta 1.7.3", + "slug": "beta-1-7-3" + }, + { + "id": 6370, + "gameVersionTypeID": 1, + "name": "Beta 1.7", + "slug": "beta-1-7" + }, + { + "id": 6371, + "gameVersionTypeID": 1, + "name": "Beta 1.6.6", + "slug": "beta-1-6-6" + }, + { + "id": 6372, + "gameVersionTypeID": 1, + "name": "Beta 1.8.1", + "slug": "beta-1-8-1" + }, + { + "id": 6373, + "gameVersionTypeID": 1, + "name": "1.0.0", + "slug": "1-0-0" + }, + { + "id": 6374, + "gameVersionTypeID": 1, + "name": "1.1", + "slug": "1-1" + }, + { + "id": 6375, + "gameVersionTypeID": 1, + "name": "1.2.1", + "slug": "1-2-1" + }, + { + "id": 6376, + "gameVersionTypeID": 1, + "name": "1.2.2", + "slug": "1-2-2" + }, + { + "id": 6377, + "gameVersionTypeID": 1, + "name": "1.2.3", + "slug": "1-2-3" + }, + { + "id": 6378, + "gameVersionTypeID": 1, + "name": "1.2.5", + "slug": "1-2-5" + }, + { + "id": 6379, + "gameVersionTypeID": 1, + "name": "1.3.1", + "slug": "1-3-1" + }, + { + "id": 6380, + "gameVersionTypeID": 1, + "name": "1.3.2", + "slug": "1-3-2" + }, + { + "id": 6381, + "gameVersionTypeID": 1, + "name": "1.4.2", + "slug": "1-4-2" + }, + { + "id": 6382, + "gameVersionTypeID": 1, + "name": "1.4.6", + "slug": "1-4-6" + }, + { + "id": 6383, + "gameVersionTypeID": 1, + "name": "1.4.7", + "slug": "1-4-7" + }, + { + "id": 6384, + "gameVersionTypeID": 1, + "name": "1.5.0", + "slug": "1-5-0" + }, + { + "id": 6385, + "gameVersionTypeID": 1, + "name": "1.5.1", + "slug": "1-5-1" + }, + { + "id": 6386, + "gameVersionTypeID": 1, + "name": "1.5.2", + "slug": "1-5-2" + }, + { + "id": 6387, + "gameVersionTypeID": 1, + "name": "1.6.1", + "slug": "1-6-1" + }, + { + "id": 6388, + "gameVersionTypeID": 1, + "name": "1.6.2", + "slug": "1-6-2" + }, + { + "id": 6389, + "gameVersionTypeID": 1, + "name": "1.6.4", + "slug": "1-6-4" + }, + { + "id": 6390, + "gameVersionTypeID": 1, + "name": "1.7.2", + "slug": "1-7-2" + }, + { + "id": 6391, + "gameVersionTypeID": 1, + "name": "1.7.4", + "slug": "1-7-4" + }, + { + "id": 6392, + "gameVersionTypeID": 3, + "name": "13.19.0.2181", + "slug": "13-19-0-2181" + }, + { + "id": 6393, + "gameVersionTypeID": 3, + "name": "12.18.2.2182", + "slug": "12-18-2-2182" + }, + { + "id": 6394, + "gameVersionTypeID": 3, + "name": "12.18.2.2183", + "slug": "12-18-2-2183" + }, + { + "id": 6395, + "gameVersionTypeID": 3, + "name": "13.19.0.2184", + "slug": "13-19-0-2184" + }, + { + "id": 6396, + "gameVersionTypeID": 3, + "name": "12.18.3.2185", + "slug": "12-18-3-2185" + }, + { + "id": 6397, + "gameVersionTypeID": 3, + "name": "13.19.0.2186", + "slug": "13-19-0-2186" + }, + { + "id": 6398, + "gameVersionTypeID": 3, + "name": "13.19.0.2187", + "slug": "13-19-0-2187" + }, + { + "id": 6399, + "gameVersionTypeID": 3, + "name": "13.19.1.2188", + "slug": "13-19-1-2188" + }, + { + "id": 6400, + "gameVersionTypeID": 3, + "name": "13.19.1.2189", + "slug": "13-19-1-2189" + }, + { + "id": 6444, + "gameVersionTypeID": 3, + "name": "13.19.1.2190", + "slug": "13-19-1-2190" + }, + { + "id": 6445, + "gameVersionTypeID": 3, + "name": "13.19.1.2191", + "slug": "13-19-1-2191" + }, + { + "id": 6446, + "gameVersionTypeID": 3, + "name": "13.19.1.2192", + "slug": "13-19-1-2192" + }, + { + "id": 6447, + "gameVersionTypeID": 3, + "name": "13.19.1.2193", + "slug": "13-19-1-2193" + }, + { + "id": 6448, + "gameVersionTypeID": 3, + "name": "13.19.1.2194", + "slug": "13-19-1-2194" + }, + { + "id": 6449, + "gameVersionTypeID": 3, + "name": "13.19.1.2195", + "slug": "13-19-1-2195" + }, + { + "id": 6451, + "gameVersionTypeID": 599, + "name": "1.11.1", + "slug": "1-11-1" + }, + { + "id": 6452, + "gameVersionTypeID": 599, + "name": "1.11.2", + "slug": "1-11-2" + }, + { + "id": 6453, + "gameVersionTypeID": 3, + "name": "13.19.1.2196", + "slug": "13-19-1-2196" + }, + { + "id": 6454, + "gameVersionTypeID": 3, + "name": "13.19.1.2197", + "slug": "13-19-1-2197" + }, + { + "id": 6455, + "gameVersionTypeID": 3, + "name": "13.19.1.2198", + "slug": "13-19-1-2198" + }, + { + "id": 6456, + "gameVersionTypeID": 3, + "name": "13.19.1.2199", + "slug": "13-19-1-2199" + }, + { + "id": 6457, + "gameVersionTypeID": 3, + "name": "13.20.0.2200", + "slug": "13-20-0-2200" + }, + { + "id": 6458, + "gameVersionTypeID": 3, + "name": "13.20.0.2201", + "slug": "13-20-0-2201" + }, + { + "id": 6459, + "gameVersionTypeID": 3, + "name": "12.18.3.2202", + "slug": "12-18-3-2202" + }, + { + "id": 6460, + "gameVersionTypeID": 3, + "name": "13.20.0.2203", + "slug": "13-20-0-2203" + }, + { + "id": 6461, + "gameVersionTypeID": 3, + "name": "13.20.0.2204", + "slug": "13-20-0-2204" + }, + { + "id": 6462, + "gameVersionTypeID": 3, + "name": "13.20.0.2205", + "slug": "13-20-0-2205" + }, + { + "id": 6463, + "gameVersionTypeID": 3, + "name": "13.20.0.2206", + "slug": "13-20-0-2206" + }, + { + "id": 6465, + "gameVersionTypeID": 3, + "name": "13.20.0.2207", + "slug": "13-20-0-2207" + }, + { + "id": 6466, + "gameVersionTypeID": 3, + "name": "13.20.0.2208", + "slug": "13-20-0-2208" + }, + { + "id": 6467, + "gameVersionTypeID": 3, + "name": "12.18.3.2209", + "slug": "12-18-3-2209" + }, + { + "id": 6468, + "gameVersionTypeID": 3, + "name": "13.20.0.2210", + "slug": "13-20-0-2210" + }, + { + "id": 6469, + "gameVersionTypeID": 3, + "name": "13.20.0.2211", + "slug": "13-20-0-2211" + }, + { + "id": 6470, + "gameVersionTypeID": 3, + "name": "13.20.0.2212", + "slug": "13-20-0-2212" + }, + { + "id": 6471, + "gameVersionTypeID": 3, + "name": "13.20.0.2213", + "slug": "13-20-0-2213" + }, + { + "id": 6472, + "gameVersionTypeID": 3, + "name": "13.20.0.2214", + "slug": "13-20-0-2214" + }, + { + "id": 6474, + "gameVersionTypeID": 3, + "name": "12.18.3.2215", + "slug": "12-18-3-2215" + }, + { + "id": 6475, + "gameVersionTypeID": 3, + "name": "13.20.0.2216", + "slug": "13-20-0-2216" + }, + { + "id": 6476, + "gameVersionTypeID": 3, + "name": "12.18.3.2217", + "slug": "12-18-3-2217" + }, + { + "id": 6477, + "gameVersionTypeID": 3, + "name": "13.20.0.2218", + "slug": "13-20-0-2218" + }, + { + "id": 6478, + "gameVersionTypeID": 3, + "name": "12.18.3.2219", + "slug": "12-18-3-2219" + }, + { + "id": 6479, + "gameVersionTypeID": 3, + "name": "13.20.0.2220", + "slug": "13-20-0-2220" + }, + { + "id": 6480, + "gameVersionTypeID": 3, + "name": "12.18.3.2221", + "slug": "12-18-3-2221" + }, + { + "id": 6481, + "gameVersionTypeID": 3, + "name": "13.20.0.2222", + "slug": "13-20-0-2222" + }, + { + "id": 6482, + "gameVersionTypeID": 3, + "name": "13.20.0.2223", + "slug": "13-20-0-2223" + }, + { + "id": 6483, + "gameVersionTypeID": 3, + "name": "13.20.0.2224", + "slug": "13-20-0-2224" + }, + { + "id": 6485, + "gameVersionTypeID": 3, + "name": "13.20.0.2225", + "slug": "13-20-0-2225" + }, + { + "id": 6486, + "gameVersionTypeID": 3, + "name": "13.20.0.2226", + "slug": "13-20-0-2226" + }, + { + "id": 6488, + "gameVersionTypeID": 3, + "name": "13.20.0.2227", + "slug": "13-20-0-2227" + }, + { + "id": 6489, + "gameVersionTypeID": 3, + "name": "13.20.0.2228", + "slug": "13-20-0-2228" + }, + { + "id": 6490, + "gameVersionTypeID": 3, + "name": "13.20.0.2229", + "slug": "13-20-0-2229" + }, + { + "id": 6491, + "gameVersionTypeID": 3, + "name": "13.20.0.2230", + "slug": "13-20-0-2230" + }, + { + "id": 6492, + "gameVersionTypeID": 3, + "name": "13.20.0.2231", + "slug": "13-20-0-2231" + }, + { + "id": 6493, + "gameVersionTypeID": 3, + "name": "13.20.0.2232", + "slug": "13-20-0-2232" + }, + { + "id": 6494, + "gameVersionTypeID": 3, + "name": "13.20.0.2233", + "slug": "13-20-0-2233" + }, + { + "id": 6495, + "gameVersionTypeID": 3, + "name": "12.18.3.2234", + "slug": "12-18-3-2234" + }, + { + "id": 6496, + "gameVersionTypeID": 3, + "name": "13.20.0.2235", + "slug": "13-20-0-2235" + }, + { + "id": 6497, + "gameVersionTypeID": 3, + "name": "13.20.0.2236", + "slug": "13-20-0-2236" + }, + { + "id": 6498, + "gameVersionTypeID": 3, + "name": "13.20.0.2237", + "slug": "13-20-0-2237" + }, + { + "id": 6499, + "gameVersionTypeID": 3, + "name": "13.20.0.2238", + "slug": "13-20-0-2238" + }, + { + "id": 6500, + "gameVersionTypeID": 3, + "name": "12.18.3.2239", + "slug": "12-18-3-2239" + }, + { + "id": 6501, + "gameVersionTypeID": 3, + "name": "13.20.0.2240", + "slug": "13-20-0-2240" + }, + { + "id": 6502, + "gameVersionTypeID": 3, + "name": "13.20.0.2241", + "slug": "13-20-0-2241" + }, + { + "id": 6503, + "gameVersionTypeID": 3, + "name": "13.20.0.2242", + "slug": "13-20-0-2242" + }, + { + "id": 6504, + "gameVersionTypeID": 3, + "name": "13.20.0.2243", + "slug": "13-20-0-2243" + }, + { + "id": 6505, + "gameVersionTypeID": 3, + "name": "13.20.0.2244", + "slug": "13-20-0-2244" + }, + { + "id": 6506, + "gameVersionTypeID": 3, + "name": "13.20.0.2245", + "slug": "13-20-0-2245" + }, + { + "id": 6507, + "gameVersionTypeID": 3, + "name": "13.20.0.2246", + "slug": "13-20-0-2246" + }, + { + "id": 6508, + "gameVersionTypeID": 3, + "name": "13.20.0.2247", + "slug": "13-20-0-2247" + }, + { + "id": 6509, + "gameVersionTypeID": 3, + "name": "13.20.0.2248", + "slug": "13-20-0-2248" + }, + { + "id": 6510, + "gameVersionTypeID": 3, + "name": "13.20.0.2249", + "slug": "13-20-0-2249" + }, + { + "id": 6511, + "gameVersionTypeID": 3, + "name": "13.20.0.2250", + "slug": "13-20-0-2250" + }, + { + "id": 6512, + "gameVersionTypeID": 3, + "name": "13.20.0.2251", + "slug": "13-20-0-2251" + }, + { + "id": 6513, + "gameVersionTypeID": 3, + "name": "13.20.0.2252", + "slug": "13-20-0-2252" + }, + { + "id": 6514, + "gameVersionTypeID": 628, + "name": "1.12-Snapshot", + "slug": "1-12-snapshot" + }, + { + "id": 6516, + "gameVersionTypeID": 3, + "name": "13.20.0.2253", + "slug": "13-20-0-2253" + }, + { + "id": 6517, + "gameVersionTypeID": 3, + "name": "12.18.3.2254", + "slug": "12-18-3-2254" + }, + { + "id": 6518, + "gameVersionTypeID": 3, + "name": "13.20.0.2255", + "slug": "13-20-0-2255" + }, + { + "id": 6519, + "gameVersionTypeID": 3, + "name": "13.20.0.2256", + "slug": "13-20-0-2256" + }, + { + "id": 6520, + "gameVersionTypeID": 3, + "name": "13.20.0.2257", + "slug": "13-20-0-2257" + }, + { + "id": 6521, + "gameVersionTypeID": 3, + "name": "13.20.0.2258", + "slug": "13-20-0-2258" + }, + { + "id": 6522, + "gameVersionTypeID": 3, + "name": "13.20.0.2259", + "slug": "13-20-0-2259" + }, + { + "id": 6523, + "gameVersionTypeID": 3, + "name": "13.20.0.2260", + "slug": "13-20-0-2260" + }, + { + "id": 6525, + "gameVersionTypeID": 3, + "name": "13.20.0.2261", + "slug": "13-20-0-2261" + }, + { + "id": 6526, + "gameVersionTypeID": 3, + "name": "13.20.0.2262", + "slug": "13-20-0-2262" + }, + { + "id": 6527, + "gameVersionTypeID": 3, + "name": "13.20.0.2263", + "slug": "13-20-0-2263" + }, + { + "id": 6528, + "gameVersionTypeID": 3, + "name": "13.20.0.2264", + "slug": "13-20-0-2264" + }, + { + "id": 6529, + "gameVersionTypeID": 3, + "name": "13.20.0.2265", + "slug": "13-20-0-2265" + }, + { + "id": 6530, + "gameVersionTypeID": 3, + "name": "13.20.0.2266", + "slug": "13-20-0-2266" + }, + { + "id": 6531, + "gameVersionTypeID": 3, + "name": "13.20.0.2267", + "slug": "13-20-0-2267" + }, + { + "id": 6532, + "gameVersionTypeID": 3, + "name": "13.20.0.2268", + "slug": "13-20-0-2268" + }, + { + "id": 6533, + "gameVersionTypeID": 3, + "name": "13.20.0.2269", + "slug": "13-20-0-2269" + }, + { + "id": 6534, + "gameVersionTypeID": 3, + "name": "13.20.0.2270", + "slug": "13-20-0-2270" + }, + { + "id": 6535, + "gameVersionTypeID": 3, + "name": "13.20.0.2271", + "slug": "13-20-0-2271" + }, + { + "id": 6536, + "gameVersionTypeID": 3, + "name": "12.18.3.2272", + "slug": "12-18-3-2272" + }, + { + "id": 6537, + "gameVersionTypeID": 3, + "name": "13.20.0.2274", + "slug": "13-20-0-2274" + }, + { + "id": 6538, + "gameVersionTypeID": 3, + "name": "13.20.0.2277", + "slug": "13-20-0-2277" + }, + { + "id": 6539, + "gameVersionTypeID": 3, + "name": "13.20.0.2278", + "slug": "13-20-0-2278" + }, + { + "id": 6540, + "gameVersionTypeID": 3, + "name": "13.20.0.2279", + "slug": "13-20-0-2279" + }, + { + "id": 6541, + "gameVersionTypeID": 3, + "name": "13.20.0.2280", + "slug": "13-20-0-2280" + }, + { + "id": 6542, + "gameVersionTypeID": 3, + "name": "12.18.3.2281", + "slug": "12-18-3-2281" + }, + { + "id": 6543, + "gameVersionTypeID": 3, + "name": "13.20.0.2282", + "slug": "13-20-0-2282" + }, + { + "id": 6545, + "gameVersionTypeID": 3, + "name": "13.20.0.2283", + "slug": "13-20-0-2283" + }, + { + "id": 6546, + "gameVersionTypeID": 3, + "name": "13.20.0.2284", + "slug": "13-20-0-2284" + }, + { + "id": 6547, + "gameVersionTypeID": 3, + "name": "13.20.0.2285", + "slug": "13-20-0-2285" + }, + { + "id": 6548, + "gameVersionTypeID": 3, + "name": "13.20.0.2286", + "slug": "13-20-0-2286" + }, + { + "id": 6549, + "gameVersionTypeID": 3, + "name": "13.20.0.2287", + "slug": "13-20-0-2287" + }, + { + "id": 6550, + "gameVersionTypeID": 3, + "name": "13.20.0.2288", + "slug": "13-20-0-2288" + }, + { + "id": 6551, + "gameVersionTypeID": 3, + "name": "13.20.0.2290", + "slug": "13-20-0-2290" + }, + { + "id": 6552, + "gameVersionTypeID": 3, + "name": "13.20.0.2291", + "slug": "13-20-0-2291" + }, + { + "id": 6553, + "gameVersionTypeID": 3, + "name": "13.20.0.2292", + "slug": "13-20-0-2292" + }, + { + "id": 6554, + "gameVersionTypeID": 3, + "name": "13.20.0.2293", + "slug": "13-20-0-2293" + }, + { + "id": 6555, + "gameVersionTypeID": 3, + "name": "13.20.0.2294", + "slug": "13-20-0-2294" + }, + { + "id": 6557, + "gameVersionTypeID": 3, + "name": "13.20.0.2295", + "slug": "13-20-0-2295" + }, + { + "id": 6558, + "gameVersionTypeID": 3, + "name": "13.20.0.2296", + "slug": "13-20-0-2296" + }, + { + "id": 6559, + "gameVersionTypeID": 3, + "name": "12.18.3.2297", + "slug": "12-18-3-2297" + }, + { + "id": 6560, + "gameVersionTypeID": 3, + "name": "13.20.0.2298", + "slug": "13-20-0-2298" + }, + { + "id": 6561, + "gameVersionTypeID": 3, + "name": "13.20.0.2299", + "slug": "13-20-0-2299" + }, + { + "id": 6562, + "gameVersionTypeID": 3, + "name": "13.20.0.2300", + "slug": "13-20-0-2300" + }, + { + "id": 6563, + "gameVersionTypeID": 3, + "name": "13.20.0.2301", + "slug": "13-20-0-2301" + }, + { + "id": 6564, + "gameVersionTypeID": 3, + "name": "13.20.0.2302", + "slug": "13-20-0-2302" + }, + { + "id": 6565, + "gameVersionTypeID": 3, + "name": "13.20.0.2303", + "slug": "13-20-0-2303" + }, + { + "id": 6566, + "gameVersionTypeID": 3, + "name": "13.20.0.2304", + "slug": "13-20-0-2304" + }, + { + "id": 6567, + "gameVersionTypeID": 3, + "name": "13.20.0.2305", + "slug": "13-20-0-2305" + }, + { + "id": 6568, + "gameVersionTypeID": 3, + "name": "13.20.0.2306", + "slug": "13-20-0-2306" + }, + { + "id": 6569, + "gameVersionTypeID": 3, + "name": "13.20.0.2307", + "slug": "13-20-0-2307" + }, + { + "id": 6570, + "gameVersionTypeID": 3, + "name": "13.20.0.2308", + "slug": "13-20-0-2308" + }, + { + "id": 6571, + "gameVersionTypeID": 3, + "name": "13.20.0.2309", + "slug": "13-20-0-2309" + }, + { + "id": 6572, + "gameVersionTypeID": 3, + "name": "13.20.0.2310", + "slug": "13-20-0-2310" + }, + { + "id": 6575, + "gameVersionTypeID": 3, + "name": "13.20.0.2311", + "slug": "13-20-0-2311" + }, + { + "id": 6577, + "gameVersionTypeID": 3, + "name": "13.20.0.2312", + "slug": "13-20-0-2312" + }, + { + "id": 6578, + "gameVersionTypeID": 3, + "name": "13.20.0.2313", + "slug": "13-20-0-2313" + }, + { + "id": 6579, + "gameVersionTypeID": 3, + "name": "13.20.0.2314", + "slug": "13-20-0-2314" + }, + { + "id": 6580, + "gameVersionTypeID": 628, + "name": "1.12", + "slug": "1-12" + }, + { + "id": 6581, + "gameVersionTypeID": 3, + "name": "13.20.0.2315", + "slug": "13-20-0-2315" + }, + { + "id": 6582, + "gameVersionTypeID": 3, + "name": "12.18.3.2316", + "slug": "12-18-3-2316" + }, + { + "id": 6584, + "gameVersionTypeID": 3, + "name": "11.15.1.2318", + "slug": "11-15-1-2318" + }, + { + "id": 6585, + "gameVersionTypeID": 3, + "name": "14.21.0.2320", + "slug": "14-21-0-2320" + }, + { + "id": 6586, + "gameVersionTypeID": 3, + "name": "14.21.0.2321", + "slug": "14-21-0-2321" + }, + { + "id": 6587, + "gameVersionTypeID": 3, + "name": "14.21.0.2322", + "slug": "14-21-0-2322" + }, + { + "id": 6588, + "gameVersionTypeID": 1, + "name": "1.12", + "slug": "1-12" + }, + { + "id": 6589, + "gameVersionTypeID": 3, + "name": "14.21.0.2323", + "slug": "14-21-0-2323" + }, + { + "id": 6590, + "gameVersionTypeID": 3, + "name": "14.21.0.2324", + "slug": "14-21-0-2324" + }, + { + "id": 6591, + "gameVersionTypeID": 3, + "name": "14.21.0.2325", + "slug": "14-21-0-2325" + }, + { + "id": 6592, + "gameVersionTypeID": 3, + "name": "14.21.0.2326", + "slug": "14-21-0-2326" + }, + { + "id": 6593, + "gameVersionTypeID": 3, + "name": "14.21.0.2327", + "slug": "14-21-0-2327" + }, + { + "id": 6594, + "gameVersionTypeID": 3, + "name": "14.21.0.2328", + "slug": "14-21-0-2328" + }, + { + "id": 6595, + "gameVersionTypeID": 3, + "name": "14.21.0.2329", + "slug": "14-21-0-2329" + }, + { + "id": 6596, + "gameVersionTypeID": 3, + "name": "14.21.0.2330", + "slug": "14-21-0-2330" + }, + { + "id": 6597, + "gameVersionTypeID": 3, + "name": "14.21.0.2331", + "slug": "14-21-0-2331" + }, + { + "id": 6598, + "gameVersionTypeID": 3, + "name": "14.21.0.2332", + "slug": "14-21-0-2332" + }, + { + "id": 6599, + "gameVersionTypeID": 3, + "name": "14.21.0.2333", + "slug": "14-21-0-2333" + }, + { + "id": 6600, + "gameVersionTypeID": 3, + "name": "14.21.0.2334", + "slug": "14-21-0-2334" + }, + { + "id": 6601, + "gameVersionTypeID": 3, + "name": "14.21.0.2335", + "slug": "14-21-0-2335" + }, + { + "id": 6602, + "gameVersionTypeID": 3, + "name": "14.21.0.2336", + "slug": "14-21-0-2336" + }, + { + "id": 6603, + "gameVersionTypeID": 3, + "name": "14.21.0.2337", + "slug": "14-21-0-2337" + }, + { + "id": 6604, + "gameVersionTypeID": 3, + "name": "14.21.0.2338", + "slug": "14-21-0-2338" + }, + { + "id": 6605, + "gameVersionTypeID": 3, + "name": "14.21.0.2339", + "slug": "14-21-0-2339" + }, + { + "id": 6606, + "gameVersionTypeID": 3, + "name": "14.21.0.2340", + "slug": "14-21-0-2340" + }, + { + "id": 6607, + "gameVersionTypeID": 3, + "name": "14.21.0.2341", + "slug": "14-21-0-2341" + }, + { + "id": 6608, + "gameVersionTypeID": 3, + "name": "14.21.0.2342", + "slug": "14-21-0-2342" + }, + { + "id": 6609, + "gameVersionTypeID": 3, + "name": "14.21.0.2343", + "slug": "14-21-0-2343" + }, + { + "id": 6610, + "gameVersionTypeID": 3, + "name": "14.21.0.2344", + "slug": "14-21-0-2344" + }, + { + "id": 6612, + "gameVersionTypeID": 3, + "name": "13.20.0.2345", + "slug": "13-20-0-2345" + }, + { + "id": 6613, + "gameVersionTypeID": 3, + "name": "14.21.0.2346", + "slug": "14-21-0-2346" + }, + { + "id": 6614, + "gameVersionTypeID": 3, + "name": "14.21.0.2347", + "slug": "14-21-0-2347" + }, + { + "id": 6615, + "gameVersionTypeID": 3, + "name": "14.21.0.2348", + "slug": "14-21-0-2348" + }, + { + "id": 6616, + "gameVersionTypeID": 3, + "name": "14.21.0.2349", + "slug": "14-21-0-2349" + }, + { + "id": 6617, + "gameVersionTypeID": 3, + "name": "14.21.0.2350", + "slug": "14-21-0-2350" + }, + { + "id": 6618, + "gameVersionTypeID": 3, + "name": "14.21.0.2351", + "slug": "14-21-0-2351" + }, + { + "id": 6619, + "gameVersionTypeID": 3, + "name": "14.21.0.2352", + "slug": "14-21-0-2352" + }, + { + "id": 6620, + "gameVersionTypeID": 3, + "name": "14.21.0.2353", + "slug": "14-21-0-2353" + }, + { + "id": 6621, + "gameVersionTypeID": 3, + "name": "14.21.0.2354", + "slug": "14-21-0-2354" + }, + { + "id": 6622, + "gameVersionTypeID": 3, + "name": "14.21.0.2355", + "slug": "14-21-0-2355" + }, + { + "id": 6623, + "gameVersionTypeID": 3, + "name": "14.21.0.2357", + "slug": "14-21-0-2357" + }, + { + "id": 6624, + "gameVersionTypeID": 3, + "name": "14.21.0.2358", + "slug": "14-21-0-2358" + }, + { + "id": 6625, + "gameVersionTypeID": 3, + "name": "14.21.0.2359", + "slug": "14-21-0-2359" + }, + { + "id": 6626, + "gameVersionTypeID": 3, + "name": "14.21.0.2360", + "slug": "14-21-0-2360" + }, + { + "id": 6627, + "gameVersionTypeID": 3, + "name": "14.21.0.2361", + "slug": "14-21-0-2361" + }, + { + "id": 6628, + "gameVersionTypeID": 3, + "name": "14.21.0.2362", + "slug": "14-21-0-2362" + }, + { + "id": 6629, + "gameVersionTypeID": 3, + "name": "14.21.0.2363", + "slug": "14-21-0-2363" + }, + { + "id": 6630, + "gameVersionTypeID": 3, + "name": "14.21.0.2364", + "slug": "14-21-0-2364" + }, + { + "id": 6631, + "gameVersionTypeID": 3, + "name": "14.21.0.2365", + "slug": "14-21-0-2365" + }, + { + "id": 6632, + "gameVersionTypeID": 3, + "name": "13.20.0.2366", + "slug": "13-20-0-2366" + }, + { + "id": 6633, + "gameVersionTypeID": 3, + "name": "14.21.0.2367", + "slug": "14-21-0-2367" + }, + { + "id": 6634, + "gameVersionTypeID": 3, + "name": "14.21.0.2368", + "slug": "14-21-0-2368" + }, + { + "id": 6635, + "gameVersionTypeID": 3, + "name": "14.21.0.2369", + "slug": "14-21-0-2369" + }, + { + "id": 6636, + "gameVersionTypeID": 3, + "name": "14.21.0.2370", + "slug": "14-21-0-2370" + }, + { + "id": 6637, + "gameVersionTypeID": 3, + "name": "14.21.0.2371", + "slug": "14-21-0-2371" + }, + { + "id": 6638, + "gameVersionTypeID": 3, + "name": "14.21.0.2372", + "slug": "14-21-0-2372" + }, + { + "id": 6639, + "gameVersionTypeID": 3, + "name": "14.21.0.2373", + "slug": "14-21-0-2373" + }, + { + "id": 6640, + "gameVersionTypeID": 3, + "name": "14.21.0.2374", + "slug": "14-21-0-2374" + }, + { + "id": 6641, + "gameVersionTypeID": 3, + "name": "14.21.0.2375", + "slug": "14-21-0-2375" + }, + { + "id": 6642, + "gameVersionTypeID": 3, + "name": "14.21.0.2376", + "slug": "14-21-0-2376" + }, + { + "id": 6643, + "gameVersionTypeID": 3, + "name": "14.21.0.2377", + "slug": "14-21-0-2377" + }, + { + "id": 6644, + "gameVersionTypeID": 3, + "name": "14.21.0.2378", + "slug": "14-21-0-2378" + }, + { + "id": 6645, + "gameVersionTypeID": 3, + "name": "14.21.0.2379", + "slug": "14-21-0-2379" + }, + { + "id": 6646, + "gameVersionTypeID": 3, + "name": "14.21.0.2380", + "slug": "14-21-0-2380" + }, + { + "id": 6647, + "gameVersionTypeID": 3, + "name": "14.21.0.2381", + "slug": "14-21-0-2381" + }, + { + "id": 6648, + "gameVersionTypeID": 3, + "name": "14.21.0.2382", + "slug": "14-21-0-2382" + }, + { + "id": 6649, + "gameVersionTypeID": 3, + "name": "14.21.0.2383", + "slug": "14-21-0-2383" + }, + { + "id": 6650, + "gameVersionTypeID": 3, + "name": "14.21.0.2384", + "slug": "14-21-0-2384" + }, + { + "id": 6651, + "gameVersionTypeID": 3, + "name": "14.21.0.2385", + "slug": "14-21-0-2385" + }, + { + "id": 6652, + "gameVersionTypeID": 3, + "name": "13.20.1.2386", + "slug": "13-20-1-2386" + }, + { + "id": 6653, + "gameVersionTypeID": 3, + "name": "14.21.1.2387", + "slug": "14-21-1-2387" + }, + { + "id": 6654, + "gameVersionTypeID": 3, + "name": "13.20.1.2388", + "slug": "13-20-1-2388" + }, + { + "id": 6655, + "gameVersionTypeID": 3, + "name": "14.21.1.2389", + "slug": "14-21-1-2389" + }, + { + "id": 6656, + "gameVersionTypeID": 3, + "name": "14.21.1.2390", + "slug": "14-21-1-2390" + }, + { + "id": 6657, + "gameVersionTypeID": 3, + "name": "13.20.1.2391", + "slug": "13-20-1-2391" + }, + { + "id": 6658, + "gameVersionTypeID": 3, + "name": "14.21.1.2392", + "slug": "14-21-1-2392" + }, + { + "id": 6659, + "gameVersionTypeID": 3, + "name": "13.20.1.2393", + "slug": "13-20-1-2393" + }, + { + "id": 6660, + "gameVersionTypeID": 3, + "name": "14.21.1.2394", + "slug": "14-21-1-2394" + }, + { + "id": 6661, + "gameVersionTypeID": 3, + "name": "14.21.1.2395", + "slug": "14-21-1-2395" + }, + { + "id": 6662, + "gameVersionTypeID": 3, + "name": "14.21.1.2396", + "slug": "14-21-1-2396" + }, + { + "id": 6663, + "gameVersionTypeID": 3, + "name": "14.21.1.2397", + "slug": "14-21-1-2397" + }, + { + "id": 6664, + "gameVersionTypeID": 3, + "name": "14.21.1.2398", + "slug": "14-21-1-2398" + }, + { + "id": 6665, + "gameVersionTypeID": 3, + "name": "14.21.1.2399", + "slug": "14-21-1-2399" + }, + { + "id": 6666, + "gameVersionTypeID": 3, + "name": "14.21.1.2400", + "slug": "14-21-1-2400" + }, + { + "id": 6667, + "gameVersionTypeID": 3, + "name": "14.21.1.2401", + "slug": "14-21-1-2401" + }, + { + "id": 6668, + "gameVersionTypeID": 3, + "name": "14.21.1.2402", + "slug": "14-21-1-2402" + }, + { + "id": 6669, + "gameVersionTypeID": 3, + "name": "14.21.1.2403", + "slug": "14-21-1-2403" + }, + { + "id": 6670, + "gameVersionTypeID": 3, + "name": "14.21.1.2404", + "slug": "14-21-1-2404" + }, + { + "id": 6671, + "gameVersionTypeID": 3, + "name": "14.21.1.2405", + "slug": "14-21-1-2405" + }, + { + "id": 6672, + "gameVersionTypeID": 3, + "name": "14.21.1.2406", + "slug": "14-21-1-2406" + }, + { + "id": 6673, + "gameVersionTypeID": 3, + "name": "14.21.1.2407", + "slug": "14-21-1-2407" + }, + { + "id": 6674, + "gameVersionTypeID": 3, + "name": "14.21.1.2408", + "slug": "14-21-1-2408" + }, + { + "id": 6675, + "gameVersionTypeID": 3, + "name": "14.21.1.2409", + "slug": "14-21-1-2409" + }, + { + "id": 6676, + "gameVersionTypeID": 3, + "name": "14.21.1.2410", + "slug": "14-21-1-2410" + }, + { + "id": 6677, + "gameVersionTypeID": 3, + "name": "14.21.1.2411", + "slug": "14-21-1-2411" + }, + { + "id": 6678, + "gameVersionTypeID": 3, + "name": "14.21.1.2412", + "slug": "14-21-1-2412" + }, + { + "id": 6679, + "gameVersionTypeID": 3, + "name": "14.21.1.2413", + "slug": "14-21-1-2413" + }, + { + "id": 6680, + "gameVersionTypeID": 3, + "name": "13.20.1.2414", + "slug": "13-20-1-2414" + }, + { + "id": 6681, + "gameVersionTypeID": 3, + "name": "14.21.1.2415", + "slug": "14-21-1-2415" + }, + { + "id": 6682, + "gameVersionTypeID": 3, + "name": "14.21.1.2416", + "slug": "14-21-1-2416" + }, + { + "id": 6683, + "gameVersionTypeID": 3, + "name": "14.21.1.2417", + "slug": "14-21-1-2417" + }, + { + "id": 6684, + "gameVersionTypeID": 3, + "name": "14.21.1.2418", + "slug": "14-21-1-2418" + }, + { + "id": 6685, + "gameVersionTypeID": 3, + "name": "14.21.1.2419", + "slug": "14-21-1-2419" + }, + { + "id": 6686, + "gameVersionTypeID": 3, + "name": "14.21.1.2420", + "slug": "14-21-1-2420" + }, + { + "id": 6687, + "gameVersionTypeID": 3, + "name": "13.20.1.2421", + "slug": "13-20-1-2421" + }, + { + "id": 6688, + "gameVersionTypeID": 3, + "name": "12.18.3.2422", + "slug": "12-18-3-2422" + }, + { + "id": 6690, + "gameVersionTypeID": 3, + "name": "14.21.1.2423", + "slug": "14-21-1-2423" + }, + { + "id": 6691, + "gameVersionTypeID": 3, + "name": "14.21.1.2424", + "slug": "14-21-1-2424" + }, + { + "id": 6692, + "gameVersionTypeID": 3, + "name": "13.20.1.2425", + "slug": "13-20-1-2425" + }, + { + "id": 6693, + "gameVersionTypeID": 3, + "name": "14.21.1.2426", + "slug": "14-21-1-2426" + }, + { + "id": 6694, + "gameVersionTypeID": 3, + "name": "14.21.1.2427", + "slug": "14-21-1-2427" + }, + { + "id": 6695, + "gameVersionTypeID": 3, + "name": "14.21.1.2428", + "slug": "14-21-1-2428" + }, + { + "id": 6696, + "gameVersionTypeID": 3, + "name": "13.20.1.2429", + "slug": "13-20-1-2429" + }, + { + "id": 6697, + "gameVersionTypeID": 3, + "name": "14.21.1.2430", + "slug": "14-21-1-2430" + }, + { + "id": 6698, + "gameVersionTypeID": 3, + "name": "14.21.1.2431", + "slug": "14-21-1-2431" + }, + { + "id": 6699, + "gameVersionTypeID": 3, + "name": "14.21.1.2432", + "slug": "14-21-1-2432" + }, + { + "id": 6700, + "gameVersionTypeID": 3, + "name": "14.21.1.2433", + "slug": "14-21-1-2433" + }, + { + "id": 6701, + "gameVersionTypeID": 3, + "name": "14.21.1.2434", + "slug": "14-21-1-2434" + }, + { + "id": 6702, + "gameVersionTypeID": 3, + "name": "14.21.1.2435", + "slug": "14-21-1-2435" + }, + { + "id": 6703, + "gameVersionTypeID": 3, + "name": "14.21.1.2436", + "slug": "14-21-1-2436" + }, + { + "id": 6704, + "gameVersionTypeID": 3, + "name": "14.21.1.2437", + "slug": "14-21-1-2437" + }, + { + "id": 6705, + "gameVersionTypeID": 3, + "name": "14.21.1.2438", + "slug": "14-21-1-2438" + }, + { + "id": 6706, + "gameVersionTypeID": 3, + "name": "14.21.1.2439", + "slug": "14-21-1-2439" + }, + { + "id": 6707, + "gameVersionTypeID": 3, + "name": "14.21.1.2440", + "slug": "14-21-1-2440" + }, + { + "id": 6708, + "gameVersionTypeID": 3, + "name": "14.21.1.2441", + "slug": "14-21-1-2441" + }, + { + "id": 6709, + "gameVersionTypeID": 3, + "name": "14.21.1.2442", + "slug": "14-21-1-2442" + }, + { + "id": 6710, + "gameVersionTypeID": 3, + "name": "14.21.1.2443", + "slug": "14-21-1-2443" + }, + { + "id": 6711, + "gameVersionTypeID": 628, + "name": "1.12.1", + "slug": "1-12-1" + }, + { + "id": 6712, + "gameVersionTypeID": 3, + "name": "14.22.0.2444", + "slug": "14-22-0-2444" + }, + { + "id": 6714, + "gameVersionTypeID": 3, + "name": "14.22.0.2445", + "slug": "14-22-0-2445" + }, + { + "id": 6715, + "gameVersionTypeID": 3, + "name": "14.22.0.2446", + "slug": "14-22-0-2446" + }, + { + "id": 6716, + "gameVersionTypeID": 3, + "name": "14.22.0.2447", + "slug": "14-22-0-2447" + }, + { + "id": 6717, + "gameVersionTypeID": 3, + "name": "14.22.0.2448", + "slug": "14-22-0-2448" + }, + { + "id": 6718, + "gameVersionTypeID": 3, + "name": "14.22.0.2449", + "slug": "14-22-0-2449" + }, + { + "id": 6719, + "gameVersionTypeID": 3, + "name": "14.22.0.2450", + "slug": "14-22-0-2450" + }, + { + "id": 6720, + "gameVersionTypeID": 3, + "name": "14.22.0.2451", + "slug": "14-22-0-2451" + }, + { + "id": 6721, + "gameVersionTypeID": 3, + "name": "14.22.0.2452", + "slug": "14-22-0-2452" + }, + { + "id": 6723, + "gameVersionTypeID": 3, + "name": "14.22.0.2453", + "slug": "14-22-0-2453" + }, + { + "id": 6724, + "gameVersionTypeID": 3, + "name": "13.20.1.2454", + "slug": "13-20-1-2454" + }, + { + "id": 6725, + "gameVersionTypeID": 3, + "name": "14.22.0.2455", + "slug": "14-22-0-2455" + }, + { + "id": 6726, + "gameVersionTypeID": 3, + "name": "14.22.0.2456", + "slug": "14-22-0-2456" + }, + { + "id": 6727, + "gameVersionTypeID": 3, + "name": "14.22.0.2457", + "slug": "14-22-0-2457" + }, + { + "id": 6728, + "gameVersionTypeID": 3, + "name": "14.22.0.2458", + "slug": "14-22-0-2458" + }, + { + "id": 6729, + "gameVersionTypeID": 3, + "name": "14.22.0.2459", + "slug": "14-22-0-2459" + }, + { + "id": 6730, + "gameVersionTypeID": 3, + "name": "14.22.0.2460", + "slug": "14-22-0-2460" + }, + { + "id": 6731, + "gameVersionTypeID": 3, + "name": "14.22.0.2461", + "slug": "14-22-0-2461" + }, + { + "id": 6732, + "gameVersionTypeID": 3, + "name": "14.22.0.2462", + "slug": "14-22-0-2462" + }, + { + "id": 6733, + "gameVersionTypeID": 3, + "name": "14.22.0.2463", + "slug": "14-22-0-2463" + }, + { + "id": 6735, + "gameVersionTypeID": 3, + "name": "14.22.0.2464", + "slug": "14-22-0-2464" + }, + { + "id": 6736, + "gameVersionTypeID": 3, + "name": "14.22.0.2465", + "slug": "14-22-0-2465" + }, + { + "id": 6737, + "gameVersionTypeID": 3, + "name": "14.22.0.2466", + "slug": "14-22-0-2466" + }, + { + "id": 6738, + "gameVersionTypeID": 3, + "name": "14.22.0.2467", + "slug": "14-22-0-2467" + }, + { + "id": 6739, + "gameVersionTypeID": 3, + "name": "14.22.0.2468", + "slug": "14-22-0-2468" + }, + { + "id": 6740, + "gameVersionTypeID": 3, + "name": "14.22.0.2469", + "slug": "14-22-0-2469" + }, + { + "id": 6741, + "gameVersionTypeID": 3, + "name": "14.22.0.2470", + "slug": "14-22-0-2470" + }, + { + "id": 6742, + "gameVersionTypeID": 3, + "name": "14.22.0.2471", + "slug": "14-22-0-2471" + }, + { + "id": 6743, + "gameVersionTypeID": 3, + "name": "14.22.0.2472", + "slug": "14-22-0-2472" + }, + { + "id": 6744, + "gameVersionTypeID": 3, + "name": "14.22.0.2473", + "slug": "14-22-0-2473" + }, + { + "id": 6745, + "gameVersionTypeID": 3, + "name": "14.22.0.2474", + "slug": "14-22-0-2474" + }, + { + "id": 6746, + "gameVersionTypeID": 3, + "name": "13.20.1.2476", + "slug": "13-20-1-2476" + }, + { + "id": 6747, + "gameVersionTypeID": 3, + "name": "12.18.3.2477", + "slug": "12-18-3-2477" + }, + { + "id": 6748, + "gameVersionTypeID": 3, + "name": "14.22.1.2478", + "slug": "14-22-1-2478" + }, + { + "id": 6749, + "gameVersionTypeID": 3, + "name": "14.22.1.2479", + "slug": "14-22-1-2479" + }, + { + "id": 6750, + "gameVersionTypeID": 3, + "name": "14.22.1.2480", + "slug": "14-22-1-2480" + }, + { + "id": 6751, + "gameVersionTypeID": 3, + "name": "14.22.1.2481", + "slug": "14-22-1-2481" + }, + { + "id": 6752, + "gameVersionTypeID": 3, + "name": "14.22.1.2482", + "slug": "14-22-1-2482" + }, + { + "id": 6753, + "gameVersionTypeID": 3, + "name": "14.22.1.2483", + "slug": "14-22-1-2483" + }, + { + "id": 6754, + "gameVersionTypeID": 3, + "name": "14.22.1.2484", + "slug": "14-22-1-2484" + }, + { + "id": 6755, + "gameVersionTypeID": 3, + "name": "14.22.1.2485", + "slug": "14-22-1-2485" + }, + { + "id": 6756, + "gameVersionTypeID": 628, + "name": "1.12.2", + "slug": "1-12-2" + }, + { + "id": 6757, + "gameVersionTypeID": 3, + "name": "14.23.0.2486", + "slug": "14-23-0-2486" + }, + { + "id": 6758, + "gameVersionTypeID": 3, + "name": "14.23.0.2487", + "slug": "14-23-0-2487" + }, + { + "id": 6759, + "gameVersionTypeID": 3, + "name": "12.18.3.2488", + "slug": "12-18-3-2488" + }, + { + "id": 6760, + "gameVersionTypeID": 3, + "name": "14.23.0.2489", + "slug": "14-23-0-2489" + }, + { + "id": 6762, + "gameVersionTypeID": 2, + "name": "Java 9", + "slug": "java-9" + }, + { + "id": 6763, + "gameVersionTypeID": 3, + "name": "14.23.0.2490", + "slug": "14-23-0-2490" + }, + { + "id": 6764, + "gameVersionTypeID": 3, + "name": "14.23.0.2491", + "slug": "14-23-0-2491" + }, + { + "id": 6765, + "gameVersionTypeID": 3, + "name": "14.23.0.2492", + "slug": "14-23-0-2492" + }, + { + "id": 6766, + "gameVersionTypeID": 3, + "name": "14.23.0.2493", + "slug": "14-23-0-2493" + }, + { + "id": 6767, + "gameVersionTypeID": 3, + "name": "14.23.0.2494", + "slug": "14-23-0-2494" + }, + { + "id": 6768, + "gameVersionTypeID": 3, + "name": "14.23.0.2495", + "slug": "14-23-0-2495" + }, + { + "id": 6769, + "gameVersionTypeID": 3, + "name": "14.23.0.2496", + "slug": "14-23-0-2496" + }, + { + "id": 6770, + "gameVersionTypeID": 3, + "name": "14.23.0.2497", + "slug": "14-23-0-2497" + }, + { + "id": 6771, + "gameVersionTypeID": 3, + "name": "14.23.0.2498", + "slug": "14-23-0-2498" + }, + { + "id": 6772, + "gameVersionTypeID": 3, + "name": "14.23.0.2499", + "slug": "14-23-0-2499" + }, + { + "id": 6773, + "gameVersionTypeID": 3, + "name": "14.23.0.2500", + "slug": "14-23-0-2500" + }, + { + "id": 6774, + "gameVersionTypeID": 3, + "name": "14.23.0.2501", + "slug": "14-23-0-2501" + }, + { + "id": 6775, + "gameVersionTypeID": 3, + "name": "14.23.0.2502", + "slug": "14-23-0-2502" + }, + { + "id": 6776, + "gameVersionTypeID": 3, + "name": "14.23.0.2503", + "slug": "14-23-0-2503" + }, + { + "id": 6777, + "gameVersionTypeID": 3, + "name": "13.20.1.2504", + "slug": "13-20-1-2504" + }, + { + "id": 6778, + "gameVersionTypeID": 3, + "name": "13.20.1.2505", + "slug": "13-20-1-2505" + }, + { + "id": 6779, + "gameVersionTypeID": 3, + "name": "13.20.1.2506", + "slug": "13-20-1-2506" + }, + { + "id": 6780, + "gameVersionTypeID": 3, + "name": "13.20.1.2507", + "slug": "13-20-1-2507" + }, + { + "id": 6781, + "gameVersionTypeID": 3, + "name": "14.23.0.2508", + "slug": "14-23-0-2508" + }, + { + "id": 6782, + "gameVersionTypeID": 3, + "name": "14.23.0.2509", + "slug": "14-23-0-2509" + }, + { + "id": 6783, + "gameVersionTypeID": 3, + "name": "13.20.1.2510", + "slug": "13-20-1-2510" + }, + { + "id": 6784, + "gameVersionTypeID": 3, + "name": "12.18.3.2511", + "slug": "12-18-3-2511" + }, + { + "id": 6785, + "gameVersionTypeID": 3, + "name": "14.23.0.2512", + "slug": "14-23-0-2512" + }, + { + "id": 6787, + "gameVersionTypeID": 3, + "name": "13.20.1.2513", + "slug": "13-20-1-2513" + }, + { + "id": 6788, + "gameVersionTypeID": 3, + "name": "14.23.0.2514", + "slug": "14-23-0-2514" + }, + { + "id": 6789, + "gameVersionTypeID": 3, + "name": "14.23.0.2515", + "slug": "14-23-0-2515" + }, + { + "id": 6790, + "gameVersionTypeID": 3, + "name": "13.20.1.2516", + "slug": "13-20-1-2516" + }, + { + "id": 6792, + "gameVersionTypeID": 3, + "name": "14.23.0.2517", + "slug": "14-23-0-2517" + }, + { + "id": 6794, + "gameVersionTypeID": 3, + "name": "14.23.0.2518", + "slug": "14-23-0-2518" + }, + { + "id": 6795, + "gameVersionTypeID": 3, + "name": "14.23.0.2519", + "slug": "14-23-0-2519" + }, + { + "id": 6796, + "gameVersionTypeID": 3, + "name": "14.23.0.2520", + "slug": "14-23-0-2520" + }, + { + "id": 6797, + "gameVersionTypeID": 3, + "name": "14.23.0.2521", + "slug": "14-23-0-2521" + }, + { + "id": 6798, + "gameVersionTypeID": 3, + "name": "14.23.0.2522", + "slug": "14-23-0-2522" + }, + { + "id": 6799, + "gameVersionTypeID": 3, + "name": "14.23.0.2523", + "slug": "14-23-0-2523" + }, + { + "id": 6800, + "gameVersionTypeID": 3, + "name": "14.23.0.2524", + "slug": "14-23-0-2524" + }, + { + "id": 6801, + "gameVersionTypeID": 3, + "name": "14.23.0.2525", + "slug": "14-23-0-2525" + }, + { + "id": 6802, + "gameVersionTypeID": 3, + "name": "14.23.0.2526", + "slug": "14-23-0-2526" + }, + { + "id": 6803, + "gameVersionTypeID": 3, + "name": "14.23.0.2527", + "slug": "14-23-0-2527" + }, + { + "id": 6804, + "gameVersionTypeID": 3, + "name": "14.23.0.2528", + "slug": "14-23-0-2528" + }, + { + "id": 6806, + "gameVersionTypeID": 3, + "name": "14.23.0.2529", + "slug": "14-23-0-2529" + }, + { + "id": 6807, + "gameVersionTypeID": 3, + "name": "13.20.1.2530", + "slug": "13-20-1-2530" + }, + { + "id": 6808, + "gameVersionTypeID": 3, + "name": "14.23.0.2531", + "slug": "14-23-0-2531" + }, + { + "id": 6809, + "gameVersionTypeID": 3, + "name": "14.23.0.2532", + "slug": "14-23-0-2532" + }, + { + "id": 6810, + "gameVersionTypeID": 3, + "name": "14.23.0.2533", + "slug": "14-23-0-2533" + }, + { + "id": 6811, + "gameVersionTypeID": 3, + "name": "14.23.0.2534", + "slug": "14-23-0-2534" + }, + { + "id": 6812, + "gameVersionTypeID": 3, + "name": "14.23.0.2535", + "slug": "14-23-0-2535" + }, + { + "id": 6813, + "gameVersionTypeID": 3, + "name": "14.23.0.2536", + "slug": "14-23-0-2536" + }, + { + "id": 6814, + "gameVersionTypeID": 3, + "name": "14.23.0.2537", + "slug": "14-23-0-2537" + }, + { + "id": 6815, + "gameVersionTypeID": 3, + "name": "14.23.0.2538", + "slug": "14-23-0-2538" + }, + { + "id": 6816, + "gameVersionTypeID": 3, + "name": "14.23.0.2539", + "slug": "14-23-0-2539" + }, + { + "id": 6817, + "gameVersionTypeID": 3, + "name": "14.23.0.2540", + "slug": "14-23-0-2540" + }, + { + "id": 6818, + "gameVersionTypeID": 3, + "name": "14.23.0.2541", + "slug": "14-23-0-2541" + }, + { + "id": 6821, + "gameVersionTypeID": 3, + "name": "14.23.0.2542", + "slug": "14-23-0-2542" + }, + { + "id": 6822, + "gameVersionTypeID": 3, + "name": "14.23.0.2543", + "slug": "14-23-0-2543" + }, + { + "id": 6823, + "gameVersionTypeID": 3, + "name": "14.23.0.2544", + "slug": "14-23-0-2544" + }, + { + "id": 6824, + "gameVersionTypeID": 3, + "name": "14.23.0.2545", + "slug": "14-23-0-2545" + }, + { + "id": 6825, + "gameVersionTypeID": 3, + "name": "14.23.0.2546", + "slug": "14-23-0-2546" + }, + { + "id": 6826, + "gameVersionTypeID": 3, + "name": "14.23.0.2547", + "slug": "14-23-0-2547" + }, + { + "id": 6827, + "gameVersionTypeID": 3, + "name": "14.23.0.2548", + "slug": "14-23-0-2548" + }, + { + "id": 6828, + "gameVersionTypeID": 3, + "name": "14.23.0.2549", + "slug": "14-23-0-2549" + }, + { + "id": 6829, + "gameVersionTypeID": 3, + "name": "14.23.0.2550", + "slug": "14-23-0-2550" + }, + { + "id": 6830, + "gameVersionTypeID": 3, + "name": "14.23.0.2551", + "slug": "14-23-0-2551" + }, + { + "id": 6831, + "gameVersionTypeID": 3, + "name": "14.23.0.2552", + "slug": "14-23-0-2552" + }, + { + "id": 6832, + "gameVersionTypeID": 3, + "name": "14.23.0.2553", + "slug": "14-23-0-2553" + }, + { + "id": 6833, + "gameVersionTypeID": 3, + "name": "14.23.1.2554", + "slug": "14-23-1-2554" + }, + { + "id": 6834, + "gameVersionTypeID": 55023, + "name": "1.13-Snapshot", + "slug": "1-13-snapshot" + }, + { + "id": 6836, + "gameVersionTypeID": 3, + "name": "14.23.1.2555", + "slug": "14-23-1-2555" + }, + { + "id": 6837, + "gameVersionTypeID": 3, + "name": "14.23.1.2556", + "slug": "14-23-1-2556" + }, + { + "id": 6838, + "gameVersionTypeID": 3, + "name": "14.23.1.2557", + "slug": "14-23-1-2557" + }, + { + "id": 6839, + "gameVersionTypeID": 3, + "name": "14.23.1.2558", + "slug": "14-23-1-2558" + }, + { + "id": 6840, + "gameVersionTypeID": 3, + "name": "14.23.1.2559", + "slug": "14-23-1-2559" + }, + { + "id": 6842, + "gameVersionTypeID": 3, + "name": "14.23.1.2560", + "slug": "14-23-1-2560" + }, + { + "id": 6843, + "gameVersionTypeID": 3, + "name": "14.23.1.2561", + "slug": "14-23-1-2561" + }, + { + "id": 6844, + "gameVersionTypeID": 3, + "name": "14.23.1.2562", + "slug": "14-23-1-2562" + }, + { + "id": 6845, + "gameVersionTypeID": 3, + "name": "13.20.1.2563", + "slug": "13-20-1-2563" + }, + { + "id": 6846, + "gameVersionTypeID": 3, + "name": "14.23.1.2564", + "slug": "14-23-1-2564" + }, + { + "id": 6847, + "gameVersionTypeID": 3, + "name": "14.23.1.2565", + "slug": "14-23-1-2565" + }, + { + "id": 6848, + "gameVersionTypeID": 3, + "name": "14.23.1.2566", + "slug": "14-23-1-2566" + }, + { + "id": 6850, + "gameVersionTypeID": 3, + "name": "14.23.1.2567", + "slug": "14-23-1-2567" + }, + { + "id": 6851, + "gameVersionTypeID": 3, + "name": "14.23.1.2568", + "slug": "14-23-1-2568" + }, + { + "id": 6852, + "gameVersionTypeID": 3, + "name": "14.23.1.2569", + "slug": "14-23-1-2569" + }, + { + "id": 6853, + "gameVersionTypeID": 3, + "name": "14.23.1.2570", + "slug": "14-23-1-2570" + }, + { + "id": 6854, + "gameVersionTypeID": 3, + "name": "14.23.1.2571", + "slug": "14-23-1-2571" + }, + { + "id": 6855, + "gameVersionTypeID": 3, + "name": "14.23.1.2572", + "slug": "14-23-1-2572" + }, + { + "id": 6856, + "gameVersionTypeID": 3, + "name": "14.23.1.2573", + "slug": "14-23-1-2573" + }, + { + "id": 6857, + "gameVersionTypeID": 3, + "name": "14.23.1.2574", + "slug": "14-23-1-2574" + }, + { + "id": 6858, + "gameVersionTypeID": 3, + "name": "14.23.1.2575", + "slug": "14-23-1-2575" + }, + { + "id": 6859, + "gameVersionTypeID": 3, + "name": "14.23.1.2576", + "slug": "14-23-1-2576" + }, + { + "id": 6860, + "gameVersionTypeID": 3, + "name": "14.23.1.2577", + "slug": "14-23-1-2577" + }, + { + "id": 6861, + "gameVersionTypeID": 3, + "name": "14.23.1.2578", + "slug": "14-23-1-2578" + }, + { + "id": 6862, + "gameVersionTypeID": 3, + "name": "13.20.1.2579", + "slug": "13-20-1-2579" + }, + { + "id": 6864, + "gameVersionTypeID": 3, + "name": "14.23.1.2580", + "slug": "14-23-1-2580" + }, + { + "id": 6865, + "gameVersionTypeID": 3, + "name": "14.23.1.2581", + "slug": "14-23-1-2581" + }, + { + "id": 6866, + "gameVersionTypeID": 3, + "name": "14.23.1.2582", + "slug": "14-23-1-2582" + }, + { + "id": 6867, + "gameVersionTypeID": 3, + "name": "14.23.1.2583", + "slug": "14-23-1-2583" + }, + { + "id": 6868, + "gameVersionTypeID": 3, + "name": "14.23.1.2584", + "slug": "14-23-1-2584" + }, + { + "id": 6869, + "gameVersionTypeID": 3, + "name": "14.23.1.2585", + "slug": "14-23-1-2585" + }, + { + "id": 6870, + "gameVersionTypeID": 3, + "name": "14.23.1.2586", + "slug": "14-23-1-2586" + }, + { + "id": 6871, + "gameVersionTypeID": 3, + "name": "14.23.1.2587", + "slug": "14-23-1-2587" + }, + { + "id": 6872, + "gameVersionTypeID": 3, + "name": "13.20.1.2588", + "slug": "13-20-1-2588" + }, + { + "id": 6874, + "gameVersionTypeID": 3, + "name": "14.23.1.2589", + "slug": "14-23-1-2589" + }, + { + "id": 6875, + "gameVersionTypeID": 615, + "name": "0.16.1", + "slug": "0-16-1" + }, + { + "id": 6876, + "gameVersionTypeID": 615, + "name": "0.16.2", + "slug": "0-16-2" + }, + { + "id": 6877, + "gameVersionTypeID": 615, + "name": "1.0", + "slug": "1-0" + }, + { + "id": 6878, + "gameVersionTypeID": 615, + "name": "1.0.1", + "slug": "1-0-1" + }, + { + "id": 6879, + "gameVersionTypeID": 615, + "name": "1.0.2", + "slug": "1-0-2" + }, + { + "id": 6880, + "gameVersionTypeID": 615, + "name": "1.0.3", + "slug": "1-0-3" + }, + { + "id": 6881, + "gameVersionTypeID": 615, + "name": "1.2.8", + "slug": "1-2-8" + }, + { + "id": 6882, + "gameVersionTypeID": 615, + "name": "1.2.7", + "slug": "1-2-7" + }, + { + "id": 6883, + "gameVersionTypeID": 615, + "name": "1.2.6", + "slug": "1-2-6" + }, + { + "id": 6884, + "gameVersionTypeID": 615, + "name": "1.2.5", + "slug": "1-2-5" + }, + { + "id": 6885, + "gameVersionTypeID": 615, + "name": "1.2.3", + "slug": "1-2-3" + }, + { + "id": 6886, + "gameVersionTypeID": 615, + "name": "1.2.2", + "slug": "1-2-2" + }, + { + "id": 6887, + "gameVersionTypeID": 615, + "name": "1.2.1", + "slug": "1-2-1" + }, + { + "id": 6888, + "gameVersionTypeID": 615, + "name": "1.2", + "slug": "1-2" + }, + { + "id": 6889, + "gameVersionTypeID": 615, + "name": "1.0.4", + "slug": "1-0-4" + }, + { + "id": 6890, + "gameVersionTypeID": 615, + "name": "1.0.5", + "slug": "1-0-5" + }, + { + "id": 6891, + "gameVersionTypeID": 615, + "name": "1.0.6", + "slug": "1-0-6" + }, + { + "id": 6892, + "gameVersionTypeID": 615, + "name": "1.0.7", + "slug": "1-0-7" + }, + { + "id": 6893, + "gameVersionTypeID": 615, + "name": "1.0.8", + "slug": "1-0-8" + }, + { + "id": 6894, + "gameVersionTypeID": 615, + "name": "1.0.9", + "slug": "1-0-9" + }, + { + "id": 6895, + "gameVersionTypeID": 615, + "name": "1.1", + "slug": "1-1" + }, + { + "id": 6896, + "gameVersionTypeID": 615, + "name": "1.1.1", + "slug": "1-1-1" + }, + { + "id": 6897, + "gameVersionTypeID": 615, + "name": "1.1.2", + "slug": "1-1-2" + }, + { + "id": 6898, + "gameVersionTypeID": 615, + "name": "1.1.3", + "slug": "1-1-3" + }, + { + "id": 6899, + "gameVersionTypeID": 615, + "name": "1.1.4", + "slug": "1-1-4" + }, + { + "id": 6900, + "gameVersionTypeID": 615, + "name": "1.1.5", + "slug": "1-1-5" + }, + { + "id": 6901, + "gameVersionTypeID": 615, + "name": "1.1.7", + "slug": "1-1-7" + }, + { + "id": 6902, + "gameVersionTypeID": 3, + "name": "14.23.1.2590", + "slug": "14-23-1-2590" + }, + { + "id": 6906, + "gameVersionTypeID": 3, + "name": "14.23.1.2591", + "slug": "14-23-1-2591" + }, + { + "id": 6907, + "gameVersionTypeID": 3, + "name": "14.23.1.2592", + "slug": "14-23-1-2592" + }, + { + "id": 6908, + "gameVersionTypeID": 3, + "name": "14.23.1.2593", + "slug": "14-23-1-2593" + }, + { + "id": 6909, + "gameVersionTypeID": 3, + "name": "14.23.1.2594", + "slug": "14-23-1-2594" + }, + { + "id": 6910, + "gameVersionTypeID": 3, + "name": "14.23.1.2595", + "slug": "14-23-1-2595" + }, + { + "id": 6911, + "gameVersionTypeID": 3, + "name": "14.23.1.2596", + "slug": "14-23-1-2596" + }, + { + "id": 6912, + "gameVersionTypeID": 3, + "name": "14.23.1.2597", + "slug": "14-23-1-2597" + }, + { + "id": 6913, + "gameVersionTypeID": 3, + "name": "14.23.1.2598", + "slug": "14-23-1-2598" + }, + { + "id": 6914, + "gameVersionTypeID": 3, + "name": "14.23.1.2599", + "slug": "14-23-1-2599" + }, + { + "id": 6915, + "gameVersionTypeID": 3, + "name": "14.23.1.2600", + "slug": "14-23-1-2600" + }, + { + "id": 6916, + "gameVersionTypeID": 3, + "name": "14.23.1.2601", + "slug": "14-23-1-2601" + }, + { + "id": 6917, + "gameVersionTypeID": 3, + "name": "14.23.1.2602", + "slug": "14-23-1-2602" + }, + { + "id": 6918, + "gameVersionTypeID": 3, + "name": "14.23.1.2603", + "slug": "14-23-1-2603" + }, + { + "id": 6919, + "gameVersionTypeID": 3, + "name": "14.23.1.2604", + "slug": "14-23-1-2604" + }, + { + "id": 6920, + "gameVersionTypeID": 3, + "name": "14.23.1.2605", + "slug": "14-23-1-2605" + }, + { + "id": 6921, + "gameVersionTypeID": 3, + "name": "14.23.1.2606", + "slug": "14-23-1-2606" + }, + { + "id": 6922, + "gameVersionTypeID": 3, + "name": "14.23.1.2607", + "slug": "14-23-1-2607" + }, + { + "id": 6923, + "gameVersionTypeID": 3, + "name": "14.23.1.2608", + "slug": "14-23-1-2608" + }, + { + "id": 6924, + "gameVersionTypeID": 3, + "name": "14.23.1.2609", + "slug": "14-23-1-2609" + }, + { + "id": 6925, + "gameVersionTypeID": 3, + "name": "14.23.1.2610", + "slug": "14-23-1-2610" + }, + { + "id": 6926, + "gameVersionTypeID": 3, + "name": "14.23.2.2611", + "slug": "14-23-2-2611" + }, + { + "id": 6927, + "gameVersionTypeID": 3, + "name": "14.23.2.2612", + "slug": "14-23-2-2612" + }, + { + "id": 6928, + "gameVersionTypeID": 3, + "name": "14.23.2.2613", + "slug": "14-23-2-2613" + }, + { + "id": 6929, + "gameVersionTypeID": 3, + "name": "14.23.2.2614", + "slug": "14-23-2-2614" + }, + { + "id": 6930, + "gameVersionTypeID": 3, + "name": "14.23.2.2615", + "slug": "14-23-2-2615" + }, + { + "id": 6931, + "gameVersionTypeID": 3, + "name": "14.23.2.2616", + "slug": "14-23-2-2616" + }, + { + "id": 6933, + "gameVersionTypeID": 3, + "name": "14.23.2.2617", + "slug": "14-23-2-2617" + }, + { + "id": 6934, + "gameVersionTypeID": 3, + "name": "14.23.2.2618", + "slug": "14-23-2-2618" + }, + { + "id": 6935, + "gameVersionTypeID": 3, + "name": "14.23.2.2619", + "slug": "14-23-2-2619" + }, + { + "id": 6936, + "gameVersionTypeID": 3, + "name": "14.23.2.2620", + "slug": "14-23-2-2620" + }, + { + "id": 6937, + "gameVersionTypeID": 3, + "name": "14.23.2.2621", + "slug": "14-23-2-2621" + }, + { + "id": 6938, + "gameVersionTypeID": 3, + "name": "14.23.2.2622", + "slug": "14-23-2-2622" + }, + { + "id": 6939, + "gameVersionTypeID": 3, + "name": "14.23.2.2623", + "slug": "14-23-2-2623" + }, + { + "id": 6948, + "gameVersionTypeID": 3, + "name": "14.23.2.2624", + "slug": "14-23-2-2624" + }, + { + "id": 6951, + "gameVersionTypeID": 3, + "name": "14.23.2.2625", + "slug": "14-23-2-2625" + }, + { + "id": 6953, + "gameVersionTypeID": 3, + "name": "14.23.2.2626", + "slug": "14-23-2-2626" + }, + { + "id": 6954, + "gameVersionTypeID": 3, + "name": "14.23.2.2627", + "slug": "14-23-2-2627" + }, + { + "id": 6956, + "gameVersionTypeID": 3, + "name": "14.23.2.2628", + "slug": "14-23-2-2628" + }, + { + "id": 6957, + "gameVersionTypeID": 3, + "name": "14.23.2.2629", + "slug": "14-23-2-2629" + }, + { + "id": 6958, + "gameVersionTypeID": 3, + "name": "14.23.2.2630", + "slug": "14-23-2-2630" + }, + { + "id": 6959, + "gameVersionTypeID": 3, + "name": "14.23.2.2631", + "slug": "14-23-2-2631" + }, + { + "id": 6960, + "gameVersionTypeID": 3, + "name": "14.23.2.2632", + "slug": "14-23-2-2632" + }, + { + "id": 6961, + "gameVersionTypeID": 3, + "name": "14.23.2.2633", + "slug": "14-23-2-2633" + }, + { + "id": 6962, + "gameVersionTypeID": 3, + "name": "14.23.2.2634", + "slug": "14-23-2-2634" + }, + { + "id": 6963, + "gameVersionTypeID": 3, + "name": "14.23.2.2635", + "slug": "14-23-2-2635" + }, + { + "id": 6964, + "gameVersionTypeID": 3, + "name": "14.23.2.2636", + "slug": "14-23-2-2636" + }, + { + "id": 6965, + "gameVersionTypeID": 3, + "name": "14.23.2.2637", + "slug": "14-23-2-2637" + }, + { + "id": 6966, + "gameVersionTypeID": 3, + "name": "14.23.2.2638", + "slug": "14-23-2-2638" + }, + { + "id": 6967, + "gameVersionTypeID": 3, + "name": "14.23.2.2639", + "slug": "14-23-2-2639" + }, + { + "id": 6968, + "gameVersionTypeID": 3, + "name": "14.23.2.2640", + "slug": "14-23-2-2640" + }, + { + "id": 6970, + "gameVersionTypeID": 3, + "name": "14.23.2.2641", + "slug": "14-23-2-2641" + }, + { + "id": 6971, + "gameVersionTypeID": 3, + "name": "14.23.2.2642", + "slug": "14-23-2-2642" + }, + { + "id": 6972, + "gameVersionTypeID": 3, + "name": "14.23.2.2643", + "slug": "14-23-2-2643" + }, + { + "id": 6973, + "gameVersionTypeID": 3, + "name": "14.23.2.2644", + "slug": "14-23-2-2644" + }, + { + "id": 6974, + "gameVersionTypeID": 3, + "name": "14.23.2.2645", + "slug": "14-23-2-2645" + }, + { + "id": 6975, + "gameVersionTypeID": 3, + "name": "14.23.2.2646", + "slug": "14-23-2-2646" + }, + { + "id": 6976, + "gameVersionTypeID": 3, + "name": "14.23.2.2647", + "slug": "14-23-2-2647" + }, + { + "id": 6977, + "gameVersionTypeID": 3, + "name": "14.23.2.2648", + "slug": "14-23-2-2648" + }, + { + "id": 6978, + "gameVersionTypeID": 3, + "name": "14.23.2.2649", + "slug": "14-23-2-2649" + }, + { + "id": 6979, + "gameVersionTypeID": 3, + "name": "14.23.2.2650", + "slug": "14-23-2-2650" + }, + { + "id": 6980, + "gameVersionTypeID": 3, + "name": "14.23.2.2651", + "slug": "14-23-2-2651" + }, + { + "id": 6981, + "gameVersionTypeID": 3, + "name": "14.23.2.2652", + "slug": "14-23-2-2652" + }, + { + "id": 6982, + "gameVersionTypeID": 3, + "name": "14.23.2.2653", + "slug": "14-23-2-2653" + }, + { + "id": 6984, + "gameVersionTypeID": 3, + "name": "14.23.2.2654", + "slug": "14-23-2-2654" + }, + { + "id": 6987, + "gameVersionTypeID": 3, + "name": "14.23.3.2655", + "slug": "14-23-3-2655" + }, + { + "id": 6988, + "gameVersionTypeID": 3, + "name": "14.23.3.2656", + "slug": "14-23-3-2656" + }, + { + "id": 6989, + "gameVersionTypeID": 3, + "name": "14.23.3.2657", + "slug": "14-23-3-2657" + }, + { + "id": 6990, + "gameVersionTypeID": 3, + "name": "14.23.3.2658", + "slug": "14-23-3-2658" + }, + { + "id": 6991, + "gameVersionTypeID": 3, + "name": "14.23.3.2659", + "slug": "14-23-3-2659" + }, + { + "id": 6992, + "gameVersionTypeID": 3, + "name": "14.23.3.2660", + "slug": "14-23-3-2660" + }, + { + "id": 6993, + "gameVersionTypeID": 3, + "name": "14.23.3.2661", + "slug": "14-23-3-2661" + }, + { + "id": 6994, + "gameVersionTypeID": 3, + "name": "14.23.3.2662", + "slug": "14-23-3-2662" + }, + { + "id": 6995, + "gameVersionTypeID": 3, + "name": "14.23.3.2663", + "slug": "14-23-3-2663" + }, + { + "id": 6996, + "gameVersionTypeID": 3, + "name": "14.23.3.2664", + "slug": "14-23-3-2664" + }, + { + "id": 6997, + "gameVersionTypeID": 3, + "name": "14.23.3.2665", + "slug": "14-23-3-2665" + }, + { + "id": 6998, + "gameVersionTypeID": 3, + "name": "14.23.3.2666", + "slug": "14-23-3-2666" + }, + { + "id": 6999, + "gameVersionTypeID": 3, + "name": "14.23.3.2667", + "slug": "14-23-3-2667" + }, + { + "id": 7000, + "gameVersionTypeID": 3, + "name": "14.23.3.2668", + "slug": "14-23-3-2668" + }, + { + "id": 7001, + "gameVersionTypeID": 3, + "name": "14.22.0.2475", + "slug": "14-22-0-2475" + }, + { + "id": 7002, + "gameVersionTypeID": 3, + "name": "14.23.3.2669", + "slug": "14-23-3-2669" + }, + { + "id": 7004, + "gameVersionTypeID": 3, + "name": "14.23.3.2670", + "slug": "14-23-3-2670" + }, + { + "id": 7005, + "gameVersionTypeID": 3, + "name": "14.23.3.2671", + "slug": "14-23-3-2671" + }, + { + "id": 7006, + "gameVersionTypeID": 3, + "name": "14.23.3.2672", + "slug": "14-23-3-2672" + }, + { + "id": 7007, + "gameVersionTypeID": 3, + "name": "14.23.3.2673", + "slug": "14-23-3-2673" + }, + { + "id": 7008, + "gameVersionTypeID": 3, + "name": "14.23.3.2674", + "slug": "14-23-3-2674" + }, + { + "id": 7009, + "gameVersionTypeID": 3, + "name": "14.23.3.2675", + "slug": "14-23-3-2675" + }, + { + "id": 7011, + "gameVersionTypeID": 3, + "name": "14.23.3.2676", + "slug": "14-23-3-2676" + }, + { + "id": 7012, + "gameVersionTypeID": 3, + "name": "14.23.3.2677", + "slug": "14-23-3-2677" + }, + { + "id": 7013, + "gameVersionTypeID": 3, + "name": "14.23.3.2678", + "slug": "14-23-3-2678" + }, + { + "id": 7015, + "gameVersionTypeID": 3, + "name": "14.23.3.2679", + "slug": "14-23-3-2679" + }, + { + "id": 7016, + "gameVersionTypeID": 3, + "name": "14.23.3.2680", + "slug": "14-23-3-2680" + }, + { + "id": 7017, + "gameVersionTypeID": 3, + "name": "14.23.3.2681", + "slug": "14-23-3-2681" + }, + { + "id": 7018, + "gameVersionTypeID": 3, + "name": "14.23.3.2682", + "slug": "14-23-3-2682" + }, + { + "id": 7019, + "gameVersionTypeID": 3, + "name": "14.23.3.2683", + "slug": "14-23-3-2683" + }, + { + "id": 7020, + "gameVersionTypeID": 3, + "name": "14.23.3.2684", + "slug": "14-23-3-2684" + }, + { + "id": 7021, + "gameVersionTypeID": 3, + "name": "14.23.3.2685", + "slug": "14-23-3-2685" + }, + { + "id": 7022, + "gameVersionTypeID": 3, + "name": "14.23.3.2686", + "slug": "14-23-3-2686" + }, + { + "id": 7023, + "gameVersionTypeID": 3, + "name": "14.23.3.2688", + "slug": "14-23-3-2688" + }, + { + "id": 7024, + "gameVersionTypeID": 3, + "name": "14.23.3.2689", + "slug": "14-23-3-2689" + }, + { + "id": 7025, + "gameVersionTypeID": 3, + "name": "14.23.3.2690", + "slug": "14-23-3-2690" + }, + { + "id": 7027, + "gameVersionTypeID": 3, + "name": "14.23.3.2691", + "slug": "14-23-3-2691" + }, + { + "id": 7028, + "gameVersionTypeID": 3, + "name": "14.23.3.2692", + "slug": "14-23-3-2692" + }, + { + "id": 7029, + "gameVersionTypeID": 3, + "name": "14.23.3.2693", + "slug": "14-23-3-2693" + }, + { + "id": 7030, + "gameVersionTypeID": 3, + "name": "14.23.3.2694", + "slug": "14-23-3-2694" + }, + { + "id": 7031, + "gameVersionTypeID": 3, + "name": "14.23.3.2695", + "slug": "14-23-3-2695" + }, + { + "id": 7032, + "gameVersionTypeID": 3, + "name": "14.23.3.2696", + "slug": "14-23-3-2696" + }, + { + "id": 7033, + "gameVersionTypeID": 3, + "name": "14.23.3.2697", + "slug": "14-23-3-2697" + }, + { + "id": 7034, + "gameVersionTypeID": 3, + "name": "14.23.3.2698", + "slug": "14-23-3-2698" + }, + { + "id": 7035, + "gameVersionTypeID": 3, + "name": "14.23.3.2699", + "slug": "14-23-3-2699" + }, + { + "id": 7036, + "gameVersionTypeID": 3, + "name": "14.23.3.2700", + "slug": "14-23-3-2700" + }, + { + "id": 7037, + "gameVersionTypeID": 3, + "name": "14.23.3.2701", + "slug": "14-23-3-2701" + }, + { + "id": 7038, + "gameVersionTypeID": 3, + "name": "14.23.3.2702", + "slug": "14-23-3-2702" + }, + { + "id": 7039, + "gameVersionTypeID": 3, + "name": "14.23.4.2703", + "slug": "14-23-4-2703" + }, + { + "id": 7042, + "gameVersionTypeID": 3, + "name": "14.23.4.2704", + "slug": "14-23-4-2704" + }, + { + "id": 7043, + "gameVersionTypeID": 3, + "name": "14.23.4.2705", + "slug": "14-23-4-2705" + }, + { + "id": 7044, + "gameVersionTypeID": 3, + "name": "14.23.4.2706", + "slug": "14-23-4-2706" + }, + { + "id": 7045, + "gameVersionTypeID": 3, + "name": "14.23.4.2707", + "slug": "14-23-4-2707" + }, + { + "id": 7046, + "gameVersionTypeID": 3, + "name": "14.23.4.2708", + "slug": "14-23-4-2708" + }, + { + "id": 7048, + "gameVersionTypeID": 3, + "name": "14.23.4.2709", + "slug": "14-23-4-2709" + }, + { + "id": 7049, + "gameVersionTypeID": 3, + "name": "14.23.4.2710", + "slug": "14-23-4-2710" + }, + { + "id": 7050, + "gameVersionTypeID": 3, + "name": "14.23.4.2711", + "slug": "14-23-4-2711" + }, + { + "id": 7051, + "gameVersionTypeID": 3, + "name": "14.23.4.2712", + "slug": "14-23-4-2712" + }, + { + "id": 7052, + "gameVersionTypeID": 3, + "name": "14.23.4.2713", + "slug": "14-23-4-2713" + }, + { + "id": 7053, + "gameVersionTypeID": 3, + "name": "14.23.4.2714", + "slug": "14-23-4-2714" + }, + { + "id": 7054, + "gameVersionTypeID": 3, + "name": "14.23.4.2715", + "slug": "14-23-4-2715" + }, + { + "id": 7055, + "gameVersionTypeID": 3, + "name": "14.23.4.2716", + "slug": "14-23-4-2716" + }, + { + "id": 7056, + "gameVersionTypeID": 3, + "name": "14.23.4.2717", + "slug": "14-23-4-2717" + }, + { + "id": 7057, + "gameVersionTypeID": 3, + "name": "14.23.4.2718", + "slug": "14-23-4-2718" + }, + { + "id": 7058, + "gameVersionTypeID": 3, + "name": "14.23.4.2719", + "slug": "14-23-4-2719" + }, + { + "id": 7059, + "gameVersionTypeID": 3, + "name": "14.23.4.2720", + "slug": "14-23-4-2720" + }, + { + "id": 7060, + "gameVersionTypeID": 3, + "name": "14.23.4.2721", + "slug": "14-23-4-2721" + }, + { + "id": 7061, + "gameVersionTypeID": 3, + "name": "14.23.4.2722", + "slug": "14-23-4-2722" + }, + { + "id": 7062, + "gameVersionTypeID": 3, + "name": "14.23.4.2723", + "slug": "14-23-4-2723" + }, + { + "id": 7063, + "gameVersionTypeID": 3, + "name": "14.23.4.2724", + "slug": "14-23-4-2724" + }, + { + "id": 7064, + "gameVersionTypeID": 3, + "name": "14.23.4.2725", + "slug": "14-23-4-2725" + }, + { + "id": 7066, + "gameVersionTypeID": 3, + "name": "14.23.4.2726", + "slug": "14-23-4-2726" + }, + { + "id": 7067, + "gameVersionTypeID": 3, + "name": "14.23.4.2727", + "slug": "14-23-4-2727" + }, + { + "id": 7068, + "gameVersionTypeID": 3, + "name": "14.23.4.2728", + "slug": "14-23-4-2728" + }, + { + "id": 7069, + "gameVersionTypeID": 3, + "name": "14.23.4.2729", + "slug": "14-23-4-2729" + }, + { + "id": 7070, + "gameVersionTypeID": 3, + "name": "14.23.4.2730", + "slug": "14-23-4-2730" + }, + { + "id": 7072, + "gameVersionTypeID": 3, + "name": "14.23.4.2732", + "slug": "14-23-4-2732" + }, + { + "id": 7073, + "gameVersionTypeID": 3, + "name": "14.23.4.2733", + "slug": "14-23-4-2733" + }, + { + "id": 7074, + "gameVersionTypeID": 3, + "name": "14.23.4.2734", + "slug": "14-23-4-2734" + }, + { + "id": 7075, + "gameVersionTypeID": 3, + "name": "14.23.4.2735", + "slug": "14-23-4-2735" + }, + { + "id": 7076, + "gameVersionTypeID": 3, + "name": "14.23.4.2736", + "slug": "14-23-4-2736" + }, + { + "id": 7077, + "gameVersionTypeID": 3, + "name": "14.23.4.2737", + "slug": "14-23-4-2737" + }, + { + "id": 7078, + "gameVersionTypeID": 3, + "name": "14.23.4.2738", + "slug": "14-23-4-2738" + }, + { + "id": 7080, + "gameVersionTypeID": 3, + "name": "14.23.4.2739", + "slug": "14-23-4-2739" + }, + { + "id": 7081, + "gameVersionTypeID": 55023, + "name": "1.13", + "slug": "1-13" + }, + { + "id": 7085, + "gameVersionTypeID": 3, + "name": "14.23.4.2740", + "slug": "14-23-4-2740" + }, + { + "id": 7086, + "gameVersionTypeID": 3, + "name": "14.23.4.2741", + "slug": "14-23-4-2741" + }, + { + "id": 7087, + "gameVersionTypeID": 3, + "name": "14.23.4.2742", + "slug": "14-23-4-2742" + }, + { + "id": 7088, + "gameVersionTypeID": 3, + "name": "14.23.4.2743", + "slug": "14-23-4-2743" + }, + { + "id": 7089, + "gameVersionTypeID": 3, + "name": "14.23.4.2744", + "slug": "14-23-4-2744" + }, + { + "id": 7090, + "gameVersionTypeID": 3, + "name": "14.23.4.2745", + "slug": "14-23-4-2745" + }, + { + "id": 7091, + "gameVersionTypeID": 3, + "name": "14.23.4.2746", + "slug": "14-23-4-2746" + }, + { + "id": 7092, + "gameVersionTypeID": 3, + "name": "14.23.4.2747", + "slug": "14-23-4-2747" + }, + { + "id": 7095, + "gameVersionTypeID": 3, + "name": "14.23.4.2748", + "slug": "14-23-4-2748" + }, + { + "id": 7096, + "gameVersionTypeID": 3, + "name": "14.23.4.2749", + "slug": "14-23-4-2749" + }, + { + "id": 7097, + "gameVersionTypeID": 3, + "name": "14.23.4.2750", + "slug": "14-23-4-2750" + }, + { + "id": 7098, + "gameVersionTypeID": 3, + "name": "14.23.4.2751", + "slug": "14-23-4-2751" + }, + { + "id": 7099, + "gameVersionTypeID": 3, + "name": "14.23.4.2752", + "slug": "14-23-4-2752" + }, + { + "id": 7100, + "gameVersionTypeID": 3, + "name": "14.23.4.2753", + "slug": "14-23-4-2753" + }, + { + "id": 7101, + "gameVersionTypeID": 3, + "name": "14.23.4.2754", + "slug": "14-23-4-2754" + }, + { + "id": 7102, + "gameVersionTypeID": 3, + "name": "14.23.4.2755", + "slug": "14-23-4-2755" + }, + { + "id": 7103, + "gameVersionTypeID": 3, + "name": "14.23.4.2756", + "slug": "14-23-4-2756" + }, + { + "id": 7104, + "gameVersionTypeID": 3, + "name": "14.23.4.2757", + "slug": "14-23-4-2757" + }, + { + "id": 7105, + "gameVersionTypeID": 1, + "name": "1.13", + "slug": "1-13" + }, + { + "id": 7106, + "gameVersionTypeID": 3, + "name": "14.23.4.2758", + "slug": "14-23-4-2758" + }, + { + "id": 7107, + "gameVersionTypeID": 55023, + "name": "1.13.1", + "slug": "1-13-1" + }, + { + "id": 7108, + "gameVersionTypeID": 3, + "name": "14.23.4.2759", + "slug": "14-23-4-2759" + }, + { + "id": 7109, + "gameVersionTypeID": 3, + "name": "14.23.4.2760", + "slug": "14-23-4-2760" + }, + { + "id": 7113, + "gameVersionTypeID": 2, + "name": "Java 10", + "slug": "java-10" + }, + { + "id": 7115, + "gameVersionTypeID": 3, + "name": "14.23.4.2761", + "slug": "14-23-4-2761" + }, + { + "id": 7116, + "gameVersionTypeID": 3, + "name": "14.23.4.2762", + "slug": "14-23-4-2762" + }, + { + "id": 7117, + "gameVersionTypeID": 3, + "name": "14.23.4.2763", + "slug": "14-23-4-2763" + }, + { + "id": 7118, + "gameVersionTypeID": 3, + "name": "14.23.4.2764", + "slug": "14-23-4-2764" + }, + { + "id": 7119, + "gameVersionTypeID": 3, + "name": "14.23.4.2765", + "slug": "14-23-4-2765" + }, + { + "id": 7121, + "gameVersionTypeID": 3, + "name": "14.23.4.2766", + "slug": "14-23-4-2766" + }, + { + "id": 7122, + "gameVersionTypeID": 3, + "name": "14.23.4.2767", + "slug": "14-23-4-2767" + }, + { + "id": 7123, + "gameVersionTypeID": 3, + "name": "14.23.5.2768", + "slug": "14-23-5-2768" + }, + { + "id": 7125, + "gameVersionTypeID": 3, + "name": "14.23.5.2769", + "slug": "14-23-5-2769" + }, + { + "id": 7126, + "gameVersionTypeID": 3, + "name": "14.23.5.2770", + "slug": "14-23-5-2770" + }, + { + "id": 7129, + "gameVersionTypeID": 3, + "name": "14.23.5.2771", + "slug": "14-23-5-2771" + }, + { + "id": 7130, + "gameVersionTypeID": 3, + "name": "14.23.5.2772", + "slug": "14-23-5-2772" + }, + { + "id": 7132, + "gameVersionTypeID": 55023, + "name": "1.13.2", + "slug": "1-13-2" + }, + { + "id": 7133, + "gameVersionTypeID": 64806, + "name": "1.14-Snapshot", + "slug": "1-14-snapshot" + }, + { + "id": 7134, + "gameVersionTypeID": 615, + "name": "1.2.9", + "slug": "1-2-9" + }, + { + "id": 7135, + "gameVersionTypeID": 615, + "name": "1.2.10", + "slug": "1-2-10" + }, + { + "id": 7136, + "gameVersionTypeID": 615, + "name": "1.2.11", + "slug": "1-2-11" + }, + { + "id": 7137, + "gameVersionTypeID": 615, + "name": "1.2.13", + "slug": "1-2-13" + }, + { + "id": 7138, + "gameVersionTypeID": 615, + "name": "1.4", + "slug": "1-4" + }, + { + "id": 7139, + "gameVersionTypeID": 615, + "name": "1.5", + "slug": "1-5" + }, + { + "id": 7140, + "gameVersionTypeID": 615, + "name": "1.6", + "slug": "1-6" + }, + { + "id": 7141, + "gameVersionTypeID": 615, + "name": "1.7", + "slug": "1-7" + }, + { + "id": 7143, + "gameVersionTypeID": 3, + "name": "14.23.5.2773", + "slug": "14-23-5-2773" + }, + { + "id": 7144, + "gameVersionTypeID": 3, + "name": "14.23.5.2774", + "slug": "14-23-5-2774" + }, + { + "id": 7145, + "gameVersionTypeID": 3, + "name": "14.23.5.2775", + "slug": "14-23-5-2775" + }, + { + "id": 7146, + "gameVersionTypeID": 3, + "name": "14.23.5.2776", + "slug": "14-23-5-2776" + }, + { + "id": 7147, + "gameVersionTypeID": 3, + "name": "14.23.5.2777", + "slug": "14-23-5-2777" + }, + { + "id": 7148, + "gameVersionTypeID": 3, + "name": "14.23.5.2778", + "slug": "14-23-5-2778" + }, + { + "id": 7149, + "gameVersionTypeID": 3, + "name": "14.23.5.2779", + "slug": "14-23-5-2779" + }, + { + "id": 7150, + "gameVersionTypeID": 3, + "name": "14.23.5.2780", + "slug": "14-23-5-2780" + }, + { + "id": 7151, + "gameVersionTypeID": 3, + "name": "14.23.5.2781", + "slug": "14-23-5-2781" + }, + { + "id": 7152, + "gameVersionTypeID": 3, + "name": "14.23.5.2782", + "slug": "14-23-5-2782" + }, + { + "id": 7153, + "gameVersionTypeID": 3, + "name": "14.23.5.2783", + "slug": "14-23-5-2783" + }, + { + "id": 7154, + "gameVersionTypeID": 3, + "name": "14.23.5.2784", + "slug": "14-23-5-2784" + }, + { + "id": 7157, + "gameVersionTypeID": 3, + "name": "14.23.5.2785", + "slug": "14-23-5-2785" + }, + { + "id": 7158, + "gameVersionTypeID": 3, + "name": "14.23.5.2786", + "slug": "14-23-5-2786" + }, + { + "id": 7159, + "gameVersionTypeID": 3, + "name": "14.23.5.2787", + "slug": "14-23-5-2787" + }, + { + "id": 7160, + "gameVersionTypeID": 3, + "name": "14.23.5.2788", + "slug": "14-23-5-2788" + }, + { + "id": 7161, + "gameVersionTypeID": 3, + "name": "14.23.5.2789", + "slug": "14-23-5-2789" + }, + { + "id": 7162, + "gameVersionTypeID": 3, + "name": "14.23.5.2790", + "slug": "14-23-5-2790" + }, + { + "id": 7163, + "gameVersionTypeID": 3, + "name": "14.23.5.2791", + "slug": "14-23-5-2791" + }, + { + "id": 7164, + "gameVersionTypeID": 3, + "name": "14.23.5.2792", + "slug": "14-23-5-2792" + }, + { + "id": 7165, + "gameVersionTypeID": 3, + "name": "14.23.5.2793", + "slug": "14-23-5-2793" + }, + { + "id": 7166, + "gameVersionTypeID": 3, + "name": "14.23.5.2794", + "slug": "14-23-5-2794" + }, + { + "id": 7167, + "gameVersionTypeID": 3, + "name": "14.23.5.2795", + "slug": "14-23-5-2795" + }, + { + "id": 7168, + "gameVersionTypeID": 3, + "name": "14.23.5.2796", + "slug": "14-23-5-2796" + }, + { + "id": 7173, + "gameVersionTypeID": 3, + "name": "14.23.5.2797", + "slug": "14-23-5-2797" + }, + { + "id": 7174, + "gameVersionTypeID": 3, + "name": "14.23.5.2798", + "slug": "14-23-5-2798" + }, + { + "id": 7175, + "gameVersionTypeID": 3, + "name": "14.23.5.2799", + "slug": "14-23-5-2799" + }, + { + "id": 7176, + "gameVersionTypeID": 3, + "name": "14.23.5.2800", + "slug": "14-23-5-2800" + }, + { + "id": 7177, + "gameVersionTypeID": 3, + "name": "14.23.5.2801", + "slug": "14-23-5-2801" + }, + { + "id": 7178, + "gameVersionTypeID": 3, + "name": "14.23.5.2802", + "slug": "14-23-5-2802" + }, + { + "id": 7179, + "gameVersionTypeID": 3, + "name": "14.23.5.2803", + "slug": "14-23-5-2803" + }, + { + "id": 7180, + "gameVersionTypeID": 3, + "name": "14.23.5.2804", + "slug": "14-23-5-2804" + }, + { + "id": 7181, + "gameVersionTypeID": 3, + "name": "14.23.5.2805", + "slug": "14-23-5-2805" + }, + { + "id": 7182, + "gameVersionTypeID": 3, + "name": "14.23.5.2806", + "slug": "14-23-5-2806" + }, + { + "id": 7183, + "gameVersionTypeID": 3, + "name": "14.23.5.2807", + "slug": "14-23-5-2807" + }, + { + "id": 7186, + "gameVersionTypeID": 3, + "name": "14.23.5.2808", + "slug": "14-23-5-2808" + }, + { + "id": 7187, + "gameVersionTypeID": 3, + "name": "14.23.5.2809", + "slug": "14-23-5-2809" + }, + { + "id": 7188, + "gameVersionTypeID": 3, + "name": "14.23.5.2810", + "slug": "14-23-5-2810" + }, + { + "id": 7190, + "gameVersionTypeID": 3, + "name": "14.23.5.2811", + "slug": "14-23-5-2811" + }, + { + "id": 7192, + "gameVersionTypeID": 3, + "name": "14.23.5.2812", + "slug": "14-23-5-2812" + }, + { + "id": 7193, + "gameVersionTypeID": 3, + "name": "14.23.5.2813", + "slug": "14-23-5-2813" + }, + { + "id": 7194, + "gameVersionTypeID": 3, + "name": "14.23.5.2814", + "slug": "14-23-5-2814" + }, + { + "id": 7195, + "gameVersionTypeID": 3, + "name": "14.23.5.2815", + "slug": "14-23-5-2815" + }, + { + "id": 7196, + "gameVersionTypeID": 3, + "name": "25.0.9", + "slug": "25-0-9" + }, + { + "id": 7197, + "gameVersionTypeID": 3, + "name": "25.0.10", + "slug": "25-0-10" + }, + { + "id": 7198, + "gameVersionTypeID": 3, + "name": "25.0.11", + "slug": "25-0-11" + }, + { + "id": 7199, + "gameVersionTypeID": 3, + "name": "25.0.12", + "slug": "25-0-12" + }, + { + "id": 7200, + "gameVersionTypeID": 3, + "name": "25.0.13", + "slug": "25-0-13" + }, + { + "id": 7201, + "gameVersionTypeID": 3, + "name": "25.0.14", + "slug": "25-0-14" + }, + { + "id": 7202, + "gameVersionTypeID": 3, + "name": "25.0.17", + "slug": "25-0-17" + }, + { + "id": 7203, + "gameVersionTypeID": 3, + "name": "25.0.20", + "slug": "25-0-20" + }, + { + "id": 7204, + "gameVersionTypeID": 3, + "name": "25.0.21", + "slug": "25-0-21" + }, + { + "id": 7205, + "gameVersionTypeID": 3, + "name": "25.0.22", + "slug": "25-0-22" + }, + { + "id": 7206, + "gameVersionTypeID": 3, + "name": "25.0.23", + "slug": "25-0-23" + }, + { + "id": 7207, + "gameVersionTypeID": 3, + "name": "25.0.26", + "slug": "25-0-26" + }, + { + "id": 7208, + "gameVersionTypeID": 3, + "name": "25.0.27", + "slug": "25-0-27" + }, + { + "id": 7209, + "gameVersionTypeID": 3, + "name": "25.0.28", + "slug": "25-0-28" + }, + { + "id": 7210, + "gameVersionTypeID": 3, + "name": "25.0.29", + "slug": "25-0-29" + }, + { + "id": 7211, + "gameVersionTypeID": 3, + "name": "25.0.30", + "slug": "25-0-30" + }, + { + "id": 7212, + "gameVersionTypeID": 3, + "name": "25.0.31", + "slug": "25-0-31" + }, + { + "id": 7213, + "gameVersionTypeID": 3, + "name": "25.0.32", + "slug": "25-0-32" + }, + { + "id": 7214, + "gameVersionTypeID": 3, + "name": "25.0.33", + "slug": "25-0-33" + }, + { + "id": 7215, + "gameVersionTypeID": 3, + "name": "25.0.34", + "slug": "25-0-34" + }, + { + "id": 7216, + "gameVersionTypeID": 3, + "name": "25.0.35", + "slug": "25-0-35" + }, + { + "id": 7217, + "gameVersionTypeID": 3, + "name": "25.0.36", + "slug": "25-0-36" + }, + { + "id": 7218, + "gameVersionTypeID": 3, + "name": "25.0.37", + "slug": "25-0-37" + }, + { + "id": 7219, + "gameVersionTypeID": 3, + "name": "25.0.40", + "slug": "25-0-40" + }, + { + "id": 7220, + "gameVersionTypeID": 3, + "name": "25.0.41", + "slug": "25-0-41" + }, + { + "id": 7221, + "gameVersionTypeID": 3, + "name": "25.0.42", + "slug": "25-0-42" + }, + { + "id": 7222, + "gameVersionTypeID": 3, + "name": "25.0.43", + "slug": "25-0-43" + }, + { + "id": 7223, + "gameVersionTypeID": 3, + "name": "25.0.44", + "slug": "25-0-44" + }, + { + "id": 7224, + "gameVersionTypeID": 3, + "name": "25.0.45", + "slug": "25-0-45" + }, + { + "id": 7225, + "gameVersionTypeID": 3, + "name": "25.0.47", + "slug": "25-0-47" + }, + { + "id": 7226, + "gameVersionTypeID": 3, + "name": "25.0.48", + "slug": "25-0-48" + }, + { + "id": 7227, + "gameVersionTypeID": 3, + "name": "25.0.49", + "slug": "25-0-49" + }, + { + "id": 7228, + "gameVersionTypeID": 3, + "name": "25.0.50", + "slug": "25-0-50" + }, + { + "id": 7229, + "gameVersionTypeID": 3, + "name": "25.0.51", + "slug": "25-0-51" + }, + { + "id": 7230, + "gameVersionTypeID": 3, + "name": "25.0.52", + "slug": "25-0-52" + }, + { + "id": 7231, + "gameVersionTypeID": 3, + "name": "25.0.53", + "slug": "25-0-53" + }, + { + "id": 7232, + "gameVersionTypeID": 3, + "name": "25.0.54", + "slug": "25-0-54" + }, + { + "id": 7233, + "gameVersionTypeID": 3, + "name": "25.0.55", + "slug": "25-0-55" + }, + { + "id": 7234, + "gameVersionTypeID": 3, + "name": "25.0.56", + "slug": "25-0-56" + }, + { + "id": 7235, + "gameVersionTypeID": 3, + "name": "25.0.57", + "slug": "25-0-57" + }, + { + "id": 7236, + "gameVersionTypeID": 3, + "name": "25.0.58", + "slug": "25-0-58" + }, + { + "id": 7237, + "gameVersionTypeID": 3, + "name": "25.0.59", + "slug": "25-0-59" + }, + { + "id": 7238, + "gameVersionTypeID": 3, + "name": "25.0.60", + "slug": "25-0-60" + }, + { + "id": 7239, + "gameVersionTypeID": 3, + "name": "25.0.61", + "slug": "25-0-61" + }, + { + "id": 7240, + "gameVersionTypeID": 3, + "name": "25.0.63", + "slug": "25-0-63" + }, + { + "id": 7242, + "gameVersionTypeID": 3, + "name": "25.0.64", + "slug": "25-0-64" + }, + { + "id": 7243, + "gameVersionTypeID": 3, + "name": "25.0.66", + "slug": "25-0-66" + }, + { + "id": 7244, + "gameVersionTypeID": 3, + "name": "25.0.68", + "slug": "25-0-68" + }, + { + "id": 7245, + "gameVersionTypeID": 3, + "name": "25.0.69", + "slug": "25-0-69" + }, + { + "id": 7246, + "gameVersionTypeID": 3, + "name": "25.0.70", + "slug": "25-0-70" + }, + { + "id": 7249, + "gameVersionTypeID": 3, + "name": "25.0.71", + "slug": "25-0-71" + }, + { + "id": 7250, + "gameVersionTypeID": 3, + "name": "25.0.73", + "slug": "25-0-73" + }, + { + "id": 7251, + "gameVersionTypeID": 3, + "name": "25.0.74", + "slug": "25-0-74" + }, + { + "id": 7252, + "gameVersionTypeID": 3, + "name": "25.0.76", + "slug": "25-0-76" + }, + { + "id": 7254, + "gameVersionTypeID": 3, + "name": "25.0.77", + "slug": "25-0-77" + }, + { + "id": 7255, + "gameVersionTypeID": 3, + "name": "25.0.78", + "slug": "25-0-78" + }, + { + "id": 7256, + "gameVersionTypeID": 3, + "name": "25.0.79", + "slug": "25-0-79" + }, + { + "id": 7257, + "gameVersionTypeID": 3, + "name": "14.23.5.2816", + "slug": "14-23-5-2816" + }, + { + "id": 7258, + "gameVersionTypeID": 3, + "name": "14.23.5.2817", + "slug": "14-23-5-2817" + }, + { + "id": 7259, + "gameVersionTypeID": 3, + "name": "14.23.5.2818", + "slug": "14-23-5-2818" + }, + { + "id": 7260, + "gameVersionTypeID": 3, + "name": "14.23.5.2819", + "slug": "14-23-5-2819" + }, + { + "id": 7261, + "gameVersionTypeID": 3, + "name": "14.23.5.2820", + "slug": "14-23-5-2820" + }, + { + "id": 7263, + "gameVersionTypeID": 3, + "name": "25.0.80", + "slug": "25-0-80" + }, + { + "id": 7264, + "gameVersionTypeID": 3, + "name": "25.0.81", + "slug": "25-0-81" + }, + { + "id": 7265, + "gameVersionTypeID": 3, + "name": "25.0.82", + "slug": "25-0-82" + }, + { + "id": 7266, + "gameVersionTypeID": 3, + "name": "25.0.84", + "slug": "25-0-84" + }, + { + "id": 7267, + "gameVersionTypeID": 3, + "name": "14.23.5.2821", + "slug": "14-23-5-2821" + }, + { + "id": 7268, + "gameVersionTypeID": 3, + "name": "25.0.85", + "slug": "25-0-85" + }, + { + "id": 7269, + "gameVersionTypeID": 3, + "name": "25.0.87", + "slug": "25-0-87" + }, + { + "id": 7270, + "gameVersionTypeID": 3, + "name": "25.0.88", + "slug": "25-0-88" + }, + { + "id": 7271, + "gameVersionTypeID": 3, + "name": "25.0.89", + "slug": "25-0-89" + }, + { + "id": 7272, + "gameVersionTypeID": 3, + "name": "25.0.90", + "slug": "25-0-90" + }, + { + "id": 7273, + "gameVersionTypeID": 3, + "name": "14.23.5.2822", + "slug": "14-23-5-2822" + }, + { + "id": 7274, + "gameVersionTypeID": 3, + "name": "14.23.5.2823", + "slug": "14-23-5-2823" + }, + { + "id": 7275, + "gameVersionTypeID": 3, + "name": "25.0.91", + "slug": "25-0-91" + }, + { + "id": 7276, + "gameVersionTypeID": 3, + "name": "25.0.92", + "slug": "25-0-92" + }, + { + "id": 7277, + "gameVersionTypeID": 3, + "name": "25.0.93", + "slug": "25-0-93" + }, + { + "id": 7278, + "gameVersionTypeID": 3, + "name": "25.0.94", + "slug": "25-0-94" + }, + { + "id": 7279, + "gameVersionTypeID": 3, + "name": "25.0.95", + "slug": "25-0-95" + }, + { + "id": 7280, + "gameVersionTypeID": 3, + "name": "25.0.96", + "slug": "25-0-96" + }, + { + "id": 7281, + "gameVersionTypeID": 3, + "name": "25.0.99", + "slug": "25-0-99" + }, + { + "id": 7282, + "gameVersionTypeID": 3, + "name": "25.0.100", + "slug": "25-0-100" + }, + { + "id": 7283, + "gameVersionTypeID": 3, + "name": "14.23.5.2824", + "slug": "14-23-5-2824" + }, + { + "id": 7285, + "gameVersionTypeID": 3, + "name": "25.0.102", + "slug": "25-0-102" + }, + { + "id": 7286, + "gameVersionTypeID": 3, + "name": "25.0.103", + "slug": "25-0-103" + }, + { + "id": 7287, + "gameVersionTypeID": 3, + "name": "25.0.107", + "slug": "25-0-107" + }, + { + "id": 7288, + "gameVersionTypeID": 3, + "name": "25.0.108", + "slug": "25-0-108" + }, + { + "id": 7289, + "gameVersionTypeID": 3, + "name": "25.0.109", + "slug": "25-0-109" + }, + { + "id": 7290, + "gameVersionTypeID": 3, + "name": "14.23.5.2825", + "slug": "14-23-5-2825" + }, + { + "id": 7291, + "gameVersionTypeID": 3, + "name": "25.0.110", + "slug": "25-0-110" + }, + { + "id": 7292, + "gameVersionTypeID": 3, + "name": "14.23.5.2826", + "slug": "14-23-5-2826" + }, + { + "id": 7293, + "gameVersionTypeID": 3, + "name": "14.23.5.2827", + "slug": "14-23-5-2827" + }, + { + "id": 7294, + "gameVersionTypeID": 3, + "name": "14.23.5.2828", + "slug": "14-23-5-2828" + }, + { + "id": 7295, + "gameVersionTypeID": 3, + "name": "14.23.5.2829", + "slug": "14-23-5-2829" + }, + { + "id": 7296, + "gameVersionTypeID": 3, + "name": "14.23.5.2830", + "slug": "14-23-5-2830" + }, + { + "id": 7297, + "gameVersionTypeID": 3, + "name": "14.23.5.2831", + "slug": "14-23-5-2831" + }, + { + "id": 7298, + "gameVersionTypeID": 3, + "name": "14.23.5.2832", + "slug": "14-23-5-2832" + }, + { + "id": 7299, + "gameVersionTypeID": 3, + "name": "14.23.5.2833", + "slug": "14-23-5-2833" + }, + { + "id": 7300, + "gameVersionTypeID": 3, + "name": "14.23.5.2834", + "slug": "14-23-5-2834" + }, + { + "id": 7301, + "gameVersionTypeID": 3, + "name": "14.23.5.2835", + "slug": "14-23-5-2835" + }, + { + "id": 7302, + "gameVersionTypeID": 3, + "name": "25.0.114", + "slug": "25-0-114" + }, + { + "id": 7303, + "gameVersionTypeID": 3, + "name": "25.0.121", + "slug": "25-0-121" + }, + { + "id": 7304, + "gameVersionTypeID": 3, + "name": "25.0.128", + "slug": "25-0-128" + }, + { + "id": 7307, + "gameVersionTypeID": 3, + "name": "25.0.134", + "slug": "25-0-134" + }, + { + "id": 7308, + "gameVersionTypeID": 3, + "name": "25.0.135", + "slug": "25-0-135" + }, + { + "id": 7309, + "gameVersionTypeID": 3, + "name": "14.23.5.2836", + "slug": "14-23-5-2836" + }, + { + "id": 7310, + "gameVersionTypeID": 3, + "name": "25.0.141", + "slug": "25-0-141" + }, + { + "id": 7311, + "gameVersionTypeID": 3, + "name": "25.0.142", + "slug": "25-0-142" + }, + { + "id": 7312, + "gameVersionTypeID": 3, + "name": "25.0.144", + "slug": "25-0-144" + }, + { + "id": 7313, + "gameVersionTypeID": 3, + "name": "25.0.145", + "slug": "25-0-145" + }, + { + "id": 7314, + "gameVersionTypeID": 3, + "name": "25.0.146", + "slug": "25-0-146" + }, + { + "id": 7315, + "gameVersionTypeID": 3, + "name": "25.0.147", + "slug": "25-0-147" + }, + { + "id": 7316, + "gameVersionTypeID": 3, + "name": "25.0.149", + "slug": "25-0-149" + }, + { + "id": 7318, + "gameVersionTypeID": 64806, + "name": "1.14", + "slug": "1-14" + }, + { + "id": 7319, + "gameVersionTypeID": 3, + "name": "25.0.154", + "slug": "25-0-154" + }, + { + "id": 7320, + "gameVersionTypeID": 3, + "name": "25.0.160", + "slug": "25-0-160" + }, + { + "id": 7321, + "gameVersionTypeID": 3, + "name": "25.0.168", + "slug": "25-0-168" + }, + { + "id": 7322, + "gameVersionTypeID": 3, + "name": "25.0.174", + "slug": "25-0-174" + }, + { + "id": 7323, + "gameVersionTypeID": 3, + "name": "25.0.175", + "slug": "25-0-175" + }, + { + "id": 7324, + "gameVersionTypeID": 3, + "name": "25.0.182", + "slug": "25-0-182" + }, + { + "id": 7325, + "gameVersionTypeID": 3, + "name": "25.0.183", + "slug": "25-0-183" + }, + { + "id": 7326, + "gameVersionTypeID": 3, + "name": "25.0.187", + "slug": "25-0-187" + }, + { + "id": 7327, + "gameVersionTypeID": 3, + "name": "25.0.189", + "slug": "25-0-189" + }, + { + "id": 7328, + "gameVersionTypeID": 3, + "name": "25.0.190", + "slug": "25-0-190" + }, + { + "id": 7329, + "gameVersionTypeID": 3, + "name": "25.0.191", + "slug": "25-0-191" + }, + { + "id": 7330, + "gameVersionTypeID": 1, + "name": "1.14", + "slug": "1-14" + }, + { + "id": 7331, + "gameVersionTypeID": 3, + "name": "25.0.192", + "slug": "25-0-192" + }, + { + "id": 7332, + "gameVersionTypeID": 3, + "name": "14.23.5.2837", + "slug": "14-23-5-2837" + }, + { + "id": 7333, + "gameVersionTypeID": 3, + "name": "25.0.193", + "slug": "25-0-193" + }, + { + "id": 7334, + "gameVersionTypeID": 3, + "name": "25.0.194", + "slug": "25-0-194" + }, + { + "id": 7335, + "gameVersionTypeID": 3, + "name": "25.0.198", + "slug": "25-0-198" + }, + { + "id": 7336, + "gameVersionTypeID": 3, + "name": "25.0.199", + "slug": "25-0-199" + }, + { + "id": 7337, + "gameVersionTypeID": 3, + "name": "25.0.201", + "slug": "25-0-201" + }, + { + "id": 7338, + "gameVersionTypeID": 3, + "name": "25.0.202", + "slug": "25-0-202" + }, + { + "id": 7339, + "gameVersionTypeID": 3, + "name": "25.0.203", + "slug": "25-0-203" + }, + { + "id": 7340, + "gameVersionTypeID": 3, + "name": "25.0.204", + "slug": "25-0-204" + }, + { + "id": 7341, + "gameVersionTypeID": 3, + "name": "25.0.205", + "slug": "25-0-205" + }, + { + "id": 7342, + "gameVersionTypeID": 3, + "name": "25.0.206", + "slug": "25-0-206" + }, + { + "id": 7343, + "gameVersionTypeID": 3, + "name": "25.0.207", + "slug": "25-0-207" + }, + { + "id": 7344, + "gameVersionTypeID": 64806, + "name": "1.14.1", + "slug": "1-14-1" + }, + { + "id": 7345, + "gameVersionTypeID": 3, + "name": "25.0.208", + "slug": "25-0-208" + }, + { + "id": 7346, + "gameVersionTypeID": 3, + "name": "14.23.5.2838", + "slug": "14-23-5-2838" + }, + { + "id": 7348, + "gameVersionTypeID": 3, + "name": "25.0.209", + "slug": "25-0-209" + }, + { + "id": 7352, + "gameVersionTypeID": 615, + "name": "1.7.1", + "slug": "1-7-1" + }, + { + "id": 7355, + "gameVersionTypeID": 3, + "name": "25.0.210", + "slug": "25-0-210" + }, + { + "id": 7356, + "gameVersionTypeID": 3, + "name": "25.0.214", + "slug": "25-0-214" + }, + { + "id": 7359, + "gameVersionTypeID": 3, + "name": "25.0.215", + "slug": "25-0-215" + }, + { + "id": 7360, + "gameVersionTypeID": 3, + "name": "25.0.216", + "slug": "25-0-216" + }, + { + "id": 7361, + "gameVersionTypeID": 64806, + "name": "1.14.2", + "slug": "1-14-2" + }, + { + "id": 7362, + "gameVersionTypeID": 3, + "name": "25.0.218", + "slug": "25-0-218" + }, + { + "id": 7363, + "gameVersionTypeID": 3, + "name": "25.0.219", + "slug": "25-0-219" + }, + { + "id": 7365, + "gameVersionTypeID": 3, + "name": "26.0.0", + "slug": "26-0-0" + }, + { + "id": 7366, + "gameVersionTypeID": 3, + "name": "26.0.2", + "slug": "26-0-2" + }, + { + "id": 7367, + "gameVersionTypeID": 3, + "name": "26.0.3", + "slug": "26-0-3" + }, + { + "id": 7368, + "gameVersionTypeID": 3, + "name": "26.0.4", + "slug": "26-0-4" + }, + { + "id": 7369, + "gameVersionTypeID": 3, + "name": "26.0.5", + "slug": "26-0-5" + }, + { + "id": 7370, + "gameVersionTypeID": 3, + "name": "26.0.6", + "slug": "26-0-6" + }, + { + "id": 7371, + "gameVersionTypeID": 3, + "name": "26.0.7", + "slug": "26-0-7" + }, + { + "id": 7372, + "gameVersionTypeID": 3, + "name": "26.0.8", + "slug": "26-0-8" + }, + { + "id": 7373, + "gameVersionTypeID": 3, + "name": "26.0.10", + "slug": "26-0-10" + }, + { + "id": 7374, + "gameVersionTypeID": 3, + "name": "26.0.12", + "slug": "26-0-12" + }, + { + "id": 7375, + "gameVersionTypeID": 3, + "name": "26.0.13", + "slug": "26-0-13" + }, + { + "id": 7376, + "gameVersionTypeID": 3, + "name": "26.0.14", + "slug": "26-0-14" + }, + { + "id": 7377, + "gameVersionTypeID": 3, + "name": "26.0.15", + "slug": "26-0-15" + }, + { + "id": 7378, + "gameVersionTypeID": 3, + "name": "26.0.16", + "slug": "26-0-16" + }, + { + "id": 7379, + "gameVersionTypeID": 3, + "name": "26.0.17", + "slug": "26-0-17" + }, + { + "id": 7380, + "gameVersionTypeID": 3, + "name": "26.0.18", + "slug": "26-0-18" + }, + { + "id": 7381, + "gameVersionTypeID": 3, + "name": "26.0.19", + "slug": "26-0-19" + }, + { + "id": 7382, + "gameVersionTypeID": 3, + "name": "26.0.21", + "slug": "26-0-21" + }, + { + "id": 7383, + "gameVersionTypeID": 3, + "name": "26.0.22", + "slug": "26-0-22" + }, + { + "id": 7384, + "gameVersionTypeID": 3, + "name": "26.0.23", + "slug": "26-0-23" + }, + { + "id": 7385, + "gameVersionTypeID": 3, + "name": "26.0.25", + "slug": "26-0-25" + }, + { + "id": 7387, + "gameVersionTypeID": 3, + "name": "26.0.28", + "slug": "26-0-28" + }, + { + "id": 7388, + "gameVersionTypeID": 3, + "name": "26.0.29", + "slug": "26-0-29" + }, + { + "id": 7389, + "gameVersionTypeID": 3, + "name": "26.0.30", + "slug": "26-0-30" + }, + { + "id": 7390, + "gameVersionTypeID": 3, + "name": "26.0.32", + "slug": "26-0-32" + }, + { + "id": 7391, + "gameVersionTypeID": 3, + "name": "26.0.33", + "slug": "26-0-33" + }, + { + "id": 7392, + "gameVersionTypeID": 3, + "name": "26.0.35", + "slug": "26-0-35" + }, + { + "id": 7393, + "gameVersionTypeID": 3, + "name": "26.0.37", + "slug": "26-0-37" + }, + { + "id": 7394, + "gameVersionTypeID": 3, + "name": "26.0.39", + "slug": "26-0-39" + }, + { + "id": 7395, + "gameVersionTypeID": 3, + "name": "26.0.40", + "slug": "26-0-40" + }, + { + "id": 7396, + "gameVersionTypeID": 3, + "name": "26.0.41", + "slug": "26-0-41" + }, + { + "id": 7397, + "gameVersionTypeID": 3, + "name": "26.0.42", + "slug": "26-0-42" + }, + { + "id": 7398, + "gameVersionTypeID": 3, + "name": "26.0.43", + "slug": "26-0-43" + }, + { + "id": 7399, + "gameVersionTypeID": 3, + "name": "26.0.47", + "slug": "26-0-47" + }, + { + "id": 7400, + "gameVersionTypeID": 3, + "name": "26.0.48", + "slug": "26-0-48" + }, + { + "id": 7401, + "gameVersionTypeID": 3, + "name": "26.0.49", + "slug": "26-0-49" + }, + { + "id": 7402, + "gameVersionTypeID": 3, + "name": "26.0.50", + "slug": "26-0-50" + }, + { + "id": 7403, + "gameVersionTypeID": 3, + "name": "26.0.51", + "slug": "26-0-51" + }, + { + "id": 7404, + "gameVersionTypeID": 3, + "name": "26.0.52", + "slug": "26-0-52" + }, + { + "id": 7405, + "gameVersionTypeID": 3, + "name": "26.0.54", + "slug": "26-0-54" + }, + { + "id": 7406, + "gameVersionTypeID": 3, + "name": "26.0.55", + "slug": "26-0-55" + }, + { + "id": 7407, + "gameVersionTypeID": 3, + "name": "26.0.56", + "slug": "26-0-56" + }, + { + "id": 7408, + "gameVersionTypeID": 3, + "name": "26.0.57", + "slug": "26-0-57" + }, + { + "id": 7409, + "gameVersionTypeID": 3, + "name": "26.0.60", + "slug": "26-0-60" + }, + { + "id": 7410, + "gameVersionTypeID": 3, + "name": "26.0.61", + "slug": "26-0-61" + }, + { + "id": 7411, + "gameVersionTypeID": 3, + "name": "26.0.62", + "slug": "26-0-62" + }, + { + "id": 7412, + "gameVersionTypeID": 3, + "name": "26.0.63", + "slug": "26-0-63" + }, + { + "id": 7413, + "gameVersionTypeID": 64806, + "name": "1.14.3", + "slug": "1-14-3" + }, + { + "id": 7414, + "gameVersionTypeID": 3, + "name": "27.0.0", + "slug": "27-0-0" + }, + { + "id": 7415, + "gameVersionTypeID": 3, + "name": "27.0.1", + "slug": "27-0-1" + }, + { + "id": 7416, + "gameVersionTypeID": 3, + "name": "27.0.2", + "slug": "27-0-2" + }, + { + "id": 7418, + "gameVersionTypeID": 3, + "name": "27.0.3", + "slug": "27-0-3" + }, + { + "id": 7419, + "gameVersionTypeID": 3, + "name": "27.0.4", + "slug": "27-0-4" + }, + { + "id": 7420, + "gameVersionTypeID": 3, + "name": "27.0.5", + "slug": "27-0-5" + }, + { + "id": 7421, + "gameVersionTypeID": 3, + "name": "27.0.7", + "slug": "27-0-7" + }, + { + "id": 7422, + "gameVersionTypeID": 3, + "name": "27.0.8", + "slug": "27-0-8" + }, + { + "id": 7423, + "gameVersionTypeID": 3, + "name": "27.0.9", + "slug": "27-0-9" + }, + { + "id": 7424, + "gameVersionTypeID": 3, + "name": "27.0.10", + "slug": "27-0-10" + }, + { + "id": 7425, + "gameVersionTypeID": 3, + "name": "27.0.11", + "slug": "27-0-11" + }, + { + "id": 7426, + "gameVersionTypeID": 3, + "name": "27.0.12", + "slug": "27-0-12" + }, + { + "id": 7427, + "gameVersionTypeID": 3, + "name": "27.0.13", + "slug": "27-0-13" + }, + { + "id": 7428, + "gameVersionTypeID": 3, + "name": "27.0.14", + "slug": "27-0-14" + }, + { + "id": 7429, + "gameVersionTypeID": 3, + "name": "27.0.15", + "slug": "27-0-15" + }, + { + "id": 7430, + "gameVersionTypeID": 615, + "name": "1.8", + "slug": "1-8" + }, + { + "id": 7431, + "gameVersionTypeID": 615, + "name": "1.9", + "slug": "1-9" + }, + { + "id": 7432, + "gameVersionTypeID": 615, + "name": "1.10", + "slug": "1-10" + }, + { + "id": 7433, + "gameVersionTypeID": 615, + "name": "1.11", + "slug": "1-11" + }, + { + "id": 7434, + "gameVersionTypeID": 615, + "name": "1.12", + "slug": "1-12" + }, + { + "id": 7435, + "gameVersionTypeID": 615, + "name": "1.13", + "slug": "1-13" + }, + { + "id": 7436, + "gameVersionTypeID": 615, + "name": "1.14", + "slug": "1-14" + }, + { + "id": 7437, + "gameVersionTypeID": 3, + "name": "27.0.16", + "slug": "27-0-16" + }, + { + "id": 7438, + "gameVersionTypeID": 3, + "name": "27.0.17", + "slug": "27-0-17" + }, + { + "id": 7439, + "gameVersionTypeID": 3, + "name": "27.0.18", + "slug": "27-0-18" + }, + { + "id": 7440, + "gameVersionTypeID": 3, + "name": "27.0.19", + "slug": "27-0-19" + }, + { + "id": 7441, + "gameVersionTypeID": 3, + "name": "27.0.20", + "slug": "27-0-20" + }, + { + "id": 7442, + "gameVersionTypeID": 3, + "name": "27.0.21", + "slug": "27-0-21" + }, + { + "id": 7443, + "gameVersionTypeID": 3, + "name": "27.0.22", + "slug": "27-0-22" + }, + { + "id": 7444, + "gameVersionTypeID": 3, + "name": "27.0.23", + "slug": "27-0-23" + }, + { + "id": 7445, + "gameVersionTypeID": 3, + "name": "27.0.24", + "slug": "27-0-24" + }, + { + "id": 7446, + "gameVersionTypeID": 3, + "name": "27.0.25", + "slug": "27-0-25" + }, + { + "id": 7447, + "gameVersionTypeID": 3, + "name": "27.0.26", + "slug": "27-0-26" + }, + { + "id": 7448, + "gameVersionTypeID": 3, + "name": "27.0.29", + "slug": "27-0-29" + }, + { + "id": 7449, + "gameVersionTypeID": 3, + "name": "27.0.30", + "slug": "27-0-30" + }, + { + "id": 7450, + "gameVersionTypeID": 3, + "name": "27.0.31", + "slug": "27-0-31" + }, + { + "id": 7451, + "gameVersionTypeID": 3, + "name": "27.0.38", + "slug": "27-0-38" + }, + { + "id": 7452, + "gameVersionTypeID": 3, + "name": "27.0.40", + "slug": "27-0-40" + }, + { + "id": 7453, + "gameVersionTypeID": 3, + "name": "27.0.42", + "slug": "27-0-42" + }, + { + "id": 7454, + "gameVersionTypeID": 3, + "name": "27.0.43", + "slug": "27-0-43" + }, + { + "id": 7455, + "gameVersionTypeID": 3, + "name": "27.0.47", + "slug": "27-0-47" + }, + { + "id": 7456, + "gameVersionTypeID": 3, + "name": "27.0.49", + "slug": "27-0-49" + }, + { + "id": 7457, + "gameVersionTypeID": 3, + "name": "27.0.50", + "slug": "27-0-50" + }, + { + "id": 7460, + "gameVersionTypeID": 3, + "name": "27.0.51", + "slug": "27-0-51" + }, + { + "id": 7461, + "gameVersionTypeID": 3, + "name": "27.0.52", + "slug": "27-0-52" + }, + { + "id": 7462, + "gameVersionTypeID": 3, + "name": "27.0.53", + "slug": "27-0-53" + }, + { + "id": 7463, + "gameVersionTypeID": 3, + "name": "27.0.54", + "slug": "27-0-54" + }, + { + "id": 7464, + "gameVersionTypeID": 3, + "name": "27.0.55", + "slug": "27-0-55" + }, + { + "id": 7465, + "gameVersionTypeID": 3, + "name": "27.0.56", + "slug": "27-0-56" + }, + { + "id": 7466, + "gameVersionTypeID": 3, + "name": "27.0.57", + "slug": "27-0-57" + }, + { + "id": 7467, + "gameVersionTypeID": 3, + "name": "27.0.58", + "slug": "27-0-58" + }, + { + "id": 7468, + "gameVersionTypeID": 3, + "name": "27.0.59", + "slug": "27-0-59" + }, + { + "id": 7469, + "gameVersionTypeID": 64806, + "name": "1.14.4", + "slug": "1-14-4" + }, + { + "id": 7470, + "gameVersionTypeID": 3, + "name": "27.0.60", + "slug": "27-0-60" + }, + { + "id": 7471, + "gameVersionTypeID": 3, + "name": "28.0.1", + "slug": "28-0-1" + }, + { + "id": 7472, + "gameVersionTypeID": 3, + "name": "28.0.2", + "slug": "28-0-2" + }, + { + "id": 7473, + "gameVersionTypeID": 3, + "name": "28.0.3", + "slug": "28-0-3" + }, + { + "id": 7474, + "gameVersionTypeID": 3, + "name": "28.0.4", + "slug": "28-0-4" + }, + { + "id": 7475, + "gameVersionTypeID": 3, + "name": "28.0.5", + "slug": "28-0-5" + }, + { + "id": 7476, + "gameVersionTypeID": 3, + "name": "28.0.9", + "slug": "28-0-9" + }, + { + "id": 7477, + "gameVersionTypeID": 3, + "name": "28.0.11", + "slug": "28-0-11" + }, + { + "id": 7479, + "gameVersionTypeID": 3, + "name": "28.0.12", + "slug": "28-0-12" + }, + { + "id": 7480, + "gameVersionTypeID": 3, + "name": "28.0.13", + "slug": "28-0-13" + }, + { + "id": 7481, + "gameVersionTypeID": 3, + "name": "28.0.14", + "slug": "28-0-14" + }, + { + "id": 7482, + "gameVersionTypeID": 3, + "name": "28.0.16", + "slug": "28-0-16" + }, + { + "id": 7483, + "gameVersionTypeID": 3, + "name": "28.0.17", + "slug": "28-0-17" + }, + { + "id": 7484, + "gameVersionTypeID": 3, + "name": "28.0.18", + "slug": "28-0-18" + }, + { + "id": 7487, + "gameVersionTypeID": 3, + "name": "28.0.19", + "slug": "28-0-19" + }, + { + "id": 7488, + "gameVersionTypeID": 3, + "name": "28.0.20", + "slug": "28-0-20" + }, + { + "id": 7489, + "gameVersionTypeID": 3, + "name": "28.0.21", + "slug": "28-0-21" + }, + { + "id": 7490, + "gameVersionTypeID": 3, + "name": "28.0.22", + "slug": "28-0-22" + }, + { + "id": 7491, + "gameVersionTypeID": 3, + "name": "28.0.23", + "slug": "28-0-23" + }, + { + "id": 7492, + "gameVersionTypeID": 3, + "name": "28.0.24", + "slug": "28-0-24" + }, + { + "id": 7493, + "gameVersionTypeID": 3, + "name": "28.0.25", + "slug": "28-0-25" + }, + { + "id": 7494, + "gameVersionTypeID": 3, + "name": "28.0.26", + "slug": "28-0-26" + }, + { + "id": 7495, + "gameVersionTypeID": 3, + "name": "28.0.27", + "slug": "28-0-27" + }, + { + "id": 7496, + "gameVersionTypeID": 3, + "name": "28.0.28", + "slug": "28-0-28" + }, + { + "id": 7497, + "gameVersionTypeID": 3, + "name": "28.0.29", + "slug": "28-0-29" + }, + { + "id": 7498, + "gameVersionTypeID": 68441, + "name": "Forge", + "slug": "forge" + }, + { + "id": 7499, + "gameVersionTypeID": 68441, + "name": "Fabric", + "slug": "fabric" + }, + { + "id": 7500, + "gameVersionTypeID": 68441, + "name": "Rift", + "slug": "rift" + }, + { + "id": 7501, + "gameVersionTypeID": 3, + "name": "28.0.30", + "slug": "28-0-30" + }, + { + "id": 7502, + "gameVersionTypeID": 3, + "name": "28.0.32", + "slug": "28-0-32" + }, + { + "id": 7503, + "gameVersionTypeID": 3, + "name": "28.0.34", + "slug": "28-0-34" + }, + { + "id": 7504, + "gameVersionTypeID": 3, + "name": "28.0.35", + "slug": "28-0-35" + }, + { + "id": 7505, + "gameVersionTypeID": 3, + "name": "28.0.37", + "slug": "28-0-37" + }, + { + "id": 7506, + "gameVersionTypeID": 3, + "name": "28.0.38", + "slug": "28-0-38" + }, + { + "id": 7507, + "gameVersionTypeID": 3, + "name": "28.0.39", + "slug": "28-0-39" + }, + { + "id": 7508, + "gameVersionTypeID": 3, + "name": "28.0.40", + "slug": "28-0-40" + }, + { + "id": 7509, + "gameVersionTypeID": 3, + "name": "28.0.41", + "slug": "28-0-41" + }, + { + "id": 7510, + "gameVersionTypeID": 3, + "name": "28.0.45", + "slug": "28-0-45" + }, + { + "id": 7511, + "gameVersionTypeID": 3, + "name": "28.0.46", + "slug": "28-0-46" + }, + { + "id": 7512, + "gameVersionTypeID": 3, + "name": "28.0.47", + "slug": "28-0-47" + }, + { + "id": 7513, + "gameVersionTypeID": 3, + "name": "28.0.48", + "slug": "28-0-48" + }, + { + "id": 7514, + "gameVersionTypeID": 3, + "name": "28.0.49", + "slug": "28-0-49" + }, + { + "id": 7516, + "gameVersionTypeID": 3, + "name": "28.0.51", + "slug": "28-0-51" + }, + { + "id": 7517, + "gameVersionTypeID": 3, + "name": "28.0.55", + "slug": "28-0-55" + }, + { + "id": 7519, + "gameVersionTypeID": 68722, + "name": "1.15-Snapshot", + "slug": "1-15-snapshot" + }, + { + "id": 7521, + "gameVersionTypeID": 3, + "name": "28.0.56", + "slug": "28-0-56" + }, + { + "id": 7522, + "gameVersionTypeID": 3, + "name": "14.23.5.2839", + "slug": "14-23-5-2839" + }, + { + "id": 7523, + "gameVersionTypeID": 3, + "name": "28.0.58", + "slug": "28-0-58" + }, + { + "id": 7524, + "gameVersionTypeID": 3, + "name": "14.23.5.2840", + "slug": "14-23-5-2840" + }, + { + "id": 7525, + "gameVersionTypeID": 3, + "name": "28.0.62", + "slug": "28-0-62" + }, + { + "id": 7526, + "gameVersionTypeID": 3, + "name": "28.0.63", + "slug": "28-0-63" + }, + { + "id": 7527, + "gameVersionTypeID": 3, + "name": "14.23.5.2841", + "slug": "14-23-5-2841" + }, + { + "id": 7528, + "gameVersionTypeID": 3, + "name": "14.23.5.2842", + "slug": "14-23-5-2842" + }, + { + "id": 7529, + "gameVersionTypeID": 3, + "name": "14.23.5.2843", + "slug": "14-23-5-2843" + }, + { + "id": 7530, + "gameVersionTypeID": 3, + "name": "14.23.5.2844", + "slug": "14-23-5-2844" + }, + { + "id": 7531, + "gameVersionTypeID": 3, + "name": "28.0.65", + "slug": "28-0-65" + }, + { + "id": 7532, + "gameVersionTypeID": 3, + "name": "28.0.67", + "slug": "28-0-67" + }, + { + "id": 7533, + "gameVersionTypeID": 3, + "name": "28.0.68", + "slug": "28-0-68" + }, + { + "id": 7534, + "gameVersionTypeID": 3, + "name": "28.0.69", + "slug": "28-0-69" + }, + { + "id": 7535, + "gameVersionTypeID": 3, + "name": "28.0.70", + "slug": "28-0-70" + }, + { + "id": 7536, + "gameVersionTypeID": 3, + "name": "28.0.73", + "slug": "28-0-73" + }, + { + "id": 7538, + "gameVersionTypeID": 3, + "name": "28.0.74", + "slug": "28-0-74" + }, + { + "id": 7539, + "gameVersionTypeID": 3, + "name": "28.0.75", + "slug": "28-0-75" + }, + { + "id": 7540, + "gameVersionTypeID": 3, + "name": "28.0.76", + "slug": "28-0-76" + }, + { + "id": 7541, + "gameVersionTypeID": 3, + "name": "28.0.81", + "slug": "28-0-81" + }, + { + "id": 7542, + "gameVersionTypeID": 3, + "name": "28.0.82", + "slug": "28-0-82" + }, + { + "id": 7543, + "gameVersionTypeID": 3, + "name": "28.0.83", + "slug": "28-0-83" + }, + { + "id": 7544, + "gameVersionTypeID": 3, + "name": "14.23.5.2845", + "slug": "14-23-5-2845" + }, + { + "id": 7545, + "gameVersionTypeID": 3, + "name": "28.0.84", + "slug": "28-0-84" + }, + { + "id": 7546, + "gameVersionTypeID": 3, + "name": "28.0.85", + "slug": "28-0-85" + }, + { + "id": 7547, + "gameVersionTypeID": 3, + "name": "14.23.5.2846", + "slug": "14-23-5-2846" + }, + { + "id": 7548, + "gameVersionTypeID": 3, + "name": "28.0.86", + "slug": "28-0-86" + }, + { + "id": 7549, + "gameVersionTypeID": 3, + "name": "28.0.87", + "slug": "28-0-87" + }, + { + "id": 7550, + "gameVersionTypeID": 3, + "name": "28.0.88", + "slug": "28-0-88" + }, + { + "id": 7551, + "gameVersionTypeID": 3, + "name": "28.0.90", + "slug": "28-0-90" + }, + { + "id": 7552, + "gameVersionTypeID": 3, + "name": "28.0.91", + "slug": "28-0-91" + }, + { + "id": 7553, + "gameVersionTypeID": 3, + "name": "28.0.92", + "slug": "28-0-92" + }, + { + "id": 7554, + "gameVersionTypeID": 3, + "name": "28.0.93", + "slug": "28-0-93" + }, + { + "id": 7555, + "gameVersionTypeID": 3, + "name": "28.0.94", + "slug": "28-0-94" + }, + { + "id": 7556, + "gameVersionTypeID": 3, + "name": "28.0.95", + "slug": "28-0-95" + }, + { + "id": 7557, + "gameVersionTypeID": 3, + "name": "28.0.100", + "slug": "28-0-100" + }, + { + "id": 7558, + "gameVersionTypeID": 3, + "name": "28.0.101", + "slug": "28-0-101" + }, + { + "id": 7559, + "gameVersionTypeID": 3, + "name": "28.0.102", + "slug": "28-0-102" + }, + { + "id": 7560, + "gameVersionTypeID": 3, + "name": "14.23.5.2847", + "slug": "14-23-5-2847" + }, + { + "id": 7563, + "gameVersionTypeID": 3, + "name": "28.0.104", + "slug": "28-0-104" + }, + { + "id": 7564, + "gameVersionTypeID": 3, + "name": "28.0.105", + "slug": "28-0-105" + }, + { + "id": 7565, + "gameVersionTypeID": 3, + "name": "28.0.106", + "slug": "28-0-106" + }, + { + "id": 7566, + "gameVersionTypeID": 3, + "name": "28.0.107", + "slug": "28-0-107" + }, + { + "id": 7567, + "gameVersionTypeID": 3, + "name": "28.1.0", + "slug": "28-1-0" + }, + { + "id": 7568, + "gameVersionTypeID": 3, + "name": "28.1.1", + "slug": "28-1-1" + }, + { + "id": 7570, + "gameVersionTypeID": 3, + "name": "28.1.2", + "slug": "28-1-2" + }, + { + "id": 7571, + "gameVersionTypeID": 3, + "name": "28.1.3", + "slug": "28-1-3" + }, + { + "id": 7572, + "gameVersionTypeID": 3, + "name": "28.1.4", + "slug": "28-1-4" + }, + { + "id": 7573, + "gameVersionTypeID": 3, + "name": "28.1.5", + "slug": "28-1-5" + }, + { + "id": 7576, + "gameVersionTypeID": 3, + "name": "28.1.6", + "slug": "28-1-6" + }, + { + "id": 7577, + "gameVersionTypeID": 3, + "name": "28.1.7", + "slug": "28-1-7" + }, + { + "id": 7578, + "gameVersionTypeID": 3, + "name": "28.1.8", + "slug": "28-1-8" + }, + { + "id": 7579, + "gameVersionTypeID": 3, + "name": "28.1.10", + "slug": "28-1-10" + }, + { + "id": 7580, + "gameVersionTypeID": 3, + "name": "28.1.11", + "slug": "28-1-11" + }, + { + "id": 7581, + "gameVersionTypeID": 3, + "name": "28.1.14", + "slug": "28-1-14" + }, + { + "id": 7582, + "gameVersionTypeID": 3, + "name": "28.1.15", + "slug": "28-1-15" + }, + { + "id": 7583, + "gameVersionTypeID": 3, + "name": "28.1.16", + "slug": "28-1-16" + }, + { + "id": 7584, + "gameVersionTypeID": 3, + "name": "28.1.17", + "slug": "28-1-17" + }, + { + "id": 7586, + "gameVersionTypeID": 3, + "name": "28.1.18", + "slug": "28-1-18" + }, + { + "id": 7587, + "gameVersionTypeID": 3, + "name": "28.1.19", + "slug": "28-1-19" + }, + { + "id": 7588, + "gameVersionTypeID": 3, + "name": "28.1.20", + "slug": "28-1-20" + }, + { + "id": 7589, + "gameVersionTypeID": 3, + "name": "28.1.22", + "slug": "28-1-22" + }, + { + "id": 7590, + "gameVersionTypeID": 3, + "name": "28.1.23", + "slug": "28-1-23" + }, + { + "id": 7591, + "gameVersionTypeID": 3, + "name": "28.1.24", + "slug": "28-1-24" + }, + { + "id": 7592, + "gameVersionTypeID": 3, + "name": "28.1.25", + "slug": "28-1-25" + }, + { + "id": 7593, + "gameVersionTypeID": 3, + "name": "28.1.26", + "slug": "28-1-26" + }, + { + "id": 7594, + "gameVersionTypeID": 3, + "name": "28.1.28", + "slug": "28-1-28" + }, + { + "id": 7595, + "gameVersionTypeID": 3, + "name": "28.1.30", + "slug": "28-1-30" + }, + { + "id": 7596, + "gameVersionTypeID": 3, + "name": "28.1.31", + "slug": "28-1-31" + }, + { + "id": 7597, + "gameVersionTypeID": 3, + "name": "28.1.32", + "slug": "28-1-32" + }, + { + "id": 7598, + "gameVersionTypeID": 3, + "name": "28.1.33", + "slug": "28-1-33" + }, + { + "id": 7599, + "gameVersionTypeID": 3, + "name": "28.1.34", + "slug": "28-1-34" + }, + { + "id": 7600, + "gameVersionTypeID": 3, + "name": "28.1.35", + "slug": "28-1-35" + }, + { + "id": 7601, + "gameVersionTypeID": 3, + "name": "28.1.36", + "slug": "28-1-36" + }, + { + "id": 7602, + "gameVersionTypeID": 3, + "name": "28.1.37", + "slug": "28-1-37" + }, + { + "id": 7603, + "gameVersionTypeID": 3, + "name": "28.1.38", + "slug": "28-1-38" + }, + { + "id": 7604, + "gameVersionTypeID": 3, + "name": "28.1.39", + "slug": "28-1-39" + }, + { + "id": 7605, + "gameVersionTypeID": 3, + "name": "28.1.40", + "slug": "28-1-40" + }, + { + "id": 7606, + "gameVersionTypeID": 3, + "name": "28.1.41", + "slug": "28-1-41" + }, + { + "id": 7607, + "gameVersionTypeID": 3, + "name": "28.1.42", + "slug": "28-1-42" + }, + { + "id": 7608, + "gameVersionTypeID": 3, + "name": "28.1.44", + "slug": "28-1-44" + }, + { + "id": 7609, + "gameVersionTypeID": 3, + "name": "28.1.45", + "slug": "28-1-45" + }, + { + "id": 7610, + "gameVersionTypeID": 3, + "name": "28.1.46", + "slug": "28-1-46" + }, + { + "id": 7611, + "gameVersionTypeID": 3, + "name": "28.1.47", + "slug": "28-1-47" + }, + { + "id": 7613, + "gameVersionTypeID": 3, + "name": "28.1.48", + "slug": "28-1-48" + }, + { + "id": 7614, + "gameVersionTypeID": 3, + "name": "28.1.49", + "slug": "28-1-49" + }, + { + "id": 7615, + "gameVersionTypeID": 3, + "name": "28.1.50", + "slug": "28-1-50" + }, + { + "id": 7616, + "gameVersionTypeID": 3, + "name": "28.1.56", + "slug": "28-1-56" + }, + { + "id": 7617, + "gameVersionTypeID": 3, + "name": "28.1.58", + "slug": "28-1-58" + }, + { + "id": 7618, + "gameVersionTypeID": 3, + "name": "28.1.59", + "slug": "28-1-59" + }, + { + "id": 7619, + "gameVersionTypeID": 3, + "name": "28.1.60", + "slug": "28-1-60" + }, + { + "id": 7620, + "gameVersionTypeID": 3, + "name": "28.1.61", + "slug": "28-1-61" + }, + { + "id": 7622, + "gameVersionTypeID": 3, + "name": "28.1.62", + "slug": "28-1-62" + }, + { + "id": 7623, + "gameVersionTypeID": 3, + "name": "28.1.64", + "slug": "28-1-64" + }, + { + "id": 7625, + "gameVersionTypeID": 3, + "name": "28.1.65", + "slug": "28-1-65" + }, + { + "id": 7626, + "gameVersionTypeID": 3, + "name": "28.1.66", + "slug": "28-1-66" + }, + { + "id": 7627, + "gameVersionTypeID": 3, + "name": "28.1.67", + "slug": "28-1-67" + }, + { + "id": 7628, + "gameVersionTypeID": 3, + "name": "28.1.68", + "slug": "28-1-68" + }, + { + "id": 7629, + "gameVersionTypeID": 3, + "name": "28.1.69", + "slug": "28-1-69" + }, + { + "id": 7630, + "gameVersionTypeID": 3, + "name": "28.1.70", + "slug": "28-1-70" + }, + { + "id": 7632, + "gameVersionTypeID": 3, + "name": "28.1.71", + "slug": "28-1-71" + }, + { + "id": 7633, + "gameVersionTypeID": 3, + "name": "28.1.72", + "slug": "28-1-72" + }, + { + "id": 7634, + "gameVersionTypeID": 3, + "name": "28.1.73", + "slug": "28-1-73" + }, + { + "id": 7635, + "gameVersionTypeID": 3, + "name": "28.1.74", + "slug": "28-1-74" + }, + { + "id": 7636, + "gameVersionTypeID": 3, + "name": "28.1.75", + "slug": "28-1-75" + }, + { + "id": 7637, + "gameVersionTypeID": 3, + "name": "28.1.76", + "slug": "28-1-76" + }, + { + "id": 7638, + "gameVersionTypeID": 3, + "name": "28.1.77", + "slug": "28-1-77" + }, + { + "id": 7639, + "gameVersionTypeID": 3, + "name": "28.1.78", + "slug": "28-1-78" + }, + { + "id": 7640, + "gameVersionTypeID": 3, + "name": "28.1.79", + "slug": "28-1-79" + }, + { + "id": 7641, + "gameVersionTypeID": 3, + "name": "28.1.80", + "slug": "28-1-80" + }, + { + "id": 7642, + "gameVersionTypeID": 3, + "name": "28.1.81", + "slug": "28-1-81" + }, + { + "id": 7643, + "gameVersionTypeID": 3, + "name": "28.1.85", + "slug": "28-1-85" + }, + { + "id": 7644, + "gameVersionTypeID": 3, + "name": "28.1.86", + "slug": "28-1-86" + }, + { + "id": 7645, + "gameVersionTypeID": 3, + "name": "28.1.87", + "slug": "28-1-87" + }, + { + "id": 7646, + "gameVersionTypeID": 3, + "name": "28.1.88", + "slug": "28-1-88" + }, + { + "id": 7647, + "gameVersionTypeID": 3, + "name": "28.1.90", + "slug": "28-1-90" + }, + { + "id": 7650, + "gameVersionTypeID": 3, + "name": "28.1.91", + "slug": "28-1-91" + }, + { + "id": 7651, + "gameVersionTypeID": 3, + "name": "28.1.92", + "slug": "28-1-92" + }, + { + "id": 7652, + "gameVersionTypeID": 3, + "name": "28.1.93", + "slug": "28-1-93" + }, + { + "id": 7653, + "gameVersionTypeID": 3, + "name": "28.1.94", + "slug": "28-1-94" + }, + { + "id": 7654, + "gameVersionTypeID": 3, + "name": "28.1.95", + "slug": "28-1-95" + }, + { + "id": 7655, + "gameVersionTypeID": 3, + "name": "28.1.96", + "slug": "28-1-96" + }, + { + "id": 7656, + "gameVersionTypeID": 3, + "name": "28.1.97", + "slug": "28-1-97" + }, + { + "id": 7657, + "gameVersionTypeID": 3, + "name": "28.1.98", + "slug": "28-1-98" + }, + { + "id": 7658, + "gameVersionTypeID": 3, + "name": "28.1.99", + "slug": "28-1-99" + }, + { + "id": 7659, + "gameVersionTypeID": 3, + "name": "28.1.101", + "slug": "28-1-101" + }, + { + "id": 7660, + "gameVersionTypeID": 3, + "name": "28.1.102", + "slug": "28-1-102" + }, + { + "id": 7661, + "gameVersionTypeID": 3, + "name": "28.1.103", + "slug": "28-1-103" + }, + { + "id": 7662, + "gameVersionTypeID": 3, + "name": "28.1.104", + "slug": "28-1-104" + }, + { + "id": 7664, + "gameVersionTypeID": 68722, + "name": "1.15", + "slug": "1-15" + }, + { + "id": 7665, + "gameVersionTypeID": 3, + "name": "28.1.105", + "slug": "28-1-105" + }, + { + "id": 7666, + "gameVersionTypeID": 3, + "name": "28.1.106", + "slug": "28-1-106" + }, + { + "id": 7667, + "gameVersionTypeID": 1, + "name": "1.15", + "slug": "1-15" + }, + { + "id": 7670, + "gameVersionTypeID": 3, + "name": "28.1.107", + "slug": "28-1-107" + }, + { + "id": 7671, + "gameVersionTypeID": 3, + "name": "29.0.0", + "slug": "29-0-0" + }, + { + "id": 7672, + "gameVersionTypeID": 3, + "name": "29.0.1", + "slug": "29-0-1" + }, + { + "id": 7673, + "gameVersionTypeID": 3, + "name": "29.0.2", + "slug": "29-0-2" + }, + { + "id": 7674, + "gameVersionTypeID": 3, + "name": "29.0.3", + "slug": "29-0-3" + }, + { + "id": 7675, + "gameVersionTypeID": 68722, + "name": "1.15.1", + "slug": "1-15-1" + }, + { + "id": 7676, + "gameVersionTypeID": 3, + "name": "29.0.4", + "slug": "29-0-4" + }, + { + "id": 7677, + "gameVersionTypeID": 3, + "name": "30.0.0", + "slug": "30-0-0" + }, + { + "id": 7678, + "gameVersionTypeID": 3, + "name": "30.0.2", + "slug": "30-0-2" + }, + { + "id": 7679, + "gameVersionTypeID": 3, + "name": "30.0.4", + "slug": "30-0-4" + }, + { + "id": 7680, + "gameVersionTypeID": 3, + "name": "30.0.5", + "slug": "30-0-5" + }, + { + "id": 7681, + "gameVersionTypeID": 3, + "name": "30.0.7", + "slug": "30-0-7" + }, + { + "id": 7682, + "gameVersionTypeID": 3, + "name": "30.0.8", + "slug": "30-0-8" + }, + { + "id": 7683, + "gameVersionTypeID": 3, + "name": "30.0.10", + "slug": "30-0-10" + }, + { + "id": 7684, + "gameVersionTypeID": 3, + "name": "30.0.11", + "slug": "30-0-11" + }, + { + "id": 7686, + "gameVersionTypeID": 3, + "name": "30.0.12", + "slug": "30-0-12" + }, + { + "id": 7687, + "gameVersionTypeID": 3, + "name": "30.0.13", + "slug": "30-0-13" + }, + { + "id": 7688, + "gameVersionTypeID": 3, + "name": "30.0.14", + "slug": "30-0-14" + }, + { + "id": 7689, + "gameVersionTypeID": 3, + "name": "30.0.15", + "slug": "30-0-15" + }, + { + "id": 7690, + "gameVersionTypeID": 3, + "name": "28.1.108", + "slug": "28-1-108" + }, + { + "id": 7691, + "gameVersionTypeID": 3, + "name": "28.1.109", + "slug": "28-1-109" + }, + { + "id": 7692, + "gameVersionTypeID": 3, + "name": "30.0.16", + "slug": "30-0-16" + }, + { + "id": 7693, + "gameVersionTypeID": 3, + "name": "30.0.17", + "slug": "30-0-17" + }, + { + "id": 7694, + "gameVersionTypeID": 3, + "name": "30.0.18", + "slug": "30-0-18" + }, + { + "id": 7695, + "gameVersionTypeID": 3, + "name": "30.0.19", + "slug": "30-0-19" + }, + { + "id": 7696, + "gameVersionTypeID": 3, + "name": "28.1.110", + "slug": "28-1-110" + }, + { + "id": 7697, + "gameVersionTypeID": 3, + "name": "28.1.111", + "slug": "28-1-111" + }, + { + "id": 7698, + "gameVersionTypeID": 3, + "name": "30.0.20", + "slug": "30-0-20" + }, + { + "id": 7699, + "gameVersionTypeID": 3, + "name": "30.0.21", + "slug": "30-0-21" + }, + { + "id": 7700, + "gameVersionTypeID": 3, + "name": "30.0.22", + "slug": "30-0-22" + }, + { + "id": 7701, + "gameVersionTypeID": 3, + "name": "30.0.24", + "slug": "30-0-24" + }, + { + "id": 7702, + "gameVersionTypeID": 3, + "name": "30.0.25", + "slug": "30-0-25" + }, + { + "id": 7703, + "gameVersionTypeID": 3, + "name": "30.0.26", + "slug": "30-0-26" + }, + { + "id": 7704, + "gameVersionTypeID": 3, + "name": "30.0.27", + "slug": "30-0-27" + }, + { + "id": 7705, + "gameVersionTypeID": 3, + "name": "30.0.28", + "slug": "30-0-28" + }, + { + "id": 7706, + "gameVersionTypeID": 3, + "name": "30.0.29", + "slug": "30-0-29" + }, + { + "id": 7707, + "gameVersionTypeID": 3, + "name": "30.0.30", + "slug": "30-0-30" + }, + { + "id": 7708, + "gameVersionTypeID": 3, + "name": "28.1.113", + "slug": "28-1-113" + }, + { + "id": 7709, + "gameVersionTypeID": 3, + "name": "30.0.31", + "slug": "30-0-31" + }, + { + "id": 7710, + "gameVersionTypeID": 3, + "name": "30.0.32", + "slug": "30-0-32" + }, + { + "id": 7711, + "gameVersionTypeID": 3, + "name": "30.0.33", + "slug": "30-0-33" + }, + { + "id": 7712, + "gameVersionTypeID": 3, + "name": "30.0.35", + "slug": "30-0-35" + }, + { + "id": 7713, + "gameVersionTypeID": 3, + "name": "30.0.36", + "slug": "30-0-36" + }, + { + "id": 7714, + "gameVersionTypeID": 3, + "name": "28.1.114", + "slug": "28-1-114" + }, + { + "id": 7715, + "gameVersionTypeID": 3, + "name": "30.0.38", + "slug": "30-0-38" + }, + { + "id": 7716, + "gameVersionTypeID": 3, + "name": "30.0.39", + "slug": "30-0-39" + }, + { + "id": 7718, + "gameVersionTypeID": 3, + "name": "28.1.115", + "slug": "28-1-115" + }, + { + "id": 7719, + "gameVersionTypeID": 3, + "name": "30.0.40", + "slug": "30-0-40" + }, + { + "id": 7720, + "gameVersionTypeID": 3, + "name": "30.0.41", + "slug": "30-0-41" + }, + { + "id": 7721, + "gameVersionTypeID": 3, + "name": "30.0.42", + "slug": "30-0-42" + }, + { + "id": 7722, + "gameVersionTypeID": 68722, + "name": "1.15.2", + "slug": "1-15-2" + }, + { + "id": 7723, + "gameVersionTypeID": 3, + "name": "30.0.43", + "slug": "30-0-43" + }, + { + "id": 7724, + "gameVersionTypeID": 3, + "name": "30.0.48", + "slug": "30-0-48" + }, + { + "id": 7725, + "gameVersionTypeID": 3, + "name": "28.1.116", + "slug": "28-1-116" + }, + { + "id": 7726, + "gameVersionTypeID": 3, + "name": "30.0.49", + "slug": "30-0-49" + }, + { + "id": 7727, + "gameVersionTypeID": 3, + "name": "30.0.50", + "slug": "30-0-50" + }, + { + "id": 7728, + "gameVersionTypeID": 3, + "name": "30.0.51", + "slug": "30-0-51" + }, + { + "id": 7729, + "gameVersionTypeID": 3, + "name": "31.0.0", + "slug": "31-0-0" + }, + { + "id": 7730, + "gameVersionTypeID": 3, + "name": "31.0.1", + "slug": "31-0-1" + }, + { + "id": 7732, + "gameVersionTypeID": 3, + "name": "28.1.117", + "slug": "28-1-117" + }, + { + "id": 7733, + "gameVersionTypeID": 3, + "name": "31.0.2", + "slug": "31-0-2" + }, + { + "id": 7734, + "gameVersionTypeID": 3, + "name": "31.0.4", + "slug": "31-0-4" + }, + { + "id": 7735, + "gameVersionTypeID": 3, + "name": "31.0.7", + "slug": "31-0-7" + }, + { + "id": 7736, + "gameVersionTypeID": 3, + "name": "31.0.8", + "slug": "31-0-8" + }, + { + "id": 7737, + "gameVersionTypeID": 3, + "name": "31.0.9", + "slug": "31-0-9" + }, + { + "id": 7738, + "gameVersionTypeID": 3, + "name": "31.0.11", + "slug": "31-0-11" + }, + { + "id": 7739, + "gameVersionTypeID": 3, + "name": "31.0.12", + "slug": "31-0-12" + }, + { + "id": 7740, + "gameVersionTypeID": 3, + "name": "31.0.13", + "slug": "31-0-13" + }, + { + "id": 7741, + "gameVersionTypeID": 3, + "name": "31.0.14", + "slug": "31-0-14" + }, + { + "id": 7743, + "gameVersionTypeID": 3, + "name": "31.0.15", + "slug": "31-0-15" + }, + { + "id": 7744, + "gameVersionTypeID": 3, + "name": "31.0.16", + "slug": "31-0-16" + }, + { + "id": 7745, + "gameVersionTypeID": 3, + "name": "31.0.17", + "slug": "31-0-17" + }, + { + "id": 7746, + "gameVersionTypeID": 3, + "name": "28.1.118", + "slug": "28-1-118" + }, + { + "id": 7747, + "gameVersionTypeID": 3, + "name": "31.0.19", + "slug": "31-0-19" + }, + { + "id": 7748, + "gameVersionTypeID": 3, + "name": "31.1.0", + "slug": "31-1-0" + }, + { + "id": 7749, + "gameVersionTypeID": 3, + "name": "28.2.0", + "slug": "28-2-0" + }, + { + "id": 7751, + "gameVersionTypeID": 70886, + "name": "1.16-Snapshot", + "slug": "1-15-snapshot" + }, + { + "id": 7752, + "gameVersionTypeID": 3, + "name": "31.1.1", + "slug": "31-1-1" + }, + { + "id": 7754, + "gameVersionTypeID": 3, + "name": "31.1.2", + "slug": "31-1-2" + }, + { + "id": 7755, + "gameVersionTypeID": 3, + "name": "31.1.3", + "slug": "31-1-3" + }, + { + "id": 7756, + "gameVersionTypeID": 3, + "name": "31.1.5", + "slug": "31-1-5" + }, + { + "id": 7757, + "gameVersionTypeID": 3, + "name": "31.1.8", + "slug": "31-1-8" + }, + { + "id": 7758, + "gameVersionTypeID": 3, + "name": "31.1.9", + "slug": "31-1-9" + }, + { + "id": 7759, + "gameVersionTypeID": 3, + "name": "31.1.10", + "slug": "31-1-10" + }, + { + "id": 7760, + "gameVersionTypeID": 3, + "name": "28.2.1", + "slug": "28-2-1" + }, + { + "id": 7761, + "gameVersionTypeID": 3, + "name": "31.1.11", + "slug": "31-1-11" + }, + { + "id": 7762, + "gameVersionTypeID": 3, + "name": "31.1.12", + "slug": "31-1-12" + }, + { + "id": 7763, + "gameVersionTypeID": 3, + "name": "31.1.13", + "slug": "31-1-13" + }, + { + "id": 7764, + "gameVersionTypeID": 3, + "name": "31.1.14", + "slug": "31-1-14" + }, + { + "id": 7765, + "gameVersionTypeID": 3, + "name": "31.1.15", + "slug": "31-1-15" + }, + { + "id": 7766, + "gameVersionTypeID": 3, + "name": "31.1.16", + "slug": "31-1-16" + }, + { + "id": 7767, + "gameVersionTypeID": 3, + "name": "31.1.17", + "slug": "31-1-17" + }, + { + "id": 7768, + "gameVersionTypeID": 3, + "name": "31.1.18", + "slug": "31-1-18" + }, + { + "id": 7769, + "gameVersionTypeID": 3, + "name": "28.2.2", + "slug": "28-2-2" + }, + { + "id": 7770, + "gameVersionTypeID": 3, + "name": "28.2.3", + "slug": "28-2-3" + }, + { + "id": 7775, + "gameVersionTypeID": 3, + "name": "31.1.19", + "slug": "31-1-19" + }, + { + "id": 7776, + "gameVersionTypeID": 3, + "name": "31.1.20", + "slug": "31-1-20" + }, + { + "id": 7777, + "gameVersionTypeID": 3, + "name": "31.1.21", + "slug": "31-1-21" + }, + { + "id": 7778, + "gameVersionTypeID": 3, + "name": "31.1.22", + "slug": "31-1-22" + }, + { + "id": 7779, + "gameVersionTypeID": 3, + "name": "31.1.23", + "slug": "31-1-23" + }, + { + "id": 7780, + "gameVersionTypeID": 3, + "name": "31.1.24", + "slug": "31-1-24" + }, + { + "id": 7781, + "gameVersionTypeID": 3, + "name": "31.1.25", + "slug": "31-1-25" + }, + { + "id": 7782, + "gameVersionTypeID": 3, + "name": "31.1.26", + "slug": "31-1-26" + }, + { + "id": 7783, + "gameVersionTypeID": 3, + "name": "31.1.27", + "slug": "31-1-27" + }, + { + "id": 7791, + "gameVersionTypeID": 3, + "name": "31.1.28", + "slug": "31-1-28" + }, + { + "id": 7792, + "gameVersionTypeID": 3, + "name": "31.1.29", + "slug": "31-1-29" + }, + { + "id": 7793, + "gameVersionTypeID": 3, + "name": "31.1.30", + "slug": "31-1-30" + }, + { + "id": 7794, + "gameVersionTypeID": 3, + "name": "31.1.32", + "slug": "31-1-32" + }, + { + "id": 7795, + "gameVersionTypeID": 3, + "name": "31.1.34", + "slug": "31-1-34" + }, + { + "id": 7796, + "gameVersionTypeID": 3, + "name": "31.1.35", + "slug": "31-1-35" + }, + { + "id": 7797, + "gameVersionTypeID": 3, + "name": "31.1.36", + "slug": "31-1-36" + }, + { + "id": 7799, + "gameVersionTypeID": 3, + "name": "14.23.5.2852", + "slug": "14-23-5-2852" + }, + { + "id": 7800, + "gameVersionTypeID": 3, + "name": "31.1.37", + "slug": "31-1-37" + }, + { + "id": 7801, + "gameVersionTypeID": 3, + "name": "31.1.39", + "slug": "31-1-39" + }, + { + "id": 7802, + "gameVersionTypeID": 3, + "name": "31.1.40", + "slug": "31-1-40" + }, + { + "id": 7803, + "gameVersionTypeID": 3, + "name": "31.1.41", + "slug": "31-1-41" + }, + { + "id": 7804, + "gameVersionTypeID": 3, + "name": "31.1.42", + "slug": "31-1-42" + }, + { + "id": 7805, + "gameVersionTypeID": 3, + "name": "31.1.43", + "slug": "31-1-43" + }, + { + "id": 7806, + "gameVersionTypeID": 3, + "name": "14.23.5.2854", + "slug": "14-23-5-2854" + }, + { + "id": 7807, + "gameVersionTypeID": 3, + "name": "31.1.44", + "slug": "31-1-44" + }, + { + "id": 7808, + "gameVersionTypeID": 3, + "name": "28.2.4", + "slug": "28-2-4" + }, + { + "id": 7810, + "gameVersionTypeID": 3, + "name": "31.1.45", + "slug": "31-1-45" + }, + { + "id": 7811, + "gameVersionTypeID": 3, + "name": "31.1.46", + "slug": "31-1-46" + }, + { + "id": 7812, + "gameVersionTypeID": 3, + "name": "31.1.47", + "slug": "31-1-47" + }, + { + "id": 7813, + "gameVersionTypeID": 3, + "name": "28.2.5", + "slug": "28-2-5" + }, + { + "id": 7814, + "gameVersionTypeID": 3, + "name": "31.1.48", + "slug": "31-1-48" + }, + { + "id": 7815, + "gameVersionTypeID": 3, + "name": "31.1.49", + "slug": "31-1-49" + }, + { + "id": 7816, + "gameVersionTypeID": 3, + "name": "31.1.50", + "slug": "31-1-50" + }, + { + "id": 7817, + "gameVersionTypeID": 3, + "name": "31.1.51", + "slug": "31-1-51" + }, + { + "id": 7818, + "gameVersionTypeID": 3, + "name": "31.1.55", + "slug": "31-1-55" + }, + { + "id": 7819, + "gameVersionTypeID": 3, + "name": "31.1.57", + "slug": "31-1-57" + }, + { + "id": 7820, + "gameVersionTypeID": 3, + "name": "31.1.59", + "slug": "31-1-59" + }, + { + "id": 7821, + "gameVersionTypeID": 3, + "name": "31.1.60", + "slug": "31-1-60" + }, + { + "id": 7823, + "gameVersionTypeID": 3, + "name": "31.1.61", + "slug": "31-1-61" + }, + { + "id": 7824, + "gameVersionTypeID": 3, + "name": "31.1.62", + "slug": "31-1-62" + }, + { + "id": 7825, + "gameVersionTypeID": 3, + "name": "31.1.63", + "slug": "31-1-63" + }, + { + "id": 7826, + "gameVersionTypeID": 3, + "name": "28.2.6", + "slug": "28-2-6" + }, + { + "id": 7827, + "gameVersionTypeID": 3, + "name": "31.1.64", + "slug": "31-1-64" + }, + { + "id": 7828, + "gameVersionTypeID": 3, + "name": "28.2.10", + "slug": "28-2-10" + }, + { + "id": 7829, + "gameVersionTypeID": 3, + "name": "31.1.65", + "slug": "31-1-65" + }, + { + "id": 7830, + "gameVersionTypeID": 3, + "name": "31.1.66", + "slug": "31-1-66" + }, + { + "id": 7831, + "gameVersionTypeID": 3, + "name": "31.1.67", + "slug": "31-1-67" + }, + { + "id": 7832, + "gameVersionTypeID": 3, + "name": "31.1.70", + "slug": "31-1-70" + }, + { + "id": 7833, + "gameVersionTypeID": 3, + "name": "31.1.71", + "slug": "31-1-71" + }, + { + "id": 7834, + "gameVersionTypeID": 3, + "name": "31.1.72", + "slug": "31-1-72" + }, + { + "id": 7835, + "gameVersionTypeID": 3, + "name": "31.1.73", + "slug": "31-1-73" + }, + { + "id": 7836, + "gameVersionTypeID": 3, + "name": "31.1.74", + "slug": "31-1-74" + }, + { + "id": 7838, + "gameVersionTypeID": 3, + "name": "31.1.75", + "slug": "31-1-75" + }, + { + "id": 7839, + "gameVersionTypeID": 3, + "name": "28.2.11", + "slug": "28-2-11" + }, + { + "id": 7840, + "gameVersionTypeID": 3, + "name": "31.1.76", + "slug": "31-1-76" + }, + { + "id": 7841, + "gameVersionTypeID": 3, + "name": "31.1.77", + "slug": "31-1-77" + }, + { + "id": 7842, + "gameVersionTypeID": 3, + "name": "31.1.78", + "slug": "31-1-78" + }, + { + "id": 7844, + "gameVersionTypeID": 3, + "name": "31.1.79", + "slug": "31-1-79" + }, + { + "id": 7845, + "gameVersionTypeID": 3, + "name": "31.1.80", + "slug": "31-1-80" + }, + { + "id": 7846, + "gameVersionTypeID": 3, + "name": "31.1.81", + "slug": "31-1-81" + }, + { + "id": 7847, + "gameVersionTypeID": 3, + "name": "31.1.84", + "slug": "31-1-84" + }, + { + "id": 7848, + "gameVersionTypeID": 3, + "name": "28.2.12", + "slug": "28-2-12" + }, + { + "id": 7849, + "gameVersionTypeID": 3, + "name": "31.1.85", + "slug": "31-1-85" + }, + { + "id": 7850, + "gameVersionTypeID": 3, + "name": "28.2.13", + "slug": "28-2-13" + }, + { + "id": 7851, + "gameVersionTypeID": 3, + "name": "28.2.14", + "slug": "28-2-14" + }, + { + "id": 7852, + "gameVersionTypeID": 3, + "name": "31.1.86", + "slug": "31-1-86" + }, + { + "id": 7853, + "gameVersionTypeID": 3, + "name": "31.1.87", + "slug": "31-1-87" + }, + { + "id": 7855, + "gameVersionTypeID": 3, + "name": "28.2.15", + "slug": "28-2-15" + }, + { + "id": 7856, + "gameVersionTypeID": 3, + "name": "28.2.16", + "slug": "28-2-16" + }, + { + "id": 7857, + "gameVersionTypeID": 3, + "name": "31.1.88", + "slug": "31-1-88" + }, + { + "id": 7858, + "gameVersionTypeID": 3, + "name": "31.1.89", + "slug": "31-1-89" + }, + { + "id": 7859, + "gameVersionTypeID": 3, + "name": "31.1.91", + "slug": "31-1-91" + }, + { + "id": 7860, + "gameVersionTypeID": 3, + "name": "31.1.92", + "slug": "31-1-92" + }, + { + "id": 7861, + "gameVersionTypeID": 3, + "name": "31.1.93", + "slug": "31-1-93" + }, + { + "id": 7862, + "gameVersionTypeID": 3, + "name": "31.1.95", + "slug": "31-1-95" + }, + { + "id": 7863, + "gameVersionTypeID": 3, + "name": "31.1.97", + "slug": "31-1-97" + }, + { + "id": 7864, + "gameVersionTypeID": 3, + "name": "31.1.98", + "slug": "31-1-98" + }, + { + "id": 7865, + "gameVersionTypeID": 3, + "name": "31.1.99", + "slug": "31-1-99" + }, + { + "id": 7866, + "gameVersionTypeID": 3, + "name": "31.2.0", + "slug": "31-2-0" + }, + { + "id": 7867, + "gameVersionTypeID": 3, + "name": "31.2.1", + "slug": "31-2-1" + }, + { + "id": 7868, + "gameVersionTypeID": 3, + "name": "31.2.2", + "slug": "31-2-2" + }, + { + "id": 7869, + "gameVersionTypeID": 3, + "name": "31.2.3", + "slug": "31-2-3" + }, + { + "id": 7870, + "gameVersionTypeID": 3, + "name": "31.2.4", + "slug": "31-2-4" + }, + { + "id": 7871, + "gameVersionTypeID": 3, + "name": "31.2.5", + "slug": "31-2-5" + }, + { + "id": 7872, + "gameVersionTypeID": 3, + "name": "28.2.17", + "slug": "28-2-17" + }, + { + "id": 7873, + "gameVersionTypeID": 3, + "name": "28.2.18", + "slug": "28-2-18" + }, + { + "id": 7874, + "gameVersionTypeID": 3, + "name": "31.2.7", + "slug": "31-2-7" + }, + { + "id": 7875, + "gameVersionTypeID": 3, + "name": "31.2.8", + "slug": "31-2-8" + }, + { + "id": 7876, + "gameVersionTypeID": 3, + "name": "31.2.9", + "slug": "31-2-9" + }, + { + "id": 7877, + "gameVersionTypeID": 3, + "name": "31.2.10", + "slug": "31-2-10" + }, + { + "id": 7878, + "gameVersionTypeID": 3, + "name": "31.2.12", + "slug": "31-2-12" + }, + { + "id": 7879, + "gameVersionTypeID": 3, + "name": "31.2.13", + "slug": "31-2-13" + }, + { + "id": 7880, + "gameVersionTypeID": 3, + "name": "31.2.15", + "slug": "31-2-15" + }, + { + "id": 7881, + "gameVersionTypeID": 3, + "name": "31.2.16", + "slug": "31-2-16" + }, + { + "id": 7882, + "gameVersionTypeID": 3, + "name": "31.2.17", + "slug": "31-2-17" + }, + { + "id": 7883, + "gameVersionTypeID": 3, + "name": "31.2.18", + "slug": "31-2-18" + }, + { + "id": 7884, + "gameVersionTypeID": 3, + "name": "31.2.19", + "slug": "31-2-19" + }, + { + "id": 7885, + "gameVersionTypeID": 3, + "name": "31.2.20", + "slug": "31-2-20" + }, + { + "id": 7887, + "gameVersionTypeID": 3, + "name": "31.2.21", + "slug": "31-2-21" + }, + { + "id": 7888, + "gameVersionTypeID": 3, + "name": "28.2.19", + "slug": "28-2-19" + }, + { + "id": 7889, + "gameVersionTypeID": 3, + "name": "31.2.22", + "slug": "31-2-22" + }, + { + "id": 7890, + "gameVersionTypeID": 70886, + "name": "1.16", + "slug": "1-16" + }, + { + "id": 7891, + "gameVersionTypeID": 3, + "name": "31.2.23", + "slug": "31-2-23" + }, + { + "id": 7892, + "gameVersionTypeID": 70886, + "name": "1.16.1", + "slug": "1-16-1" + }, + { + "id": 7893, + "gameVersionTypeID": 3, + "name": "31.2.24", + "slug": "31-2-24" + }, + { + "id": 7894, + "gameVersionTypeID": 3, + "name": "31.2.25", + "slug": "31-2-25" + }, + { + "id": 7895, + "gameVersionTypeID": 3, + "name": "31.2.26", + "slug": "31-2-26" + }, + { + "id": 7896, + "gameVersionTypeID": 3, + "name": "28.2.20", + "slug": "28-2-20" + }, + { + "id": 7897, + "gameVersionTypeID": 3, + "name": "28.2.21", + "slug": "28-2-21" + }, + { + "id": 7898, + "gameVersionTypeID": 3, + "name": "31.2.27", + "slug": "31-2-27" + }, + { + "id": 7899, + "gameVersionTypeID": 3, + "name": "32.0.0", + "slug": "32-0-0" + }, + { + "id": 7900, + "gameVersionTypeID": 3, + "name": "32.0.1", + "slug": "32-0-1" + }, + { + "id": 7901, + "gameVersionTypeID": 3, + "name": "32.0.2", + "slug": "32-0-2" + }, + { + "id": 7902, + "gameVersionTypeID": 3, + "name": "32.0.6", + "slug": "32-0-6" + }, + { + "id": 7903, + "gameVersionTypeID": 3, + "name": "32.0.7", + "slug": "32-0-7" + }, + { + "id": 7904, + "gameVersionTypeID": 3, + "name": "32.0.8", + "slug": "32-0-8" + }, + { + "id": 7905, + "gameVersionTypeID": 3, + "name": "32.0.9", + "slug": "32-0-9" + }, + { + "id": 7906, + "gameVersionTypeID": 3, + "name": "32.0.10", + "slug": "32-0-10" + }, + { + "id": 7907, + "gameVersionTypeID": 3, + "name": "32.0.12", + "slug": "32-0-12" + }, + { + "id": 7908, + "gameVersionTypeID": 3, + "name": "32.0.13", + "slug": "32-0-13" + }, + { + "id": 7909, + "gameVersionTypeID": 3, + "name": "32.0.14", + "slug": "32-0-14" + }, + { + "id": 7910, + "gameVersionTypeID": 3, + "name": "32.0.15", + "slug": "32-0-15" + }, + { + "id": 7911, + "gameVersionTypeID": 3, + "name": "32.0.16", + "slug": "32-0-16" + }, + { + "id": 7912, + "gameVersionTypeID": 3, + "name": "32.0.17", + "slug": "32-0-17" + }, + { + "id": 7913, + "gameVersionTypeID": 3, + "name": "32.0.18", + "slug": "32-0-18" + }, + { + "id": 7914, + "gameVersionTypeID": 3, + "name": "32.0.19", + "slug": "32-0-19" + }, + { + "id": 7915, + "gameVersionTypeID": 1, + "name": "1.16", + "slug": "1-16" + }, + { + "id": 7916, + "gameVersionTypeID": 3, + "name": "32.0.20", + "slug": "32-0-20" + }, + { + "id": 7917, + "gameVersionTypeID": 3, + "name": "32.0.21", + "slug": "32-0-21" + }, + { + "id": 7918, + "gameVersionTypeID": 3, + "name": "32.0.23", + "slug": "32-0-23" + }, + { + "id": 7919, + "gameVersionTypeID": 3, + "name": "32.0.24", + "slug": "32-0-24" + }, + { + "id": 7920, + "gameVersionTypeID": 3, + "name": "32.0.25", + "slug": "32-0-25" + }, + { + "id": 7921, + "gameVersionTypeID": 3, + "name": "32.0.26", + "slug": "32-0-26" + }, + { + "id": 7922, + "gameVersionTypeID": 3, + "name": "31.2.28", + "slug": "31-2-28" + }, + { + "id": 7923, + "gameVersionTypeID": 3, + "name": "32.0.27", + "slug": "32-0-27" + }, + { + "id": 7924, + "gameVersionTypeID": 3, + "name": "32.0.28", + "slug": "32-0-28" + }, + { + "id": 7925, + "gameVersionTypeID": 3, + "name": "32.0.29", + "slug": "32-0-29" + }, + { + "id": 7926, + "gameVersionTypeID": 3, + "name": "32.0.30", + "slug": "32-0-30" + }, + { + "id": 7927, + "gameVersionTypeID": 3, + "name": "32.0.31", + "slug": "32-0-31" + }, + { + "id": 7928, + "gameVersionTypeID": 3, + "name": "32.0.32", + "slug": "32-0-32" + }, + { + "id": 7929, + "gameVersionTypeID": 3, + "name": "32.0.33", + "slug": "32-0-33" + }, + { + "id": 7930, + "gameVersionTypeID": 3, + "name": "32.0.34", + "slug": "32-0-34" + }, + { + "id": 7931, + "gameVersionTypeID": 3, + "name": "31.2.29", + "slug": "31-2-29" + }, + { + "id": 7932, + "gameVersionTypeID": 3, + "name": "32.0.35", + "slug": "32-0-35" + }, + { + "id": 7933, + "gameVersionTypeID": 3, + "name": "32.0.36", + "slug": "32-0-36" + }, + { + "id": 7934, + "gameVersionTypeID": 3, + "name": "32.0.38", + "slug": "32-0-38" + }, + { + "id": 7935, + "gameVersionTypeID": 3, + "name": "28.2.23", + "slug": "28-2-23" + }, + { + "id": 7936, + "gameVersionTypeID": 3, + "name": "32.0.39", + "slug": "32-0-39" + }, + { + "id": 7937, + "gameVersionTypeID": 3, + "name": "32.0.40", + "slug": "32-0-40" + }, + { + "id": 7938, + "gameVersionTypeID": 3, + "name": "31.2.30", + "slug": "31-2-30" + }, + { + "id": 7939, + "gameVersionTypeID": 3, + "name": "32.0.41", + "slug": "32-0-41" + }, + { + "id": 7940, + "gameVersionTypeID": 3, + "name": "32.0.43", + "slug": "32-0-43" + }, + { + "id": 7941, + "gameVersionTypeID": 3, + "name": "32.0.44", + "slug": "32-0-44" + }, + { + "id": 7942, + "gameVersionTypeID": 3, + "name": "32.0.46", + "slug": "32-0-46" + }, + { + "id": 7943, + "gameVersionTypeID": 3, + "name": "32.0.47", + "slug": "32-0-47" + }, + { + "id": 7945, + "gameVersionTypeID": 3, + "name": "32.0.48", + "slug": "32-0-48" + }, + { + "id": 7946, + "gameVersionTypeID": 3, + "name": "32.0.49", + "slug": "32-0-49" + }, + { + "id": 7947, + "gameVersionTypeID": 3, + "name": "32.0.50", + "slug": "32-0-50" + }, + { + "id": 7948, + "gameVersionTypeID": 3, + "name": "32.0.51", + "slug": "32-0-51" + }, + { + "id": 7949, + "gameVersionTypeID": 3, + "name": "32.0.52", + "slug": "32-0-52" + }, + { + "id": 7950, + "gameVersionTypeID": 3, + "name": "32.0.53", + "slug": "32-0-53" + }, + { + "id": 7951, + "gameVersionTypeID": 3, + "name": "32.0.54", + "slug": "32-0-54" + }, + { + "id": 7952, + "gameVersionTypeID": 3, + "name": "31.2.31", + "slug": "31-2-31" + }, + { + "id": 7953, + "gameVersionTypeID": 3, + "name": "32.0.55", + "slug": "32-0-55" + }, + { + "id": 7954, + "gameVersionTypeID": 3, + "name": "32.0.56", + "slug": "32-0-56" + }, + { + "id": 7955, + "gameVersionTypeID": 3, + "name": "32.0.57", + "slug": "32-0-57" + }, + { + "id": 7958, + "gameVersionTypeID": 3, + "name": "32.0.59", + "slug": "32-0-59" + }, + { + "id": 7960, + "gameVersionTypeID": 3, + "name": "32.0.60", + "slug": "32-0-60" + }, + { + "id": 7961, + "gameVersionTypeID": 3, + "name": "32.0.61", + "slug": "32-0-61" + }, + { + "id": 7962, + "gameVersionTypeID": 3, + "name": "32.0.62", + "slug": "32-0-62" + }, + { + "id": 7963, + "gameVersionTypeID": 3, + "name": "32.0.63", + "slug": "32-0-63" + }, + { + "id": 7964, + "gameVersionTypeID": 3, + "name": "32.0.64", + "slug": "32-0-64" + }, + { + "id": 7965, + "gameVersionTypeID": 3, + "name": "32.0.65", + "slug": "32-0-65" + }, + { + "id": 7966, + "gameVersionTypeID": 3, + "name": "32.0.66", + "slug": "32-0-66" + }, + { + "id": 7967, + "gameVersionTypeID": 3, + "name": "32.0.67", + "slug": "32-0-67" + }, + { + "id": 7968, + "gameVersionTypeID": 3, + "name": "32.0.68", + "slug": "32-0-68" + }, + { + "id": 7969, + "gameVersionTypeID": 3, + "name": "32.0.69", + "slug": "32-0-69" + }, + { + "id": 7970, + "gameVersionTypeID": 3, + "name": "32.0.70", + "slug": "32-0-70" + }, + { + "id": 7972, + "gameVersionTypeID": 3, + "name": "32.0.71", + "slug": "32-0-71" + }, + { + "id": 7973, + "gameVersionTypeID": 3, + "name": "32.0.72", + "slug": "32-0-72" + }, + { + "id": 7974, + "gameVersionTypeID": 3, + "name": "32.0.73", + "slug": "32-0-73" + }, + { + "id": 7975, + "gameVersionTypeID": 3, + "name": "32.0.74", + "slug": "32-0-74" + }, + { + "id": 7976, + "gameVersionTypeID": 3, + "name": "32.0.75", + "slug": "32-0-75" + }, + { + "id": 7977, + "gameVersionTypeID": 3, + "name": "32.0.76", + "slug": "32-0-76" + }, + { + "id": 7978, + "gameVersionTypeID": 3, + "name": "32.0.77", + "slug": "32-0-77" + }, + { + "id": 7979, + "gameVersionTypeID": 3, + "name": "32.0.79", + "slug": "32-0-79" + }, + { + "id": 7980, + "gameVersionTypeID": 3, + "name": "32.0.80", + "slug": "32-0-80" + }, + { + "id": 7981, + "gameVersionTypeID": 3, + "name": "32.0.81", + "slug": "32-0-81" + }, + { + "id": 7982, + "gameVersionTypeID": 3, + "name": "32.0.82", + "slug": "32-0-82" + }, + { + "id": 7983, + "gameVersionTypeID": 3, + "name": "32.0.83", + "slug": "32-0-83" + }, + { + "id": 7984, + "gameVersionTypeID": 3, + "name": "32.0.84", + "slug": "32-0-84" + }, + { + "id": 7985, + "gameVersionTypeID": 3, + "name": "32.0.85", + "slug": "32-0-85" + }, + { + "id": 7986, + "gameVersionTypeID": 3, + "name": "32.0.86", + "slug": "32-0-86" + }, + { + "id": 7987, + "gameVersionTypeID": 3, + "name": "31.2.33", + "slug": "31-2-33" + }, + { + "id": 7988, + "gameVersionTypeID": 3, + "name": "32.0.88", + "slug": "32-0-88" + }, + { + "id": 7989, + "gameVersionTypeID": 3, + "name": "32.0.90", + "slug": "32-0-90" + }, + { + "id": 7990, + "gameVersionTypeID": 3, + "name": "32.0.91", + "slug": "32-0-91" + }, + { + "id": 7991, + "gameVersionTypeID": 3, + "name": "32.0.92", + "slug": "32-0-92" + }, + { + "id": 7992, + "gameVersionTypeID": 3, + "name": "32.0.93", + "slug": "32-0-93" + }, + { + "id": 7993, + "gameVersionTypeID": 3, + "name": "32.0.95", + "slug": "32-0-95" + }, + { + "id": 7994, + "gameVersionTypeID": 3, + "name": "32.0.96", + "slug": "32-0-96" + }, + { + "id": 7995, + "gameVersionTypeID": 3, + "name": "32.0.97", + "slug": "32-0-97" + }, + { + "id": 7996, + "gameVersionTypeID": 615, + "name": "1.15", + "slug": "1-15" + }, + { + "id": 7997, + "gameVersionTypeID": 615, + "name": "1.16", + "slug": "1-16" + }, + { + "id": 7998, + "gameVersionTypeID": 3, + "name": "32.0.98", + "slug": "32-0-98" + }, + { + "id": 8000, + "gameVersionTypeID": 3, + "name": "32.0.99", + "slug": "32-0-99" + }, + { + "id": 8001, + "gameVersionTypeID": 3, + "name": "32.0.101", + "slug": "32-0-101" + }, + { + "id": 8002, + "gameVersionTypeID": 3, + "name": "31.2.35", + "slug": "31-2-35" + }, + { + "id": 8003, + "gameVersionTypeID": 3, + "name": "32.0.104", + "slug": "32-0-104" + }, + { + "id": 8004, + "gameVersionTypeID": 3, + "name": "32.0.105", + "slug": "32-0-105" + }, + { + "id": 8005, + "gameVersionTypeID": 3, + "name": "31.2.36", + "slug": "31-2-36" + }, + { + "id": 8006, + "gameVersionTypeID": 3, + "name": "32.0.106", + "slug": "32-0-106" + }, + { + "id": 8007, + "gameVersionTypeID": 3, + "name": "32.0.107", + "slug": "32-0-107" + }, + { + "id": 8008, + "gameVersionTypeID": 3, + "name": "32.0.108", + "slug": "32-0-108" + }, + { + "id": 8010, + "gameVersionTypeID": 70886, + "name": "1.16.2", + "slug": "1-16-2" + }, + { + "id": 8011, + "gameVersionTypeID": 3, + "name": "33.0.0", + "slug": "33-0-0" + }, + { + "id": 8012, + "gameVersionTypeID": 3, + "name": "33.0.2", + "slug": "33-0-2" + }, + { + "id": 8013, + "gameVersionTypeID": 3, + "name": "33.0.3", + "slug": "33-0-3" + }, + { + "id": 8014, + "gameVersionTypeID": 3, + "name": "33.0.5", + "slug": "33-0-5" + }, + { + "id": 8015, + "gameVersionTypeID": 3, + "name": "33.0.6", + "slug": "33-0-6" + }, + { + "id": 8016, + "gameVersionTypeID": 3, + "name": "33.0.7", + "slug": "33-0-7" + }, + { + "id": 8017, + "gameVersionTypeID": 3, + "name": "33.0.8", + "slug": "33-0-8" + }, + { + "id": 8018, + "gameVersionTypeID": 3, + "name": "33.0.9", + "slug": "33-0-9" + }, + { + "id": 8019, + "gameVersionTypeID": 3, + "name": "33.0.10", + "slug": "33-0-10" + }, + { + "id": 8020, + "gameVersionTypeID": 3, + "name": "33.0.11", + "slug": "33-0-11" + }, + { + "id": 8021, + "gameVersionTypeID": 3, + "name": "33.0.12", + "slug": "33-0-12" + }, + { + "id": 8022, + "gameVersionTypeID": 3, + "name": "33.0.13", + "slug": "33-0-13" + }, + { + "id": 8023, + "gameVersionTypeID": 3, + "name": "33.0.14", + "slug": "33-0-14" + }, + { + "id": 8024, + "gameVersionTypeID": 3, + "name": "33.0.15", + "slug": "33-0-15" + }, + { + "id": 8025, + "gameVersionTypeID": 3, + "name": "33.0.16", + "slug": "33-0-16" + }, + { + "id": 8026, + "gameVersionTypeID": 3, + "name": "33.0.17", + "slug": "33-0-17" + }, + { + "id": 8027, + "gameVersionTypeID": 3, + "name": "33.0.18", + "slug": "33-0-18" + }, + { + "id": 8028, + "gameVersionTypeID": 3, + "name": "33.0.19", + "slug": "33-0-19" + }, + { + "id": 8029, + "gameVersionTypeID": 3, + "name": "33.0.20", + "slug": "33-0-20" + }, + { + "id": 8030, + "gameVersionTypeID": 3, + "name": "33.0.21", + "slug": "33-0-21" + }, + { + "id": 8031, + "gameVersionTypeID": 3, + "name": "33.0.22", + "slug": "33-0-22" + }, + { + "id": 8032, + "gameVersionTypeID": 3, + "name": "33.0.23", + "slug": "33-0-23" + }, + { + "id": 8033, + "gameVersionTypeID": 3, + "name": "33.0.30", + "slug": "33-0-30" + }, + { + "id": 8034, + "gameVersionTypeID": 3, + "name": "33.0.31", + "slug": "33-0-31" + }, + { + "id": 8035, + "gameVersionTypeID": 3, + "name": "33.0.32", + "slug": "33-0-32" + }, + { + "id": 8036, + "gameVersionTypeID": 3, + "name": "33.0.34", + "slug": "33-0-34" + }, + { + "id": 8037, + "gameVersionTypeID": 3, + "name": "33.0.35", + "slug": "33-0-35" + }, + { + "id": 8038, + "gameVersionTypeID": 3, + "name": "33.0.36", + "slug": "33-0-36" + }, + { + "id": 8039, + "gameVersionTypeID": 3, + "name": "33.0.37", + "slug": "33-0-37" + }, + { + "id": 8040, + "gameVersionTypeID": 3, + "name": "33.0.40", + "slug": "33-0-40" + }, + { + "id": 8041, + "gameVersionTypeID": 3, + "name": "33.0.41", + "slug": "33-0-41" + }, + { + "id": 8042, + "gameVersionTypeID": 3, + "name": "33.0.42", + "slug": "33-0-42" + }, + { + "id": 8043, + "gameVersionTypeID": 3, + "name": "33.0.43", + "slug": "33-0-43" + }, + { + "id": 8044, + "gameVersionTypeID": 3, + "name": "31.2.37", + "slug": "31-2-37" + }, + { + "id": 8045, + "gameVersionTypeID": 3, + "name": "33.0.44", + "slug": "33-0-44" + }, + { + "id": 8046, + "gameVersionTypeID": 3, + "name": "33.0.45", + "slug": "33-0-45" + }, + { + "id": 8047, + "gameVersionTypeID": 3, + "name": "33.0.46", + "slug": "33-0-46" + }, + { + "id": 8048, + "gameVersionTypeID": 3, + "name": "33.0.49", + "slug": "33-0-49" + }, + { + "id": 8049, + "gameVersionTypeID": 3, + "name": "33.0.50", + "slug": "33-0-50" + }, + { + "id": 8050, + "gameVersionTypeID": 3, + "name": "33.0.54", + "slug": "33-0-54" + }, + { + "id": 8051, + "gameVersionTypeID": 3, + "name": "33.0.55", + "slug": "33-0-55" + }, + { + "id": 8052, + "gameVersionTypeID": 3, + "name": "33.0.56", + "slug": "33-0-56" + }, + { + "id": 8053, + "gameVersionTypeID": 3, + "name": "33.0.57", + "slug": "33-0-57" + }, + { + "id": 8054, + "gameVersionTypeID": 3, + "name": "33.0.58", + "slug": "33-0-58" + }, + { + "id": 8055, + "gameVersionTypeID": 3, + "name": "33.0.59", + "slug": "33-0-59" + }, + { + "id": 8056, + "gameVersionTypeID": 70886, + "name": "1.16.3", + "slug": "1-16-3" + }, + { + "id": 8057, + "gameVersionTypeID": 3, + "name": "33.0.60", + "slug": "33-0-60" + }, + { + "id": 8058, + "gameVersionTypeID": 3, + "name": "33.0.61", + "slug": "33-0-61" + }, + { + "id": 8059, + "gameVersionTypeID": 3, + "name": "34.0.0", + "slug": "34-0-0" + }, + { + "id": 8060, + "gameVersionTypeID": 3, + "name": "34.0.1", + "slug": "34-0-1" + }, + { + "id": 8061, + "gameVersionTypeID": 3, + "name": "34.0.2", + "slug": "34-0-2" + }, + { + "id": 8062, + "gameVersionTypeID": 3, + "name": "34.0.3", + "slug": "34-0-3" + }, + { + "id": 8063, + "gameVersionTypeID": 3, + "name": "34.0.4", + "slug": "34-0-4" + }, + { + "id": 8064, + "gameVersionTypeID": 3, + "name": "34.0.5", + "slug": "34-0-5" + }, + { + "id": 8065, + "gameVersionTypeID": 3, + "name": "34.0.6", + "slug": "34-0-6" + }, + { + "id": 8066, + "gameVersionTypeID": 3, + "name": "34.0.7", + "slug": "34-0-7" + }, + { + "id": 8067, + "gameVersionTypeID": 3, + "name": "31.2.38", + "slug": "31-2-38" + }, + { + "id": 8068, + "gameVersionTypeID": 3, + "name": "31.2.40", + "slug": "31-2-40" + }, + { + "id": 8069, + "gameVersionTypeID": 3, + "name": "31.2.41", + "slug": "31-2-41" + }, + { + "id": 8076, + "gameVersionTypeID": 3, + "name": "34.0.8", + "slug": "34-0-8" + }, + { + "id": 8077, + "gameVersionTypeID": 3, + "name": "34.0.9", + "slug": "34-0-9" + }, + { + "id": 8078, + "gameVersionTypeID": 3, + "name": "34.0.10", + "slug": "34-0-10" + }, + { + "id": 8079, + "gameVersionTypeID": 3, + "name": "34.0.11", + "slug": "34-0-11" + }, + { + "id": 8080, + "gameVersionTypeID": 3, + "name": "34.0.12", + "slug": "34-0-12" + }, + { + "id": 8081, + "gameVersionTypeID": 3, + "name": "34.0.13", + "slug": "34-0-13" + }, + { + "id": 8084, + "gameVersionTypeID": 3, + "name": "34.0.14", + "slug": "34-0-14" + }, + { + "id": 8085, + "gameVersionTypeID": 3, + "name": "34.0.16", + "slug": "34-0-16" + }, + { + "id": 8086, + "gameVersionTypeID": 3, + "name": "34.0.17", + "slug": "34-0-17" + }, + { + "id": 8087, + "gameVersionTypeID": 3, + "name": "34.0.18", + "slug": "34-0-18" + }, + { + "id": 8088, + "gameVersionTypeID": 3, + "name": "34.0.19", + "slug": "34-0-19" + }, + { + "id": 8089, + "gameVersionTypeID": 3, + "name": "34.0.20", + "slug": "34-0-20" + }, + { + "id": 8090, + "gameVersionTypeID": 3, + "name": "34.0.21", + "slug": "34-0-21" + }, + { + "id": 8091, + "gameVersionTypeID": 3, + "name": "34.1.0", + "slug": "34-1-0" + }, + { + "id": 8092, + "gameVersionTypeID": 3, + "name": "31.2.43", + "slug": "31-2-43" + }, + { + "id": 8095, + "gameVersionTypeID": 3, + "name": "34.1.1", + "slug": "34-1-1" + }, + { + "id": 8096, + "gameVersionTypeID": 3, + "name": "34.1.2", + "slug": "34-1-2" + }, + { + "id": 8097, + "gameVersionTypeID": 3, + "name": "34.1.3", + "slug": "34-1-3" + }, + { + "id": 8098, + "gameVersionTypeID": 3, + "name": "34.1.4", + "slug": "34-1-4" + }, + { + "id": 8099, + "gameVersionTypeID": 3, + "name": "34.1.5", + "slug": "34-1-5" + }, + { + "id": 8100, + "gameVersionTypeID": 3, + "name": "31.2.44", + "slug": "31-2-44" + }, + { + "id": 8101, + "gameVersionTypeID": 3, + "name": "34.1.7", + "slug": "34-1-7" + }, + { + "id": 8102, + "gameVersionTypeID": 3, + "name": "34.1.9", + "slug": "34-1-9" + }, + { + "id": 8103, + "gameVersionTypeID": 3, + "name": "31.2.45", + "slug": "31-2-45" + }, + { + "id": 8104, + "gameVersionTypeID": 3, + "name": "34.1.10", + "slug": "34-1-10" + }, + { + "id": 8105, + "gameVersionTypeID": 3, + "name": "34.1.11", + "slug": "34-1-11" + }, + { + "id": 8106, + "gameVersionTypeID": 3, + "name": "34.1.12", + "slug": "34-1-12" + }, + { + "id": 8107, + "gameVersionTypeID": 3, + "name": "34.1.13", + "slug": "34-1-13" + }, + { + "id": 8108, + "gameVersionTypeID": 3, + "name": "34.1.14", + "slug": "34-1-14" + }, + { + "id": 8109, + "gameVersionTypeID": 3, + "name": "34.1.15", + "slug": "34-1-15" + }, + { + "id": 8110, + "gameVersionTypeID": 3, + "name": "34.1.16", + "slug": "34-1-16" + }, + { + "id": 8111, + "gameVersionTypeID": 3, + "name": "34.1.17", + "slug": "34-1-17" + }, + { + "id": 8112, + "gameVersionTypeID": 3, + "name": "34.1.18", + "slug": "34-1-18" + }, + { + "id": 8113, + "gameVersionTypeID": 3, + "name": "34.1.19", + "slug": "34-1-19" + }, + { + "id": 8114, + "gameVersionTypeID": 3, + "name": "34.1.20", + "slug": "34-1-20" + }, + { + "id": 8115, + "gameVersionTypeID": 3, + "name": "34.1.21", + "slug": "34-1-21" + }, + { + "id": 8116, + "gameVersionTypeID": 3, + "name": "34.1.22", + "slug": "34-1-22" + }, + { + "id": 8117, + "gameVersionTypeID": 3, + "name": "34.1.23", + "slug": "34-1-23" + }, + { + "id": 8118, + "gameVersionTypeID": 3, + "name": "34.1.24", + "slug": "34-1-24" + }, + { + "id": 8119, + "gameVersionTypeID": 3, + "name": "34.1.25", + "slug": "34-1-25" + }, + { + "id": 8121, + "gameVersionTypeID": 3, + "name": "34.1.27", + "slug": "34-1-27" + }, + { + "id": 8122, + "gameVersionTypeID": 3, + "name": "34.1.28", + "slug": "34-1-28" + }, + { + "id": 8123, + "gameVersionTypeID": 3, + "name": "34.1.29", + "slug": "34-1-29" + }, + { + "id": 8124, + "gameVersionTypeID": 3, + "name": "34.1.30", + "slug": "34-1-30" + }, + { + "id": 8125, + "gameVersionTypeID": 3, + "name": "34.1.31", + "slug": "34-1-31" + }, + { + "id": 8126, + "gameVersionTypeID": 3, + "name": "34.1.32", + "slug": "34-1-32" + }, + { + "id": 8127, + "gameVersionTypeID": 3, + "name": "34.1.33", + "slug": "34-1-33" + }, + { + "id": 8128, + "gameVersionTypeID": 3, + "name": "34.1.34", + "slug": "34-1-34" + }, + { + "id": 8129, + "gameVersionTypeID": 3, + "name": "34.1.35", + "slug": "34-1-35" + }, + { + "id": 8130, + "gameVersionTypeID": 3, + "name": "34.1.39", + "slug": "34-1-39" + }, + { + "id": 8131, + "gameVersionTypeID": 3, + "name": "34.1.40", + "slug": "34-1-40" + }, + { + "id": 8132, + "gameVersionTypeID": 3, + "name": "34.1.41", + "slug": "34-1-41" + }, + { + "id": 8133, + "gameVersionTypeID": 3, + "name": "34.1.42", + "slug": "34-1-42" + }, + { + "id": 8134, + "gameVersionTypeID": 70886, + "name": "1.16.4", + "slug": "1-16-4" + }, + { + "id": 8135, + "gameVersionTypeID": 3, + "name": "35.0.0", + "slug": "35-0-0" + }, + { + "id": 8136, + "gameVersionTypeID": 3, + "name": "35.0.1", + "slug": "35-0-1" + }, + { + "id": 8137, + "gameVersionTypeID": 3, + "name": "35.0.2", + "slug": "35-0-2" + }, + { + "id": 8138, + "gameVersionTypeID": 3, + "name": "35.0.3", + "slug": "35-0-3" + }, + { + "id": 8139, + "gameVersionTypeID": 3, + "name": "35.0.4", + "slug": "35-0-4" + }, + { + "id": 8140, + "gameVersionTypeID": 3, + "name": "35.0.5", + "slug": "35-0-5" + }, + { + "id": 8141, + "gameVersionTypeID": 3, + "name": "35.0.6", + "slug": "35-0-6" + }, + { + "id": 8142, + "gameVersionTypeID": 3, + "name": "35.0.7", + "slug": "35-0-7" + }, + { + "id": 8143, + "gameVersionTypeID": 3, + "name": "35.0.9", + "slug": "35-0-9" + }, + { + "id": 8144, + "gameVersionTypeID": 3, + "name": "35.0.10", + "slug": "35-0-10" + }, + { + "id": 8145, + "gameVersionTypeID": 3, + "name": "35.0.11", + "slug": "35-0-11" + }, + { + "id": 8146, + "gameVersionTypeID": 3, + "name": "35.0.12", + "slug": "35-0-12" + }, + { + "id": 8147, + "gameVersionTypeID": 3, + "name": "35.0.13", + "slug": "35-0-13" + }, + { + "id": 8148, + "gameVersionTypeID": 3, + "name": "35.0.14", + "slug": "35-0-14" + }, + { + "id": 8149, + "gameVersionTypeID": 3, + "name": "35.0.15", + "slug": "35-0-15" + }, + { + "id": 8151, + "gameVersionTypeID": 3, + "name": "31.2.46", + "slug": "31-2-46" + }, + { + "id": 8152, + "gameVersionTypeID": 73242, + "name": "1.17", + "slug": "1-17" + }, + { + "id": 8153, + "gameVersionTypeID": 3, + "name": "35.0.16", + "slug": "35-0-16" + }, + { + "id": 8154, + "gameVersionTypeID": 3, + "name": "35.0.17", + "slug": "35-0-17" + }, + { + "id": 8156, + "gameVersionTypeID": 3, + "name": "35.0.18", + "slug": "35-0-18" + }, + { + "id": 8158, + "gameVersionTypeID": 3, + "name": "35.0.19", + "slug": "35-0-19" + }, + { + "id": 8159, + "gameVersionTypeID": 3, + "name": "35.0.20", + "slug": "35-0-20" + }, + { + "id": 8160, + "gameVersionTypeID": 3, + "name": "35.0.22", + "slug": "35-0-22" + }, + { + "id": 8161, + "gameVersionTypeID": 3, + "name": "35.1.0", + "slug": "35-1-0" + }, + { + "id": 8162, + "gameVersionTypeID": 3, + "name": "35.1.1", + "slug": "35-1-1" + }, + { + "id": 8163, + "gameVersionTypeID": 3, + "name": "35.1.2", + "slug": "35-1-2" + }, + { + "id": 8164, + "gameVersionTypeID": 3, + "name": "35.1.3", + "slug": "35-1-3" + }, + { + "id": 8165, + "gameVersionTypeID": 3, + "name": "35.1.4", + "slug": "35-1-4" + }, + { + "id": 8167, + "gameVersionTypeID": 3, + "name": "35.1.5", + "slug": "35-1-5" + }, + { + "id": 8168, + "gameVersionTypeID": 3, + "name": "35.1.6", + "slug": "35-1-6" + }, + { + "id": 8169, + "gameVersionTypeID": 3, + "name": "35.1.7", + "slug": "35-1-7" + }, + { + "id": 8170, + "gameVersionTypeID": 3, + "name": "31.2.47", + "slug": "31-2-47" + }, + { + "id": 8172, + "gameVersionTypeID": 3, + "name": "35.1.8", + "slug": "35-1-8" + }, + { + "id": 8173, + "gameVersionTypeID": 3, + "name": "35.1.9", + "slug": "35-1-9" + }, + { + "id": 8174, + "gameVersionTypeID": 3, + "name": "35.1.10", + "slug": "35-1-10" + }, + { + "id": 8175, + "gameVersionTypeID": 3, + "name": "35.1.11", + "slug": "35-1-11" + }, + { + "id": 8176, + "gameVersionTypeID": 3, + "name": "35.1.12", + "slug": "35-1-12" + }, + { + "id": 8177, + "gameVersionTypeID": 3, + "name": "35.1.13", + "slug": "35-1-13" + }, + { + "id": 8178, + "gameVersionTypeID": 3, + "name": "14.23.5.2855", + "slug": "14-23-5-2855" + }, + { + "id": 8180, + "gameVersionTypeID": 3, + "name": "35.1.15", + "slug": "35-1-15" + }, + { + "id": 8181, + "gameVersionTypeID": 3, + "name": "35.1.16", + "slug": "35-1-16" + }, + { + "id": 8182, + "gameVersionTypeID": 3, + "name": "35.1.17", + "slug": "35-1-17" + }, + { + "id": 8183, + "gameVersionTypeID": 3, + "name": "35.1.18", + "slug": "35-1-18" + }, + { + "id": 8184, + "gameVersionTypeID": 3, + "name": "35.1.20", + "slug": "35-1-20" + }, + { + "id": 8185, + "gameVersionTypeID": 3, + "name": "35.1.21", + "slug": "35-1-21" + }, + { + "id": 8188, + "gameVersionTypeID": 3, + "name": "35.1.22", + "slug": "35-1-22" + }, + { + "id": 8189, + "gameVersionTypeID": 3, + "name": "35.1.23", + "slug": "35-1-23" + }, + { + "id": 8190, + "gameVersionTypeID": 3, + "name": "35.1.24", + "slug": "35-1-24" + }, + { + "id": 8191, + "gameVersionTypeID": 3, + "name": "35.1.26", + "slug": "35-1-26" + }, + { + "id": 8192, + "gameVersionTypeID": 3, + "name": "35.1.27", + "slug": "35-1-27" + }, + { + "id": 8193, + "gameVersionTypeID": 3, + "name": "35.1.28", + "slug": "35-1-28" + }, + { + "id": 8194, + "gameVersionTypeID": 3, + "name": "35.1.29", + "slug": "35-1-29" + }, + { + "id": 8195, + "gameVersionTypeID": 3, + "name": "35.1.31", + "slug": "35-1-31" + }, + { + "id": 8196, + "gameVersionTypeID": 3, + "name": "35.1.32", + "slug": "35-1-32" + }, + { + "id": 8197, + "gameVersionTypeID": 3, + "name": "35.1.33", + "slug": "35-1-33" + }, + { + "id": 8198, + "gameVersionTypeID": 3, + "name": "35.1.34", + "slug": "35-1-34" + }, + { + "id": 8199, + "gameVersionTypeID": 3, + "name": "35.1.35", + "slug": "35-1-35" + }, + { + "id": 8200, + "gameVersionTypeID": 3, + "name": "35.1.36", + "slug": "35-1-36" + }, + { + "id": 8202, + "gameVersionTypeID": 3, + "name": "35.1.37", + "slug": "35-1-37" + }, + { + "id": 8203, + "gameVersionTypeID": 70886, + "name": "1.16.5", + "slug": "1-16-5" + }, + { + "id": 8204, + "gameVersionTypeID": 3, + "name": "36.0.0", + "slug": "36-0-0" + }, + { + "id": 8205, + "gameVersionTypeID": 3, + "name": "36.0.1", + "slug": "36-0-1" + }, + { + "id": 8216, + "gameVersionTypeID": 3, + "name": "36.0.2", + "slug": "36-0-2" + }, + { + "id": 8217, + "gameVersionTypeID": 3, + "name": "36.0.4", + "slug": "36-0-4" + }, + { + "id": 8218, + "gameVersionTypeID": 3, + "name": "36.0.7", + "slug": "36-0-7" + }, + { + "id": 8219, + "gameVersionTypeID": 3, + "name": "36.0.8", + "slug": "36-0-8" + }, + { + "id": 8220, + "gameVersionTypeID": 3, + "name": "36.0.9", + "slug": "36-0-9" + }, + { + "id": 8221, + "gameVersionTypeID": 3, + "name": "36.0.10", + "slug": "36-0-10" + }, + { + "id": 8223, + "gameVersionTypeID": 3, + "name": "36.0.11", + "slug": "36-0-11" + }, + { + "id": 8224, + "gameVersionTypeID": 3, + "name": "36.0.12", + "slug": "36-0-12" + }, + { + "id": 8225, + "gameVersionTypeID": 3, + "name": "36.0.13", + "slug": "36-0-13" + }, + { + "id": 8226, + "gameVersionTypeID": 3, + "name": "36.0.14", + "slug": "36-0-14" + }, + { + "id": 8229, + "gameVersionTypeID": 3, + "name": "31.2.48", + "slug": "31-2-48" + }, + { + "id": 8230, + "gameVersionTypeID": 3, + "name": "36.0.15", + "slug": "36-0-15" + }, + { + "id": 8232, + "gameVersionTypeID": 3, + "name": "36.0.16", + "slug": "36-0-16" + }, + { + "id": 8233, + "gameVersionTypeID": 3, + "name": "36.0.17", + "slug": "36-0-17" + }, + { + "id": 8234, + "gameVersionTypeID": 3, + "name": "36.0.18", + "slug": "36-0-18" + }, + { + "id": 8235, + "gameVersionTypeID": 3, + "name": "36.0.19", + "slug": "36-0-19" + }, + { + "id": 8236, + "gameVersionTypeID": 3, + "name": "36.0.20", + "slug": "36-0-20" + }, + { + "id": 8237, + "gameVersionTypeID": 3, + "name": "36.0.21", + "slug": "36-0-21" + }, + { + "id": 8238, + "gameVersionTypeID": 3, + "name": "36.0.22", + "slug": "36-0-22" + }, + { + "id": 8240, + "gameVersionTypeID": 3, + "name": "36.0.23", + "slug": "36-0-23" + }, + { + "id": 8241, + "gameVersionTypeID": 3, + "name": "36.0.24", + "slug": "36-0-24" + }, + { + "id": 8242, + "gameVersionTypeID": 3, + "name": "36.0.25", + "slug": "36-0-25" + }, + { + "id": 8243, + "gameVersionTypeID": 3, + "name": "36.0.26", + "slug": "36-0-26" + }, + { + "id": 8245, + "gameVersionTypeID": 3, + "name": "36.0.27", + "slug": "36-0-27" + }, + { + "id": 8246, + "gameVersionTypeID": 3, + "name": "36.0.28", + "slug": "36-0-28" + }, + { + "id": 8247, + "gameVersionTypeID": 3, + "name": "36.0.29", + "slug": "36-0-29" + }, + { + "id": 8248, + "gameVersionTypeID": 3, + "name": "36.0.30", + "slug": "36-0-30" + }, + { + "id": 8249, + "gameVersionTypeID": 3, + "name": "36.0.31", + "slug": "36-0-31" + }, + { + "id": 8250, + "gameVersionTypeID": 3, + "name": "36.0.32", + "slug": "36-0-32" + }, + { + "id": 8251, + "gameVersionTypeID": 3, + "name": "36.0.33", + "slug": "36-0-33" + }, + { + "id": 8252, + "gameVersionTypeID": 3, + "name": "36.0.34", + "slug": "36-0-34" + }, + { + "id": 8253, + "gameVersionTypeID": 3, + "name": "36.0.35", + "slug": "36-0-35" + }, + { + "id": 8254, + "gameVersionTypeID": 3, + "name": "36.0.36", + "slug": "36-0-36" + }, + { + "id": 8255, + "gameVersionTypeID": 3, + "name": "31.2.49", + "slug": "31-2-49" + }, + { + "id": 8256, + "gameVersionTypeID": 3, + "name": "36.0.37", + "slug": "36-0-37" + }, + { + "id": 8257, + "gameVersionTypeID": 3, + "name": "36.0.39", + "slug": "36-0-39" + }, + { + "id": 8258, + "gameVersionTypeID": 3, + "name": "36.0.40", + "slug": "36-0-40" + }, + { + "id": 8259, + "gameVersionTypeID": 3, + "name": "36.0.41", + "slug": "36-0-41" + }, + { + "id": 8260, + "gameVersionTypeID": 3, + "name": "36.0.42", + "slug": "36-0-42" + }, + { + "id": 8261, + "gameVersionTypeID": 3, + "name": "36.0.43", + "slug": "36-0-43" + }, + { + "id": 8263, + "gameVersionTypeID": 3, + "name": "36.0.44", + "slug": "36-0-44" + }, + { + "id": 8264, + "gameVersionTypeID": 3, + "name": "36.0.45", + "slug": "36-0-45" + }, + { + "id": 8265, + "gameVersionTypeID": 3, + "name": "36.0.46", + "slug": "36-0-46" + }, + { + "id": 8268, + "gameVersionTypeID": 3, + "name": "36.0.48", + "slug": "36-0-48" + }, + { + "id": 8269, + "gameVersionTypeID": 3, + "name": "36.0.52", + "slug": "36-0-52" + }, + { + "id": 8270, + "gameVersionTypeID": 3, + "name": "36.0.53", + "slug": "36-0-53" + }, + { + "id": 8271, + "gameVersionTypeID": 3, + "name": "36.0.54", + "slug": "36-0-54" + }, + { + "id": 8272, + "gameVersionTypeID": 3, + "name": "36.0.55", + "slug": "36-0-55" + }, + { + "id": 8273, + "gameVersionTypeID": 3, + "name": "36.0.58", + "slug": "36-0-58" + }, + { + "id": 8274, + "gameVersionTypeID": 3, + "name": "36.0.59", + "slug": "36-0-59" + }, + { + "id": 8275, + "gameVersionTypeID": 3, + "name": "36.0.60", + "slug": "36-0-60" + }, + { + "id": 8276, + "gameVersionTypeID": 3, + "name": "36.0.61", + "slug": "36-0-61" + }, + { + "id": 8277, + "gameVersionTypeID": 3, + "name": "36.0.62", + "slug": "36-0-62" + }, + { + "id": 8278, + "gameVersionTypeID": 3, + "name": "36.0.63", + "slug": "36-0-63" + }, + { + "id": 8279, + "gameVersionTypeID": 3, + "name": "36.1.0", + "slug": "36-1-0" + }, + { + "id": 8281, + "gameVersionTypeID": 3, + "name": "36.1.1", + "slug": "36-1-1" + }, + { + "id": 8282, + "gameVersionTypeID": 73242, + "name": "1.17-Snapshot", + "slug": "1-17-snapshot" + }, + { + "id": 8283, + "gameVersionTypeID": 3, + "name": "31.2.50", + "slug": "31-2-50" + }, + { + "id": 8284, + "gameVersionTypeID": 3, + "name": "36.1.2", + "slug": "36-1-2" + }, + { + "id": 8285, + "gameVersionTypeID": 3, + "name": "36.1.3", + "slug": "36-1-3" + }, + { + "id": 8289, + "gameVersionTypeID": 3, + "name": "36.1.4", + "slug": "36-1-4" + }, + { + "id": 8294, + "gameVersionTypeID": 3, + "name": "36.1.13", + "slug": "36-1-13" + }, + { + "id": 8295, + "gameVersionTypeID": 3, + "name": "36.1.10", + "slug": "36-1-10" + }, + { + "id": 8296, + "gameVersionTypeID": 3, + "name": "36.1.9", + "slug": "36-1-9" + }, + { + "id": 8297, + "gameVersionTypeID": 3, + "name": "36.1.8", + "slug": "36-1-8" + }, + { + "id": 8298, + "gameVersionTypeID": 3, + "name": "36.1.7", + "slug": "36-1-7" + }, + { + "id": 8299, + "gameVersionTypeID": 3, + "name": "36.1.6", + "slug": "36-1-6" + }, + { + "id": 8300, + "gameVersionTypeID": 3, + "name": "13.19.0.2164", + "slug": "13-19-0-2164" + }, + { + "id": 8301, + "gameVersionTypeID": 3, + "name": "13.19.0.2163", + "slug": "13-19-0-2163" + }, + { + "id": 8302, + "gameVersionTypeID": 3, + "name": "13.20.0.2356", + "slug": "13-20-0-2356" + }, + { + "id": 8303, + "gameVersionTypeID": 3, + "name": "13.20.0.2289", + "slug": "13-20-0-2289" + }, + { + "id": 8304, + "gameVersionTypeID": 3, + "name": "13.20.0.2276", + "slug": "13-20-0-2276" + }, + { + "id": 8305, + "gameVersionTypeID": 3, + "name": "13.20.0.2273", + "slug": "13-20-0-2273" + }, + { + "id": 8306, + "gameVersionTypeID": 3, + "name": "12.18.0.1998", + "slug": "12-18-0-1998" + }, + { + "id": 8307, + "gameVersionTypeID": 3, + "name": "12.18.0.1988", + "slug": "12-18-0-1988" + }, + { + "id": 8308, + "gameVersionTypeID": 3, + "name": "12.18.0.1985", + "slug": "12-18-0-1985" + }, + { + "id": 8309, + "gameVersionTypeID": 3, + "name": "12.18.2.2170", + "slug": "12-18-2-2170" + }, + { + "id": 8310, + "gameVersionTypeID": 3, + "name": "12.18.2.2108", + "slug": "12-18-2-2108" + }, + { + "id": 8311, + "gameVersionTypeID": 3, + "name": "12.18.1.2096", + "slug": "12-18-1-2096" + }, + { + "id": 8312, + "gameVersionTypeID": 3, + "name": "12.17.0.2317", + "slug": "12-17-0-2317" + }, + { + "id": 8313, + "gameVersionTypeID": 3, + "name": "12.17.0.1975", + "slug": "12-17-0-1975" + }, + { + "id": 8314, + "gameVersionTypeID": 3, + "name": "12.17.0.1972", + "slug": "12-17-0-1972" + }, + { + "id": 8316, + "gameVersionTypeID": 3, + "name": "36.1.16", + "slug": "36-1-16" + }, + { + "id": 8317, + "gameVersionTypeID": 3, + "name": "36.1.15", + "slug": "36-1-15" + }, + { + "id": 8318, + "gameVersionTypeID": 3, + "name": "36.1.14", + "slug": "36-1-14" + }, + { + "id": 8319, + "gameVersionTypeID": 73247, + "name": "0.11.3", + "slug": "0-11-3" + }, + { + "id": 8320, + "gameVersionTypeID": 2, + "name": "Java 11", + "slug": "java-11" + }, + { + "id": 8321, + "gameVersionTypeID": 2, + "name": "Java 12", + "slug": "java-12" + }, + { + "id": 8322, + "gameVersionTypeID": 2, + "name": "Java 13", + "slug": "java-13" + }, + { + "id": 8323, + "gameVersionTypeID": 2, + "name": "Java 14", + "slug": "java-14" + }, + { + "id": 8324, + "gameVersionTypeID": 2, + "name": "Java 15", + "slug": "java-15" + }, + { + "id": 8325, + "gameVersionTypeID": 2, + "name": "Java 16", + "slug": "java-16" + }, + { + "id": 8326, + "gameVersionTypeID": 2, + "name": "Java 17", + "slug": "java-17" + }, + { + "id": 8327, + "gameVersionTypeID": 3, + "name": "36.1.17", + "slug": "36-1-17" + }, + { + "id": 8328, + "gameVersionTypeID": 3, + "name": "36.1.18", + "slug": "36-1-18" + }, + { + "id": 8329, + "gameVersionTypeID": 3, + "name": "36.1.19", + "slug": "36-1-19" + }, + { + "id": 8330, + "gameVersionTypeID": 3, + "name": "36.1.23", + "slug": "36-1-23" + }, + { + "id": 8331, + "gameVersionTypeID": 3, + "name": "36.1.22", + "slug": "36-1-22" + }, + { + "id": 8332, + "gameVersionTypeID": 3, + "name": "36.1.21", + "slug": "36-1-21" + }, + { + "id": 8333, + "gameVersionTypeID": 3, + "name": "36.1.20", + "slug": "36-1-20" + }, + { + "id": 8337, + "gameVersionTypeID": 3, + "name": "36.1.24", + "slug": "36-1-24" + }, + { + "id": 8339, + "gameVersionTypeID": 73247, + "name": "0.11.2", + "slug": "0-11-2" + }, + { + "id": 8340, + "gameVersionTypeID": 73247, + "name": "0.11.1", + "slug": "0-11-1" + }, + { + "id": 8341, + "gameVersionTypeID": 73247, + "name": "0.11.0", + "slug": "0-11-0" + }, + { + "id": 8342, + "gameVersionTypeID": 73247, + "name": "0.10.8", + "slug": "0-10-8" + }, + { + "id": 8343, + "gameVersionTypeID": 73247, + "name": "0.10.7", + "slug": "0-10-7" + }, + { + "id": 8344, + "gameVersionTypeID": 73247, + "name": "0.10.6+build.214", + "slug": "0-10-6+build-214" + }, + { + "id": 8345, + "gameVersionTypeID": 73247, + "name": "0.10.5+build.213", + "slug": "0-10-5+build-213" + }, + { + "id": 8346, + "gameVersionTypeID": 73247, + "name": "0.10.4+build.212", + "slug": "0-10-4+build-212" + }, + { + "id": 8347, + "gameVersionTypeID": 73247, + "name": "0.10.3+build.211", + "slug": "0-10-3+build-211" + }, + { + "id": 8348, + "gameVersionTypeID": 73247, + "name": "0.10.2+build.210", + "slug": "0-10-2+build-210" + }, + { + "id": 8349, + "gameVersionTypeID": 73247, + "name": "0.10.1+build.209", + "slug": "0-10-1+build-209" + }, + { + "id": 8350, + "gameVersionTypeID": 73247, + "name": "0.10.0+build.208", + "slug": "0-10-0+build-208" + }, + { + "id": 8351, + "gameVersionTypeID": 73247, + "name": "0.9.3+build.207", + "slug": "0-9-3+build-207" + }, + { + "id": 8352, + "gameVersionTypeID": 73247, + "name": "0.9.2+build.206", + "slug": "0-9-2+build-206" + }, + { + "id": 8353, + "gameVersionTypeID": 73247, + "name": "0.9.1+build.205", + "slug": "0-9-1+build-205" + }, + { + "id": 8354, + "gameVersionTypeID": 73247, + "name": "0.9.0+build.204", + "slug": "0-9-0+build-204" + }, + { + "id": 8355, + "gameVersionTypeID": 73247, + "name": "0.8.9+build.203", + "slug": "0-8-9+build-203" + }, + { + "id": 8356, + "gameVersionTypeID": 73247, + "name": "0.8.8+build.202", + "slug": "0-8-8+build-202" + }, + { + "id": 8357, + "gameVersionTypeID": 73247, + "name": "0.8.7+build.201", + "slug": "0-8-7+build-201" + }, + { + "id": 8358, + "gameVersionTypeID": 73247, + "name": "0.8.6+build.200", + "slug": "0-8-6+build-200" + }, + { + "id": 8359, + "gameVersionTypeID": 73247, + "name": "0.8.5+build.199", + "slug": "0-8-5+build-199" + }, + { + "id": 8360, + "gameVersionTypeID": 73247, + "name": "0.8.4+build.198", + "slug": "0-8-4+build-198" + }, + { + "id": 8361, + "gameVersionTypeID": 73247, + "name": "0.8.3+build.196", + "slug": "0-8-3+build-196" + }, + { + "id": 8362, + "gameVersionTypeID": 73247, + "name": "0.8.2+build.194", + "slug": "0-8-2+build-194" + }, + { + "id": 8363, + "gameVersionTypeID": 73247, + "name": "0.8.1+build.193", + "slug": "0-8-1+build-193" + }, + { + "id": 8364, + "gameVersionTypeID": 73247, + "name": "0.8.0+build.192", + "slug": "0-8-0+build-192" + }, + { + "id": 8365, + "gameVersionTypeID": 73247, + "name": "0.7.10+build.191", + "slug": "0-7-10+build-191" + }, + { + "id": 8366, + "gameVersionTypeID": 73247, + "name": "0.7.9+build.190", + "slug": "0-7-9+build-190" + }, + { + "id": 8367, + "gameVersionTypeID": 73247, + "name": "0.7.8+build.189", + "slug": "0-7-8+build-189" + }, + { + "id": 8368, + "gameVersionTypeID": 73247, + "name": "0.7.8+build.188", + "slug": "0-7-8+build-188" + }, + { + "id": 8369, + "gameVersionTypeID": 73247, + "name": "0.7.8+build.187", + "slug": "0-7-8+build-187" + }, + { + "id": 8370, + "gameVersionTypeID": 73247, + "name": "0.7.8+build.186", + "slug": "0-7-8+build-186" + }, + { + "id": 8371, + "gameVersionTypeID": 73247, + "name": "0.7.8+build.185", + "slug": "0-7-8+build-185" + }, + { + "id": 8372, + "gameVersionTypeID": 73247, + "name": "0.7.8+build.184", + "slug": "0-7-8+build-184" + }, + { + "id": 8373, + "gameVersionTypeID": 73247, + "name": "0.7.7+build.183", + "slug": "0-7-7+build-183" + }, + { + "id": 8374, + "gameVersionTypeID": 73247, + "name": "0.7.7+build.182", + "slug": "0-7-7+build-182" + }, + { + "id": 8375, + "gameVersionTypeID": 73247, + "name": "0.7.6+build.181", + "slug": "0-7-6+build-181" + }, + { + "id": 8376, + "gameVersionTypeID": 73247, + "name": "0.7.6+build.180", + "slug": "0-7-6+build-180" + }, + { + "id": 8377, + "gameVersionTypeID": 73247, + "name": "0.7.6+build.179", + "slug": "0-7-6+build-179" + }, + { + "id": 8378, + "gameVersionTypeID": 73247, + "name": "0.7.5+build.178", + "slug": "0-7-5+build-178" + }, + { + "id": 8379, + "gameVersionTypeID": 73247, + "name": "0.7.4+build.177", + "slug": "0-7-4+build-177" + }, + { + "id": 8380, + "gameVersionTypeID": 73247, + "name": "0.7.3+build.176", + "slug": "0-7-3+build-176" + }, + { + "id": 8381, + "gameVersionTypeID": 73247, + "name": "0.7.2+build.175", + "slug": "0-7-2+build-175" + }, + { + "id": 8382, + "gameVersionTypeID": 73247, + "name": "0.7.2+build.174", + "slug": "0-7-2+build-174" + }, + { + "id": 8383, + "gameVersionTypeID": 73247, + "name": "0.7.1+build.173", + "slug": "0-7-1+build-173" + }, + { + "id": 8384, + "gameVersionTypeID": 73247, + "name": "0.7.0+build.172", + "slug": "0-7-0+build-172" + }, + { + "id": 8385, + "gameVersionTypeID": 73247, + "name": "0.7.0+build.171", + "slug": "0-7-0+build-171" + }, + { + "id": 8386, + "gameVersionTypeID": 73247, + "name": "0.6.4+build.170", + "slug": "0-6-4+build-170" + }, + { + "id": 8387, + "gameVersionTypeID": 73247, + "name": "0.6.4+build.169", + "slug": "0-6-4+build-169" + }, + { + "id": 8388, + "gameVersionTypeID": 73247, + "name": "0.6.3+build.168", + "slug": "0-6-3+build-168" + }, + { + "id": 8389, + "gameVersionTypeID": 73247, + "name": "0.6.3+build.167", + "slug": "0-6-3+build-167" + }, + { + "id": 8390, + "gameVersionTypeID": 73247, + "name": "0.6.2+build.166", + "slug": "0-6-2+build-166" + }, + { + "id": 8391, + "gameVersionTypeID": 73247, + "name": "0.6.1+build.165", + "slug": "0-6-1+build-165" + }, + { + "id": 8392, + "gameVersionTypeID": 73247, + "name": "0.6.1+build.164", + "slug": "0-6-1+build-164" + }, + { + "id": 8393, + "gameVersionTypeID": 73247, + "name": "0.6.0+build.163", + "slug": "0-6-0+build-163" + }, + { + "id": 8394, + "gameVersionTypeID": 73247, + "name": "0.5.0+build.162", + "slug": "0-5-0+build-162" + }, + { + "id": 8395, + "gameVersionTypeID": 73247, + "name": "0.4.9+build.161", + "slug": "0-4-9+build-161" + }, + { + "id": 8396, + "gameVersionTypeID": 73247, + "name": "0.4.9+build.160", + "slug": "0-4-9+build-160" + }, + { + "id": 8397, + "gameVersionTypeID": 73247, + "name": "0.4.8+build.159", + "slug": "0-4-8+build-159" + }, + { + "id": 8398, + "gameVersionTypeID": 73247, + "name": "0.4.8+build.158", + "slug": "0-4-8+build-158" + }, + { + "id": 8399, + "gameVersionTypeID": 73247, + "name": "0.4.8+build.157", + "slug": "0-4-8+build-157" + }, + { + "id": 8400, + "gameVersionTypeID": 73247, + "name": "0.4.8+build.156", + "slug": "0-4-8+build-156" + }, + { + "id": 8401, + "gameVersionTypeID": 73247, + "name": "0.4.8+build.155", + "slug": "0-4-8+build-155" + }, + { + "id": 8402, + "gameVersionTypeID": 73247, + "name": "0.4.8+build.154", + "slug": "0-4-8+build-154" + }, + { + "id": 8403, + "gameVersionTypeID": 73247, + "name": "0.4.7+build.153", + "slug": "0-4-7+build-153" + }, + { + "id": 8404, + "gameVersionTypeID": 73247, + "name": "0.4.7+build.152", + "slug": "0-4-7+build-152" + }, + { + "id": 8405, + "gameVersionTypeID": 73247, + "name": "0.4.7+build.148", + "slug": "0-4-7+build-148" + }, + { + "id": 8406, + "gameVersionTypeID": 73247, + "name": "0.4.7+build.147", + "slug": "0-4-7+build-147" + }, + { + "id": 8407, + "gameVersionTypeID": 73247, + "name": "0.4.7+build.146", + "slug": "0-4-7+build-146" + }, + { + "id": 8408, + "gameVersionTypeID": 73247, + "name": "0.4.6+build.145", + "slug": "0-4-6+build-145" + }, + { + "id": 8409, + "gameVersionTypeID": 73247, + "name": "0.4.6+build.144", + "slug": "0-4-6+build-144" + }, + { + "id": 8410, + "gameVersionTypeID": 73247, + "name": "0.4.6+build.143", + "slug": "0-4-6+build-143" + }, + { + "id": 8411, + "gameVersionTypeID": 73247, + "name": "0.4.6+build.142", + "slug": "0-4-6+build-142" + }, + { + "id": 8412, + "gameVersionTypeID": 73247, + "name": "0.4.6+build.141", + "slug": "0-4-6+build-141" + }, + { + "id": 8413, + "gameVersionTypeID": 73247, + "name": "0.4.5+build.140", + "slug": "0-4-5+build-140" + }, + { + "id": 8414, + "gameVersionTypeID": 73247, + "name": "0.4.4+build.139", + "slug": "0-4-4+build-139" + }, + { + "id": 8415, + "gameVersionTypeID": 73247, + "name": "0.4.4+build.138", + "slug": "0-4-4+build-138" + }, + { + "id": 8416, + "gameVersionTypeID": 73247, + "name": "0.4.4+build.137", + "slug": "0-4-4+build-137" + }, + { + "id": 8417, + "gameVersionTypeID": 73247, + "name": "0.4.4+build.136", + "slug": "0-4-4+build-136" + }, + { + "id": 8418, + "gameVersionTypeID": 73247, + "name": "0.4.3+build.135", + "slug": "0-4-3+build-135" + }, + { + "id": 8419, + "gameVersionTypeID": 73247, + "name": "0.4.3+build.134", + "slug": "0-4-3+build-134" + }, + { + "id": 8420, + "gameVersionTypeID": 73247, + "name": "0.4.3+build.133", + "slug": "0-4-3+build-133" + }, + { + "id": 8421, + "gameVersionTypeID": 73247, + "name": "0.4.2+build.132", + "slug": "0-4-2+build-132" + }, + { + "id": 8422, + "gameVersionTypeID": 73247, + "name": "0.4.2+build.131", + "slug": "0-4-2+build-131" + }, + { + "id": 8423, + "gameVersionTypeID": 73247, + "name": "0.4.2+build.130", + "slug": "0-4-2+build-130" + }, + { + "id": 8424, + "gameVersionTypeID": 73247, + "name": "0.4.1+build.129", + "slug": "0-4-1+build-129" + }, + { + "id": 8425, + "gameVersionTypeID": 73247, + "name": "0.4.1+build.128", + "slug": "0-4-1+build-128" + }, + { + "id": 8426, + "gameVersionTypeID": 73247, + "name": "0.4.1+build.127", + "slug": "0-4-1+build-127" + }, + { + "id": 8427, + "gameVersionTypeID": 73247, + "name": "0.4.1+build.126", + "slug": "0-4-1+build-126" + }, + { + "id": 8428, + "gameVersionTypeID": 73247, + "name": "0.4.1+build.125", + "slug": "0-4-1+build-125" + }, + { + "id": 8429, + "gameVersionTypeID": 73247, + "name": "0.4.1+build.124", + "slug": "0-4-1+build-124" + }, + { + "id": 8430, + "gameVersionTypeID": 73247, + "name": "0.4.1+build.123", + "slug": "0-4-1+build-123" + }, + { + "id": 8431, + "gameVersionTypeID": 73247, + "name": "0.4.1+build.122", + "slug": "0-4-1+build-122" + }, + { + "id": 8432, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.121", + "slug": "0-4-0+build-121" + }, + { + "id": 8433, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.120", + "slug": "0-4-0+build-120" + }, + { + "id": 8434, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.119", + "slug": "0-4-0+build-119" + }, + { + "id": 8435, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.118", + "slug": "0-4-0+build-118" + }, + { + "id": 8436, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.117", + "slug": "0-4-0+build-117" + }, + { + "id": 8437, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.116", + "slug": "0-4-0+build-116" + }, + { + "id": 8438, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.115", + "slug": "0-4-0+build-115" + }, + { + "id": 8439, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.114", + "slug": "0-4-0+build-114" + }, + { + "id": 8440, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.113", + "slug": "0-4-0+build-113" + }, + { + "id": 8441, + "gameVersionTypeID": 73247, + "name": "0.4.0+build.112", + "slug": "0-4-0+build-112" + }, + { + "id": 8442, + "gameVersionTypeID": 73247, + "name": "0.3.7.111", + "slug": "0-3-7-111" + }, + { + "id": 8443, + "gameVersionTypeID": 73247, + "name": "0.3.7.110", + "slug": "0-3-7-110" + }, + { + "id": 8444, + "gameVersionTypeID": 73247, + "name": "0.3.7.109", + "slug": "0-3-7-109" + }, + { + "id": 8445, + "gameVersionTypeID": 73247, + "name": "0.3.7.108", + "slug": "0-3-7-108" + }, + { + "id": 8446, + "gameVersionTypeID": 73247, + "name": "0.3.6.107", + "slug": "0-3-6-107" + }, + { + "id": 8447, + "gameVersionTypeID": 73247, + "name": "0.3.5.106", + "slug": "0-3-5-106" + }, + { + "id": 8448, + "gameVersionTypeID": 73247, + "name": "0.3.4.105", + "slug": "0-3-4-105" + }, + { + "id": 8449, + "gameVersionTypeID": 73247, + "name": "0.3.4.104", + "slug": "0-3-4-104" + }, + { + "id": 8450, + "gameVersionTypeID": 73247, + "name": "0.3.4.103", + "slug": "0-3-4-103" + }, + { + "id": 8451, + "gameVersionTypeID": 73247, + "name": "0.3.3.102", + "slug": "0-3-3-102" + }, + { + "id": 8452, + "gameVersionTypeID": 73247, + "name": "0.3.3.101", + "slug": "0-3-3-101" + }, + { + "id": 8453, + "gameVersionTypeID": 73247, + "name": "0.3.3.100", + "slug": "0-3-3-100" + }, + { + "id": 8454, + "gameVersionTypeID": 73247, + "name": "0.3.3.99", + "slug": "0-3-3-99" + }, + { + "id": 8455, + "gameVersionTypeID": 73247, + "name": "0.3.3.98", + "slug": "0-3-3-98" + }, + { + "id": 8456, + "gameVersionTypeID": 73247, + "name": "0.3.3.97", + "slug": "0-3-3-97" + }, + { + "id": 8457, + "gameVersionTypeID": 73247, + "name": "0.3.2.96", + "slug": "0-3-2-96" + }, + { + "id": 8458, + "gameVersionTypeID": 73247, + "name": "0.3.2.95", + "slug": "0-3-2-95" + }, + { + "id": 8459, + "gameVersionTypeID": 73247, + "name": "0.3.2.94", + "slug": "0-3-2-94" + }, + { + "id": 8460, + "gameVersionTypeID": 73247, + "name": "0.3.2.93", + "slug": "0-3-2-93" + }, + { + "id": 8461, + "gameVersionTypeID": 73247, + "name": "0.3.2.92", + "slug": "0-3-2-92" + }, + { + "id": 8462, + "gameVersionTypeID": 73247, + "name": "0.3.2.91", + "slug": "0-3-2-91" + }, + { + "id": 8463, + "gameVersionTypeID": 73247, + "name": "0.3.2.90", + "slug": "0-3-2-90" + }, + { + "id": 8464, + "gameVersionTypeID": 73247, + "name": "0.3.2.87", + "slug": "0-3-2-87" + }, + { + "id": 8465, + "gameVersionTypeID": 73247, + "name": "0.3.2.86", + "slug": "0-3-2-86" + }, + { + "id": 8466, + "gameVersionTypeID": 73247, + "name": "0.3.1.85", + "slug": "0-3-1-85" + }, + { + "id": 8467, + "gameVersionTypeID": 73247, + "name": "0.3.1.84", + "slug": "0-3-1-84" + }, + { + "id": 8468, + "gameVersionTypeID": 73247, + "name": "0.3.1.82", + "slug": "0-3-1-82" + }, + { + "id": 8469, + "gameVersionTypeID": 73247, + "name": "0.3.1.81", + "slug": "0-3-1-81" + }, + { + "id": 8470, + "gameVersionTypeID": 73247, + "name": "0.3.1.80", + "slug": "0-3-1-80" + }, + { + "id": 8471, + "gameVersionTypeID": 73247, + "name": "0.3.0.77", + "slug": "0-3-0-77" + }, + { + "id": 8472, + "gameVersionTypeID": 73247, + "name": "0.3.0.76", + "slug": "0-3-0-76" + }, + { + "id": 8473, + "gameVersionTypeID": 73247, + "name": "0.3.0.75", + "slug": "0-3-0-75" + }, + { + "id": 8474, + "gameVersionTypeID": 73247, + "name": "0.3.0.74", + "slug": "0-3-0-74" + }, + { + "id": 8475, + "gameVersionTypeID": 73247, + "name": "0.3.0.73", + "slug": "0-3-0-73" + }, + { + "id": 8476, + "gameVersionTypeID": 73247, + "name": "0.3.0.72", + "slug": "0-3-0-72" + }, + { + "id": 8477, + "gameVersionTypeID": 73247, + "name": "0.2.0.71", + "slug": "0-2-0-71" + }, + { + "id": 8478, + "gameVersionTypeID": 73247, + "name": "0.2.0.70", + "slug": "0-2-0-70" + }, + { + "id": 8479, + "gameVersionTypeID": 73247, + "name": "0.2.0.69", + "slug": "0-2-0-69" + }, + { + "id": 8480, + "gameVersionTypeID": 73247, + "name": "0.2.0.68", + "slug": "0-2-0-68" + }, + { + "id": 8481, + "gameVersionTypeID": 73247, + "name": "0.2.0.67", + "slug": "0-2-0-67" + }, + { + "id": 8482, + "gameVersionTypeID": 73247, + "name": "0.2.0.66", + "slug": "0-2-0-66" + }, + { + "id": 8483, + "gameVersionTypeID": 73247, + "name": "0.2.0.65", + "slug": "0-2-0-65" + }, + { + "id": 8484, + "gameVersionTypeID": 73247, + "name": "0.2.0.64", + "slug": "0-2-0-64" + }, + { + "id": 8485, + "gameVersionTypeID": 73247, + "name": "0.2.0.63", + "slug": "0-2-0-63" + }, + { + "id": 8486, + "gameVersionTypeID": 73247, + "name": "0.2.0.62", + "slug": "0-2-0-62" + }, + { + "id": 8487, + "gameVersionTypeID": 73247, + "name": "0.2.0.61", + "slug": "0-2-0-61" + }, + { + "id": 8488, + "gameVersionTypeID": 73247, + "name": "0.2.0.60", + "slug": "0-2-0-60" + }, + { + "id": 8489, + "gameVersionTypeID": 73247, + "name": "0.2.0.59", + "slug": "0-2-0-59" + }, + { + "id": 8490, + "gameVersionTypeID": 73247, + "name": "0.2.0.58", + "slug": "0-2-0-58" + }, + { + "id": 8491, + "gameVersionTypeID": 73247, + "name": "0.2.0.57", + "slug": "0-2-0-57" + }, + { + "id": 8492, + "gameVersionTypeID": 73247, + "name": "0.2.0.56", + "slug": "0-2-0-56" + }, + { + "id": 8493, + "gameVersionTypeID": 73247, + "name": "0.2.0.55", + "slug": "0-2-0-55" + }, + { + "id": 8494, + "gameVersionTypeID": 73247, + "name": "0.2.0.54", + "slug": "0-2-0-54" + }, + { + "id": 8495, + "gameVersionTypeID": 73247, + "name": "0.2.0.53", + "slug": "0-2-0-53" + }, + { + "id": 8496, + "gameVersionTypeID": 73247, + "name": "0.1.0.52", + "slug": "0-1-0-52" + }, + { + "id": 8497, + "gameVersionTypeID": 73247, + "name": "0.1.0.51", + "slug": "0-1-0-51" + }, + { + "id": 8498, + "gameVersionTypeID": 73247, + "name": "0.1.0.50", + "slug": "0-1-0-50" + }, + { + "id": 8499, + "gameVersionTypeID": 73247, + "name": "0.1.0.49", + "slug": "0-1-0-49" + }, + { + "id": 8500, + "gameVersionTypeID": 73247, + "name": "0.1.0.48", + "slug": "0-1-0-48" + }, + { + "id": 8502, + "gameVersionTypeID": 3, + "name": "36.1.25", + "slug": "36-1-25" + }, + { + "id": 8503, + "gameVersionTypeID": 1, + "name": "1.17", + "slug": "1-17" + }, + { + "id": 8504, + "gameVersionTypeID": 615, + "name": "1.17", + "slug": "1-17" + }, + { + "id": 8505, + "gameVersionTypeID": 3, + "name": "36.1.26", + "slug": "36-1-26" + }, + { + "id": 8506, + "gameVersionTypeID": 3, + "name": "36.1.29", + "slug": "36-1-29" + }, + { + "id": 8507, + "gameVersionTypeID": 3, + "name": "36.1.28", + "slug": "36-1-28" + }, + { + "id": 8508, + "gameVersionTypeID": 3, + "name": "36.1.27", + "slug": "36-1-27" + }, + { + "id": 8509, + "gameVersionTypeID": 3, + "name": "36.1.30", + "slug": "36-1-30" + }, + { + "id": 8510, + "gameVersionTypeID": 3, + "name": "36.1.31", + "slug": "36-1-31" + }, + { + "id": 8511, + "gameVersionTypeID": 73247, + "name": "0.11.5", + "slug": "0-11-5" + }, + { + "id": 8512, + "gameVersionTypeID": 73247, + "name": "0.11.6", + "slug": "0-11-6" + }, + { + "id": 8513, + "gameVersionTypeID": 3, + "name": "36.1.32", + "slug": "36-1-32" + }, + { + "id": 8516, + "gameVersionTypeID": 73242, + "name": "1.17.1", + "slug": "1-17-1" + }, + { + "id": 8522, + "gameVersionTypeID": 3, + "name": "36.1.33", + "slug": "36-1-33" + }, + { + "id": 8523, + "gameVersionTypeID": 3, + "name": "31.2.52", + "slug": "31-2-52" + }, + { + "id": 8525, + "gameVersionTypeID": 3, + "name": "36.1.35", + "slug": "36-1-35" + }, + { + "id": 8526, + "gameVersionTypeID": 3, + "name": "36.1.34", + "slug": "36-1-34" + }, + { + "id": 8527, + "gameVersionTypeID": 3, + "name": "36.1.36", + "slug": "36-1-36" + }, + { + "id": 8528, + "gameVersionTypeID": 3, + "name": "36.1.52", + "slug": "36-1-52" + }, + { + "id": 8529, + "gameVersionTypeID": 3, + "name": "36.1.51", + "slug": "36-1-51" + }, + { + "id": 8530, + "gameVersionTypeID": 3, + "name": "36.1.53", + "slug": "36-1-53" + }, + { + "id": 8531, + "gameVersionTypeID": 3, + "name": "36.1.58", + "slug": "36-1-58" + }, + { + "id": 8532, + "gameVersionTypeID": 3, + "name": "36.1.61", + "slug": "36-1-61" + }, + { + "id": 8533, + "gameVersionTypeID": 3, + "name": "36.1.62", + "slug": "36-1-62" + }, + { + "id": 8538, + "gameVersionTypeID": 3, + "name": "36.1.63", + "slug": "36-1-63" + }, + { + "id": 8539, + "gameVersionTypeID": 3, + "name": "36.1.65", + "slug": "36-1-65" + }, + { + "id": 8541, + "gameVersionTypeID": 3, + "name": "36.1.66", + "slug": "36-1-66" + }, + { + "id": 8542, + "gameVersionTypeID": 3, + "name": "31.2.53", + "slug": "31-2-53" + }, + { + "id": 8543, + "gameVersionTypeID": 3, + "name": "36.2.0", + "slug": "36-2-0" + }, + { + "id": 8544, + "gameVersionTypeID": 3, + "name": "36.1.12", + "slug": "36-1-12" + }, + { + "id": 8545, + "gameVersionTypeID": 3, + "name": "31.2.54", + "slug": "31-2-54" + }, + { + "id": 8546, + "gameVersionTypeID": 3, + "name": "36.2.1", + "slug": "36-2-1" + }, + { + "id": 8547, + "gameVersionTypeID": 3, + "name": "37.0.9", + "slug": "37-0-9" + }, + { + "id": 8548, + "gameVersionTypeID": 3, + "name": "37.0.8", + "slug": "37-0-8" + }, + { + "id": 8549, + "gameVersionTypeID": 3, + "name": "37.0.7", + "slug": "37-0-7" + }, + { + "id": 8550, + "gameVersionTypeID": 3, + "name": "37.0.5", + "slug": "37-0-5" + }, + { + "id": 8551, + "gameVersionTypeID": 3, + "name": "37.0.3", + "slug": "37-0-3" + }, + { + "id": 8552, + "gameVersionTypeID": 3, + "name": "37.0.2", + "slug": "37-0-2" + }, + { + "id": 8553, + "gameVersionTypeID": 3, + "name": "37.0.1", + "slug": "37-0-1" + }, + { + "id": 8554, + "gameVersionTypeID": 3, + "name": "31.2.55", + "slug": "31-2-55" + }, + { + "id": 8555, + "gameVersionTypeID": 3, + "name": "36.2.2", + "slug": "36-2-2" + }, + { + "id": 8570, + "gameVersionTypeID": 3, + "name": "37.0.13", + "slug": "37-0-13" + }, + { + "id": 8571, + "gameVersionTypeID": 3, + "name": "37.0.12", + "slug": "37-0-12" + }, + { + "id": 8572, + "gameVersionTypeID": 3, + "name": "37.0.11", + "slug": "37-0-11" + }, + { + "id": 8573, + "gameVersionTypeID": 3, + "name": "37.0.10", + "slug": "37-0-10" + }, + { + "id": 8574, + "gameVersionTypeID": 3, + "name": "37.0.0", + "slug": "37-0-0" + }, + { + "id": 8575, + "gameVersionTypeID": 3, + "name": "37.0.15", + "slug": "37-0-15" + }, + { + "id": 8576, + "gameVersionTypeID": 3, + "name": "37.0.17", + "slug": "37-0-17" + }, + { + "id": 8577, + "gameVersionTypeID": 3, + "name": "37.0.16", + "slug": "37-0-16" + }, + { + "id": 8578, + "gameVersionTypeID": 3, + "name": "37.0.18", + "slug": "37-0-18" + }, + { + "id": 8581, + "gameVersionTypeID": 3, + "name": "37.0.19", + "slug": "37-0-19" + }, + { + "id": 8584, + "gameVersionTypeID": 3, + "name": "37.0.21", + "slug": "37-0-21" + }, + { + "id": 8585, + "gameVersionTypeID": 3, + "name": "37.0.20", + "slug": "37-0-20" + }, + { + "id": 8586, + "gameVersionTypeID": 3, + "name": "37.0.22", + "slug": "37-0-22" + }, + { + "id": 8620, + "gameVersionTypeID": 3, + "name": "37.0.25", + "slug": "37-0-25" + }, + { + "id": 8621, + "gameVersionTypeID": 3, + "name": "37.0.24", + "slug": "37-0-24" + }, + { + "id": 8626, + "gameVersionTypeID": 3, + "name": "37.0.26", + "slug": "37-0-26" + }, + { + "id": 8627, + "gameVersionTypeID": 3, + "name": "37.0.27", + "slug": "37-0-27" + }, + { + "id": 8628, + "gameVersionTypeID": 3, + "name": "37.0.28", + "slug": "37-0-28" + }, + { + "id": 8629, + "gameVersionTypeID": 3, + "name": "37.0.29", + "slug": "37-0-29" + }, + { + "id": 8630, + "gameVersionTypeID": 3, + "name": "37.0.30", + "slug": "37-0-30" + }, + { + "id": 8631, + "gameVersionTypeID": 3, + "name": "37.0.31", + "slug": "37-0-31" + }, + { + "id": 8632, + "gameVersionTypeID": 3, + "name": "37.0.32", + "slug": "37-0-32" + }, + { + "id": 8633, + "gameVersionTypeID": 73250, + "name": "1.18-Snapshot", + "slug": "1-18-snapshot" + }, + { + "id": 8634, + "gameVersionTypeID": 2, + "name": "Java 18", + "slug": "java-18" + }, + { + "id": 8635, + "gameVersionTypeID": 3, + "name": "37.0.33", + "slug": "37-0-33" + }, + { + "id": 8636, + "gameVersionTypeID": 3, + "name": "37.0.34", + "slug": "37-0-34" + }, + { + "id": 8637, + "gameVersionTypeID": 3, + "name": "37.0.35", + "slug": "37-0-35" + }, + { + "id": 8638, + "gameVersionTypeID": 3, + "name": "37.0.36", + "slug": "37-0-36" + }, + { + "id": 8639, + "gameVersionTypeID": 3, + "name": "37.0.38", + "slug": "37-0-38" + }, + { + "id": 8640, + "gameVersionTypeID": 3, + "name": "37.0.37", + "slug": "37-0-37" + }, + { + "id": 8641, + "gameVersionTypeID": 3, + "name": "37.0.39", + "slug": "37-0-39" + }, + { + "id": 8642, + "gameVersionTypeID": 3, + "name": "37.0.40", + "slug": "37-0-40" + }, + { + "id": 8644, + "gameVersionTypeID": 3, + "name": "37.0.41", + "slug": "37-0-41" + }, + { + "id": 8645, + "gameVersionTypeID": 3, + "name": "37.0.42", + "slug": "37-0-42" + }, + { + "id": 8646, + "gameVersionTypeID": 3, + "name": "37.0.43", + "slug": "37-0-43" + }, + { + "id": 8647, + "gameVersionTypeID": 3, + "name": "37.0.44", + "slug": "37-0-44" + }, + { + "id": 8655, + "gameVersionTypeID": 3, + "name": "37.0.45", + "slug": "37-0-45" + }, + { + "id": 8656, + "gameVersionTypeID": 3, + "name": "37.0.46", + "slug": "37-0-46" + }, + { + "id": 8657, + "gameVersionTypeID": 3, + "name": "37.0.47", + "slug": "37-0-47" + }, + { + "id": 8658, + "gameVersionTypeID": 3, + "name": "37.0.48", + "slug": "37-0-48" + }, + { + "id": 8659, + "gameVersionTypeID": 3, + "name": "37.0.49", + "slug": "37-0-49" + }, + { + "id": 8661, + "gameVersionTypeID": 3, + "name": "37.0.50", + "slug": "37-0-50" + }, + { + "id": 8662, + "gameVersionTypeID": 3, + "name": "36.2.3", + "slug": "36-2-3" + }, + { + "id": 8663, + "gameVersionTypeID": 3, + "name": "36.2.4", + "slug": "36-2-4" + }, + { + "id": 8664, + "gameVersionTypeID": 3, + "name": "37.0.51", + "slug": "37-0-51" + }, + { + "id": 8666, + "gameVersionTypeID": 3, + "name": "37.0.52", + "slug": "37-0-52" + }, + { + "id": 8667, + "gameVersionTypeID": 3, + "name": "37.0.53", + "slug": "37-0-53" + }, + { + "id": 8672, + "gameVersionTypeID": 3, + "name": "37.0.55", + "slug": "37-0-55" + }, + { + "id": 8673, + "gameVersionTypeID": 3, + "name": "37.0.54", + "slug": "37-0-54" + }, + { + "id": 8674, + "gameVersionTypeID": 3, + "name": "37.0.57", + "slug": "37-0-57" + }, + { + "id": 8675, + "gameVersionTypeID": 3, + "name": "37.0.56", + "slug": "37-0-56" + }, + { + "id": 8676, + "gameVersionTypeID": 3, + "name": "37.0.58", + "slug": "37-0-58" + }, + { + "id": 8677, + "gameVersionTypeID": 3, + "name": "37.0.59", + "slug": "37-0-59" + }, + { + "id": 8680, + "gameVersionTypeID": 3, + "name": "37.0.60", + "slug": "37-0-60" + }, + { + "id": 8683, + "gameVersionTypeID": 3, + "name": "37.0.61", + "slug": "37-0-61" + }, + { + "id": 8684, + "gameVersionTypeID": 3, + "name": "37.0.65", + "slug": "37-0-65" + }, + { + "id": 8685, + "gameVersionTypeID": 3, + "name": "37.0.64", + "slug": "37-0-64" + }, + { + "id": 8686, + "gameVersionTypeID": 3, + "name": "37.0.62", + "slug": "37-0-62" + }, + { + "id": 8687, + "gameVersionTypeID": 3, + "name": "37.0.66", + "slug": "37-0-66" + }, + { + "id": 8688, + "gameVersionTypeID": 3, + "name": "37.0.67", + "slug": "37-0-67" + }, + { + "id": 8689, + "gameVersionTypeID": 3, + "name": "37.0.68", + "slug": "37-0-68" + }, + { + "id": 8690, + "gameVersionTypeID": 3, + "name": "37.0.69", + "slug": "37-0-69" + }, + { + "id": 8691, + "gameVersionTypeID": 3, + "name": "37.0.70", + "slug": "37-0-70" + }, + { + "id": 8692, + "gameVersionTypeID": 3, + "name": "36.2.5", + "slug": "36-2-5" + }, + { + "id": 8694, + "gameVersionTypeID": 3, + "name": "37.0.71", + "slug": "37-0-71" + }, + { + "id": 8695, + "gameVersionTypeID": 3, + "name": "37.0.72", + "slug": "37-0-72" + }, + { + "id": 8696, + "gameVersionTypeID": 3, + "name": "37.0.73", + "slug": "37-0-73" + }, + { + "id": 8697, + "gameVersionTypeID": 3, + "name": "36.2.6", + "slug": "36-2-6" + }, + { + "id": 8707, + "gameVersionTypeID": 3, + "name": "37.0.74", + "slug": "37-0-74" + }, + { + "id": 8708, + "gameVersionTypeID": 3, + "name": "37.0.75", + "slug": "37-0-75" + }, + { + "id": 8711, + "gameVersionTypeID": 3, + "name": "36.2.8", + "slug": "36-2-8" + }, + { + "id": 8712, + "gameVersionTypeID": 3, + "name": "37.0.78", + "slug": "37-0-78" + }, + { + "id": 8713, + "gameVersionTypeID": 3, + "name": "37.0.76", + "slug": "37-0-76" + }, + { + "id": 8718, + "gameVersionTypeID": 3, + "name": "37.0.81", + "slug": "37-0-81" + }, + { + "id": 8719, + "gameVersionTypeID": 3, + "name": "37.0.80", + "slug": "37-0-80" + }, + { + "id": 8720, + "gameVersionTypeID": 3, + "name": "37.0.82", + "slug": "37-0-82" + }, + { + "id": 8723, + "gameVersionTypeID": 3, + "name": "37.0.83", + "slug": "37-0-83" + }, + { + "id": 8724, + "gameVersionTypeID": 3, + "name": "37.0.84", + "slug": "37-0-84" + }, + { + "id": 8725, + "gameVersionTypeID": 3, + "name": "37.0.85", + "slug": "37-0-85" + }, + { + "id": 8728, + "gameVersionTypeID": 3, + "name": "37.0.86", + "slug": "37-0-86" + }, + { + "id": 8729, + "gameVersionTypeID": 3, + "name": "37.0.87", + "slug": "37-0-87" + }, + { + "id": 8730, + "gameVersionTypeID": 3, + "name": "37.0.88", + "slug": "37-0-88" + }, + { + "id": 8731, + "gameVersionTypeID": 3, + "name": "37.0.90", + "slug": "37-0-90" + }, + { + "id": 8732, + "gameVersionTypeID": 3, + "name": "37.0.89", + "slug": "37-0-89" + }, + { + "id": 8733, + "gameVersionTypeID": 73247, + "name": "0.11.7", + "slug": "0-11-7" + }, + { + "id": 8734, + "gameVersionTypeID": 73247, + "name": "0.12.0", + "slug": "0-12-0" + }, + { + "id": 8735, + "gameVersionTypeID": 73247, + "name": "0.12.1", + "slug": "0-12-1" + }, + { + "id": 8738, + "gameVersionTypeID": 3, + "name": "37.0.91", + "slug": "37-0-91" + }, + { + "id": 8739, + "gameVersionTypeID": 3, + "name": "37.0.95", + "slug": "37-0-95" + }, + { + "id": 8740, + "gameVersionTypeID": 3, + "name": "37.0.94", + "slug": "37-0-94" + }, + { + "id": 8743, + "gameVersionTypeID": 3, + "name": "37.0.97", + "slug": "37-0-97" + }, + { + "id": 8753, + "gameVersionTypeID": 3, + "name": "37.0.98", + "slug": "37-0-98" + }, + { + "id": 8754, + "gameVersionTypeID": 3, + "name": "37.0.103", + "slug": "37-0-103" + }, + { + "id": 8755, + "gameVersionTypeID": 3, + "name": "37.0.102", + "slug": "37-0-102" + }, + { + "id": 8762, + "gameVersionTypeID": 73247, + "name": "0.12.2", + "slug": "0-12-2" + }, + { + "id": 8763, + "gameVersionTypeID": 73247, + "name": "0.12.3", + "slug": "0-12-3" + }, + { + "id": 8765, + "gameVersionTypeID": 3, + "name": "37.0.104", + "slug": "37-0-104" + }, + { + "id": 8775, + "gameVersionTypeID": 3, + "name": "36.2.9", + "slug": "36-2-9" + }, + { + "id": 8788, + "gameVersionTypeID": 73247, + "name": "0.12.4", + "slug": "0-12-4" + }, + { + "id": 8789, + "gameVersionTypeID": 73247, + "name": "0.12.5", + "slug": "0-12-5" + }, + { + "id": 8790, + "gameVersionTypeID": 3, + "name": "37.0.107", + "slug": "37-0-107" + }, + { + "id": 8791, + "gameVersionTypeID": 3, + "name": "37.0.105", + "slug": "37-0-105" + }, + { + "id": 8795, + "gameVersionTypeID": 3, + "name": "37.0.108", + "slug": "37-0-108" + }, + { + "id": 8796, + "gameVersionTypeID": 3, + "name": "37.0.109", + "slug": "37-0-109" + }, + { + "id": 8799, + "gameVersionTypeID": 3, + "name": "36.2.11", + "slug": "36-2-11" + }, + { + "id": 8800, + "gameVersionTypeID": 3, + "name": "36.2.10", + "slug": "36-2-10" + }, + { + "id": 8801, + "gameVersionTypeID": 3, + "name": "36.2.14", + "slug": "36-2-14" + }, + { + "id": 8802, + "gameVersionTypeID": 3, + "name": "36.2.13", + "slug": "36-2-13" + }, + { + "id": 8803, + "gameVersionTypeID": 3, + "name": "36.2.12", + "slug": "36-2-12" + }, + { + "id": 8804, + "gameVersionTypeID": 3, + "name": "37.0.110", + "slug": "37-0-110" + }, + { + "id": 8805, + "gameVersionTypeID": 3, + "name": "36.2.16", + "slug": "36-2-16" + }, + { + "id": 8806, + "gameVersionTypeID": 3, + "name": "36.2.15", + "slug": "36-2-15" + }, + { + "id": 8807, + "gameVersionTypeID": 3, + "name": "37.0.111", + "slug": "37-0-111" + }, + { + "id": 8808, + "gameVersionTypeID": 3, + "name": "37.0.112", + "slug": "37-0-112" + }, + { + "id": 8810, + "gameVersionTypeID": 3, + "name": "36.2.18", + "slug": "36-2-18" + }, + { + "id": 8811, + "gameVersionTypeID": 3, + "name": "36.2.17", + "slug": "36-2-17" + }, + { + "id": 8815, + "gameVersionTypeID": 3, + "name": "37.0.116", + "slug": "37-0-116" + }, + { + "id": 8816, + "gameVersionTypeID": 3, + "name": "37.0.114", + "slug": "37-0-114" + }, + { + "id": 8817, + "gameVersionTypeID": 3, + "name": "37.0.113", + "slug": "37-0-113" + }, + { + "id": 8818, + "gameVersionTypeID": 3, + "name": "36.2.19", + "slug": "36-2-19" + }, + { + "id": 8819, + "gameVersionTypeID": 3, + "name": "37.0.117", + "slug": "37-0-117" + }, + { + "id": 8820, + "gameVersionTypeID": 3, + "name": "37.0.118", + "slug": "37-0-118" + }, + { + "id": 8821, + "gameVersionTypeID": 3, + "name": "37.0.119", + "slug": "37-0-119" + }, + { + "id": 8822, + "gameVersionTypeID": 3, + "name": "37.0.120", + "slug": "37-0-120" + }, + { + "id": 8823, + "gameVersionTypeID": 3, + "name": "37.0.121", + "slug": "37-0-121" + }, + { + "id": 8824, + "gameVersionTypeID": 3, + "name": "37.0.125", + "slug": "37-0-125" + }, + { + "id": 8825, + "gameVersionTypeID": 3, + "name": "37.0.123", + "slug": "37-0-123" + }, + { + "id": 8826, + "gameVersionTypeID": 3, + "name": "37.0.122", + "slug": "37-0-122" + }, + { + "id": 8827, + "gameVersionTypeID": 3, + "name": "37.0.126", + "slug": "37-0-126" + }, + { + "id": 8830, + "gameVersionTypeID": 73250, + "name": "1.18", + "slug": "1-18" + }, + { + "id": 8831, + "gameVersionTypeID": 3, + "name": "37.1.0", + "slug": "37-1-0" + }, + { + "id": 8832, + "gameVersionTypeID": 3, + "name": "37.0.127", + "slug": "37-0-127" + }, + { + "id": 8833, + "gameVersionTypeID": 3, + "name": "38.0.0", + "slug": "38-0-0" + }, + { + "id": 8834, + "gameVersionTypeID": 73247, + "name": "0.12.6", + "slug": "0-12-6" + }, + { + "id": 8835, + "gameVersionTypeID": 3, + "name": "38.0.1", + "slug": "38-0-1" + }, + { + "id": 8836, + "gameVersionTypeID": 3, + "name": "38.0.2", + "slug": "38-0-2" + }, + { + "id": 8837, + "gameVersionTypeID": 3, + "name": "38.0.4", + "slug": "38-0-4" + }, + { + "id": 8838, + "gameVersionTypeID": 3, + "name": "38.0.3", + "slug": "38-0-3" + }, + { + "id": 8839, + "gameVersionTypeID": 3, + "name": "38.0.5", + "slug": "38-0-5" + }, + { + "id": 8840, + "gameVersionTypeID": 73247, + "name": "0.12.7", + "slug": "0-12-7" + }, + { + "id": 8841, + "gameVersionTypeID": 73247, + "name": "0.12.8", + "slug": "0-12-8" + }, + { + "id": 8842, + "gameVersionTypeID": 3, + "name": "38.0.6", + "slug": "38-0-6" + }, + { + "id": 8843, + "gameVersionTypeID": 3, + "name": "38.0.8", + "slug": "38-0-8" + }, + { + "id": 8844, + "gameVersionTypeID": 3, + "name": "38.0.10", + "slug": "38-0-10" + }, + { + "id": 8845, + "gameVersionTypeID": 3, + "name": "38.0.11", + "slug": "38-0-11" + }, + { + "id": 8846, + "gameVersionTypeID": 3, + "name": "38.0.12", + "slug": "38-0-12" + }, + { + "id": 8847, + "gameVersionTypeID": 3, + "name": "38.0.13", + "slug": "38-0-13" + }, + { + "id": 8848, + "gameVersionTypeID": 3, + "name": "38.0.14", + "slug": "38-0-14" + }, + { + "id": 8849, + "gameVersionTypeID": 1, + "name": "1.18", + "slug": "1-18" + }, + { + "id": 8850, + "gameVersionTypeID": 3, + "name": "38.0.15", + "slug": "38-0-15" + }, + { + "id": 8854, + "gameVersionTypeID": 3, + "name": "38.0.16", + "slug": "38-0-16" + }, + { + "id": 8856, + "gameVersionTypeID": 73247, + "name": "0.12.9", + "slug": "0-12-9" + }, + { + "id": 8857, + "gameVersionTypeID": 73250, + "name": "1.18.1", + "slug": "1-18-1" + }, + { + "id": 8858, + "gameVersionTypeID": 3, + "name": "38.0.17", + "slug": "38-0-17" + }, + { + "id": 8859, + "gameVersionTypeID": 3, + "name": "37.1.1", + "slug": "37-1-1" + }, + { + "id": 8860, + "gameVersionTypeID": 3, + "name": "36.2.20", + "slug": "36-2-20" + }, + { + "id": 8861, + "gameVersionTypeID": 3, + "name": "31.2.56", + "slug": "31-2-56" + }, + { + "id": 8862, + "gameVersionTypeID": 3, + "name": "28.2.25", + "slug": "28-2-25" + }, + { + "id": 8863, + "gameVersionTypeID": 3, + "name": "25.0.222", + "slug": "25-0-222" + }, + { + "id": 8864, + "gameVersionTypeID": 73247, + "name": "0.12.10", + "slug": "0-12-10" + }, + { + "id": 8865, + "gameVersionTypeID": 73247, + "name": "0.12.11", + "slug": "0-12-11" + }, + { + "id": 8866, + "gameVersionTypeID": 3, + "name": "39.0.0", + "slug": "39-0-0" + }, + { + "id": 8867, + "gameVersionTypeID": 3, + "name": "14.23.5.2859", + "slug": "14-23-5-2859" + }, + { + "id": 8868, + "gameVersionTypeID": 3, + "name": "14.23.5.2858", + "slug": "14-23-5-2858" + }, + { + "id": 8869, + "gameVersionTypeID": 3, + "name": "14.23.5.2857", + "slug": "14-23-5-2857" + }, + { + "id": 8870, + "gameVersionTypeID": 3, + "name": "14.23.5.2856", + "slug": "14-23-5-2856" + }, + { + "id": 8871, + "gameVersionTypeID": 3, + "name": "25.0.223", + "slug": "25-0-223" + }, + { + "id": 8872, + "gameVersionTypeID": 3, + "name": "31.2.57", + "slug": "31-2-57" + }, + { + "id": 8873, + "gameVersionTypeID": 3, + "name": "28.2.26", + "slug": "28-2-26" + }, + { + "id": 8874, + "gameVersionTypeID": 3, + "name": "14.23.5.2860", + "slug": "14-23-5-2860" + }, + { + "id": 8879, + "gameVersionTypeID": 3, + "name": "39.0.3", + "slug": "39-0-3" + }, + { + "id": 8880, + "gameVersionTypeID": 3, + "name": "39.0.2", + "slug": "39-0-2" + }, + { + "id": 8881, + "gameVersionTypeID": 3, + "name": "39.0.1", + "slug": "39-0-1" + }, + { + "id": 8882, + "gameVersionTypeID": 3, + "name": "39.0.5", + "slug": "39-0-5" + }, + { + "id": 8883, + "gameVersionTypeID": 3, + "name": "39.0.4", + "slug": "39-0-4" + }, + { + "id": 8885, + "gameVersionTypeID": 3, + "name": "36.2.22", + "slug": "36-2-22" + }, + { + "id": 8886, + "gameVersionTypeID": 3, + "name": "36.2.21", + "slug": "36-2-21" + }, + { + "id": 8887, + "gameVersionTypeID": 73247, + "name": "0.12.12", + "slug": "0-12-12" + }, + { + "id": 8893, + "gameVersionTypeID": 3, + "name": "39.0.6", + "slug": "39-0-6" + }, + { + "id": 8894, + "gameVersionTypeID": 3, + "name": "39.0.7", + "slug": "39-0-7" + }, + { + "id": 8896, + "gameVersionTypeID": 3, + "name": "39.0.8", + "slug": "39-0-8" + }, + { + "id": 8897, + "gameVersionTypeID": 1, + "name": "1.18.1", + "slug": "1-18-1" + }, + { + "id": 8898, + "gameVersionTypeID": 3, + "name": "39.0.9", + "slug": "39-0-9" + }, + { + "id": 8899, + "gameVersionTypeID": 615, + "name": "1.18", + "slug": "1-18" + }, + { + "id": 8900, + "gameVersionTypeID": 3, + "name": "39.0.10", + "slug": "39-0-10" + }, + { + "id": 8901, + "gameVersionTypeID": 3, + "name": "39.0.11", + "slug": "39-0-11" + }, + { + "id": 8902, + "gameVersionTypeID": 3, + "name": "36.2.23", + "slug": "36-2-23" + }, + { + "id": 8903, + "gameVersionTypeID": 3, + "name": "39.0.13", + "slug": "39-0-13" + }, + { + "id": 8904, + "gameVersionTypeID": 3, + "name": "39.0.12", + "slug": "39-0-12" + }, + { + "id": 8905, + "gameVersionTypeID": 3, + "name": "39.0.14", + "slug": "39-0-14" + }, + { + "id": 8906, + "gameVersionTypeID": 3, + "name": "39.0.16", + "slug": "39-0-16" + }, + { + "id": 8907, + "gameVersionTypeID": 3, + "name": "39.0.15", + "slug": "39-0-15" + }, + { + "id": 8908, + "gameVersionTypeID": 3, + "name": "39.0.17", + "slug": "39-0-17" + }, + { + "id": 8909, + "gameVersionTypeID": 3, + "name": "39.0.18", + "slug": "39-0-18" + }, + { + "id": 8911, + "gameVersionTypeID": 3, + "name": "39.0.19", + "slug": "39-0-19" + }, + { + "id": 8914, + "gameVersionTypeID": 3, + "name": "39.0.20", + "slug": "39-0-20" + }, + { + "id": 8915, + "gameVersionTypeID": 3, + "name": "39.0.22", + "slug": "39-0-22" + }, + { + "id": 8916, + "gameVersionTypeID": 3, + "name": "39.0.36", + "slug": "39-0-36" + }, + { + "id": 8918, + "gameVersionTypeID": 3, + "name": "39.0.40", + "slug": "39-0-40" + }, + { + "id": 8919, + "gameVersionTypeID": 3, + "name": "39.0.38", + "slug": "39-0-38" + }, + { + "id": 8920, + "gameVersionTypeID": 3, + "name": "39.0.37", + "slug": "39-0-37" + }, + { + "id": 8921, + "gameVersionTypeID": 3, + "name": "39.0.43", + "slug": "39-0-43" + }, + { + "id": 8922, + "gameVersionTypeID": 3, + "name": "39.0.44", + "slug": "39-0-44" + }, + { + "id": 8929, + "gameVersionTypeID": 3, + "name": "39.0.45", + "slug": "39-0-45" + }, + { + "id": 8930, + "gameVersionTypeID": 3, + "name": "39.0.50", + "slug": "39-0-50" + }, + { + "id": 8931, + "gameVersionTypeID": 3, + "name": "39.0.49", + "slug": "39-0-49" + }, + { + "id": 8932, + "gameVersionTypeID": 3, + "name": "39.0.48", + "slug": "39-0-48" + }, + { + "id": 8933, + "gameVersionTypeID": 3, + "name": "39.0.47", + "slug": "39-0-47" + }, + { + "id": 8934, + "gameVersionTypeID": 3, + "name": "39.0.46", + "slug": "39-0-46" + }, + { + "id": 8935, + "gameVersionTypeID": 3, + "name": "39.0.52", + "slug": "39-0-52" + }, + { + "id": 8936, + "gameVersionTypeID": 3, + "name": "39.0.51", + "slug": "39-0-51" + }, + { + "id": 8937, + "gameVersionTypeID": 3, + "name": "39.0.53", + "slug": "39-0-53" + }, + { + "id": 8938, + "gameVersionTypeID": 3, + "name": "39.0.54", + "slug": "39-0-54" + }, + { + "id": 8939, + "gameVersionTypeID": 3, + "name": "39.0.55", + "slug": "39-0-55" + }, + { + "id": 8940, + "gameVersionTypeID": 3, + "name": "39.0.56", + "slug": "39-0-56" + }, + { + "id": 8941, + "gameVersionTypeID": 3, + "name": "39.0.57", + "slug": "39-0-57" + }, + { + "id": 8942, + "gameVersionTypeID": 3, + "name": "39.0.58", + "slug": "39-0-58" + }, + { + "id": 8943, + "gameVersionTypeID": 3, + "name": "39.0.59", + "slug": "39-0-59" + }, + { + "id": 8947, + "gameVersionTypeID": 3, + "name": "39.0.60", + "slug": "39-0-60" + }, + { + "id": 8948, + "gameVersionTypeID": 3, + "name": "39.0.62", + "slug": "39-0-62" + }, + { + "id": 8949, + "gameVersionTypeID": 3, + "name": "39.0.61", + "slug": "39-0-61" + }, + { + "id": 8950, + "gameVersionTypeID": 3, + "name": "39.0.63", + "slug": "39-0-63" + }, + { + "id": 8951, + "gameVersionTypeID": 3, + "name": "39.0.64", + "slug": "39-0-64" + }, + { + "id": 8952, + "gameVersionTypeID": 3, + "name": "36.2.26", + "slug": "36-2-26" + }, + { + "id": 8953, + "gameVersionTypeID": 3, + "name": "36.2.25", + "slug": "36-2-25" + }, + { + "id": 8955, + "gameVersionTypeID": 3, + "name": "39.0.65", + "slug": "39-0-65" + }, + { + "id": 8956, + "gameVersionTypeID": 3, + "name": "39.0.66", + "slug": "39-0-66" + }, + { + "id": 8959, + "gameVersionTypeID": 3, + "name": "39.0.70", + "slug": "39-0-70" + }, + { + "id": 8960, + "gameVersionTypeID": 3, + "name": "39.0.69", + "slug": "39-0-69" + }, + { + "id": 8961, + "gameVersionTypeID": 3, + "name": "39.0.68", + "slug": "39-0-68" + }, + { + "id": 8962, + "gameVersionTypeID": 3, + "name": "39.0.67", + "slug": "39-0-67" + }, + { + "id": 8963, + "gameVersionTypeID": 73247, + "name": "0.13.0", + "slug": "0-13-0" + }, + { + "id": 8964, + "gameVersionTypeID": 73247, + "name": "0.13.1", + "slug": "0-13-1" + }, + { + "id": 8965, + "gameVersionTypeID": 3, + "name": "39.0.75", + "slug": "39-0-75" + }, + { + "id": 8966, + "gameVersionTypeID": 3, + "name": "39.0.74", + "slug": "39-0-74" + }, + { + "id": 8967, + "gameVersionTypeID": 3, + "name": "39.0.73", + "slug": "39-0-73" + }, + { + "id": 8968, + "gameVersionTypeID": 3, + "name": "39.0.72", + "slug": "39-0-72" + }, + { + "id": 8969, + "gameVersionTypeID": 3, + "name": "39.0.71", + "slug": "39-0-71" + }, + { + "id": 8979, + "gameVersionTypeID": 73247, + "name": "0.13.2", + "slug": "0-13-2" + }, + { + "id": 8980, + "gameVersionTypeID": 3, + "name": "39.0.76", + "slug": "39-0-76" + }, + { + "id": 8981, + "gameVersionTypeID": 3, + "name": "36.2.28", + "slug": "36-2-28" + }, + { + "id": 8982, + "gameVersionTypeID": 3, + "name": "36.2.27", + "slug": "36-2-27" + }, + { + "id": 8984, + "gameVersionTypeID": 3, + "name": "39.0.77", + "slug": "39-0-77" + }, + { + "id": 8986, + "gameVersionTypeID": 3, + "name": "39.0.79", + "slug": "39-0-79" + }, + { + "id": 8987, + "gameVersionTypeID": 3, + "name": "39.0.78", + "slug": "39-0-78" + }, + { + "id": 8993, + "gameVersionTypeID": 73407, + "name": "1.19-Snapshot", + "slug": "1-19-snapshot" + }, + { + "id": 8994, + "gameVersionTypeID": 73247, + "name": "0.13.3", + "slug": "0-13-3" + }, + { + "id": 8995, + "gameVersionTypeID": 3, + "name": "39.0.82", + "slug": "39-0-82" + }, + { + "id": 8996, + "gameVersionTypeID": 3, + "name": "39.0.81", + "slug": "39-0-81" + }, + { + "id": 8997, + "gameVersionTypeID": 3, + "name": "39.0.80", + "slug": "39-0-80" + }, + { + "id": 8998, + "gameVersionTypeID": 3, + "name": "39.0.84", + "slug": "39-0-84" + }, + { + "id": 8999, + "gameVersionTypeID": 3, + "name": "39.0.83", + "slug": "39-0-83" + }, + { + "id": 9000, + "gameVersionTypeID": 3, + "name": "39.0.85", + "slug": "39-0-85" + }, + { + "id": 9002, + "gameVersionTypeID": 3, + "name": "39.0.87", + "slug": "39-0-87" + }, + { + "id": 9003, + "gameVersionTypeID": 3, + "name": "39.0.86", + "slug": "39-0-86" + }, + { + "id": 9004, + "gameVersionTypeID": 3, + "name": "36.2.29", + "slug": "36-2-29" + }, + { + "id": 9005, + "gameVersionTypeID": 3, + "name": "39.0.88", + "slug": "39-0-88" + }, + { + "id": 9008, + "gameVersionTypeID": 73250, + "name": "1.18.2", + "slug": "1-18-2" + }, + { + "id": 9009, + "gameVersionTypeID": 3, + "name": "39.0.89", + "slug": "39-0-89" + }, + { + "id": 9010, + "gameVersionTypeID": 3, + "name": "39.0.90", + "slug": "39-0-90" + }, + { + "id": 9011, + "gameVersionTypeID": 3, + "name": "39.1.0", + "slug": "39-1-0" + }, + { + "id": 9012, + "gameVersionTypeID": 3, + "name": "39.1.1", + "slug": "39-1-1" + }, + { + "id": 9013, + "gameVersionTypeID": 3, + "name": "39.1.2", + "slug": "39-1-2" + }, + { + "id": 9014, + "gameVersionTypeID": 3, + "name": "40.0.0", + "slug": "40-0-0" + }, + { + "id": 9015, + "gameVersionTypeID": 3, + "name": "40.0.1", + "slug": "40-0-1" + }, + { + "id": 9016, + "gameVersionTypeID": 1, + "name": "1.18.2", + "slug": "1-18-2" + }, + { + "id": 9018, + "gameVersionTypeID": 3, + "name": "40.0.2", + "slug": "40-0-2" + }, + { + "id": 9021, + "gameVersionTypeID": 3, + "name": "40.0.3", + "slug": "40-0-3" + }, + { + "id": 9022, + "gameVersionTypeID": 3, + "name": "40.0.4", + "slug": "40-0-4" + }, + { + "id": 9023, + "gameVersionTypeID": 3, + "name": "40.0.5", + "slug": "40-0-5" + }, + { + "id": 9024, + "gameVersionTypeID": 3, + "name": "40.0.12", + "slug": "40-0-12" + }, + { + "id": 9025, + "gameVersionTypeID": 3, + "name": "40.0.11", + "slug": "40-0-11" + }, + { + "id": 9026, + "gameVersionTypeID": 3, + "name": "40.0.10", + "slug": "40-0-10" + }, + { + "id": 9027, + "gameVersionTypeID": 3, + "name": "40.0.9", + "slug": "40-0-9" + }, + { + "id": 9028, + "gameVersionTypeID": 3, + "name": "40.0.8", + "slug": "40-0-8" + }, + { + "id": 9029, + "gameVersionTypeID": 3, + "name": "40.0.7", + "slug": "40-0-7" + }, + { + "id": 9030, + "gameVersionTypeID": 3, + "name": "40.0.6", + "slug": "40-0-6" + }, + { + "id": 9031, + "gameVersionTypeID": 3, + "name": "36.2.30", + "slug": "36-2-30" + }, + { + "id": 9034, + "gameVersionTypeID": 3, + "name": "40.0.13", + "slug": "40-0-13" + }, + { + "id": 9035, + "gameVersionTypeID": 3, + "name": "36.2.31", + "slug": "36-2-31" + }, + { + "id": 9036, + "gameVersionTypeID": 3, + "name": "40.0.15", + "slug": "40-0-15" + }, + { + "id": 9037, + "gameVersionTypeID": 3, + "name": "40.0.14", + "slug": "40-0-14" + }, + { + "id": 9041, + "gameVersionTypeID": 3, + "name": "40.0.16", + "slug": "40-0-16" + }, + { + "id": 9042, + "gameVersionTypeID": 3, + "name": "40.0.17", + "slug": "40-0-17" + }, + { + "id": 9043, + "gameVersionTypeID": 3, + "name": "40.0.18", + "slug": "40-0-18" + }, + { + "id": 9044, + "gameVersionTypeID": 3, + "name": "40.0.19", + "slug": "40-0-19" + }, + { + "id": 9045, + "gameVersionTypeID": 3, + "name": "40.0.21", + "slug": "40-0-21" + }, + { + "id": 9046, + "gameVersionTypeID": 3, + "name": "40.0.20", + "slug": "40-0-20" + }, + { + "id": 9047, + "gameVersionTypeID": 3, + "name": "40.0.22", + "slug": "40-0-22" + }, + { + "id": 9050, + "gameVersionTypeID": 3, + "name": "40.0.24", + "slug": "40-0-24" + }, + { + "id": 9051, + "gameVersionTypeID": 3, + "name": "40.0.23", + "slug": "40-0-23" + }, + { + "id": 9052, + "gameVersionTypeID": 3, + "name": "36.2.33", + "slug": "36-2-33" + }, + { + "id": 9053, + "gameVersionTypeID": 3, + "name": "36.2.32", + "slug": "36-2-32" + }, + { + "id": 9055, + "gameVersionTypeID": 3, + "name": "40.0.25", + "slug": "40-0-25" + }, + { + "id": 9056, + "gameVersionTypeID": 3, + "name": "40.0.28", + "slug": "40-0-28" + }, + { + "id": 9057, + "gameVersionTypeID": 3, + "name": "40.0.27", + "slug": "40-0-27" + }, + { + "id": 9058, + "gameVersionTypeID": 3, + "name": "40.0.26", + "slug": "40-0-26" + }, + { + "id": 9059, + "gameVersionTypeID": 3, + "name": "40.0.31", + "slug": "40-0-31" + }, + { + "id": 9060, + "gameVersionTypeID": 3, + "name": "40.0.30", + "slug": "40-0-30" + }, + { + "id": 9061, + "gameVersionTypeID": 3, + "name": "40.0.29", + "slug": "40-0-29" + }, + { + "id": 9062, + "gameVersionTypeID": 3, + "name": "40.0.32", + "slug": "40-0-32" + }, + { + "id": 9067, + "gameVersionTypeID": 3, + "name": "40.0.34", + "slug": "40-0-34" + }, + { + "id": 9068, + "gameVersionTypeID": 3, + "name": "40.0.33", + "slug": "40-0-33" + }, + { + "id": 9069, + "gameVersionTypeID": 3, + "name": "40.0.35", + "slug": "40-0-35" + }, + { + "id": 9070, + "gameVersionTypeID": 3, + "name": "40.0.36", + "slug": "40-0-36" + }, + { + "id": 9071, + "gameVersionTypeID": 3, + "name": "40.0.40", + "slug": "40-0-40" + }, + { + "id": 9072, + "gameVersionTypeID": 3, + "name": "40.0.39", + "slug": "40-0-39" + }, + { + "id": 9073, + "gameVersionTypeID": 3, + "name": "40.0.38", + "slug": "40-0-38" + }, + { + "id": 9075, + "gameVersionTypeID": 3, + "name": "40.0.41", + "slug": "40-0-41" + }, + { + "id": 9077, + "gameVersionTypeID": 3, + "name": "40.0.42", + "slug": "40-0-42" + }, + { + "id": 9078, + "gameVersionTypeID": 3, + "name": "40.0.43", + "slug": "40-0-43" + }, + { + "id": 9079, + "gameVersionTypeID": 3, + "name": "40.0.44", + "slug": "40-0-44" + }, + { + "id": 9080, + "gameVersionTypeID": 3, + "name": "40.0.45", + "slug": "40-0-45" + }, + { + "id": 9082, + "gameVersionTypeID": 3, + "name": "40.0.46", + "slug": "40-0-46" + }, + { + "id": 9083, + "gameVersionTypeID": 3, + "name": "36.2.34", + "slug": "36-2-34" + }, + { + "id": 9085, + "gameVersionTypeID": 3, + "name": "40.0.48", + "slug": "40-0-48" + }, + { + "id": 9086, + "gameVersionTypeID": 3, + "name": "40.0.47", + "slug": "40-0-47" + }, + { + "id": 9087, + "gameVersionTypeID": 3, + "name": "40.0.49", + "slug": "40-0-49" + }, + { + "id": 9088, + "gameVersionTypeID": 3, + "name": "40.0.52", + "slug": "40-0-52" + }, + { + "id": 9089, + "gameVersionTypeID": 3, + "name": "40.0.51", + "slug": "40-0-51" + }, + { + "id": 9091, + "gameVersionTypeID": 3, + "name": "40.0.54", + "slug": "40-0-54" + }, + { + "id": 9092, + "gameVersionTypeID": 3, + "name": "40.0.53", + "slug": "40-0-53" + }, + { + "id": 9093, + "gameVersionTypeID": 3, + "name": "40.1.0", + "slug": "40-1-0" + }, + { + "id": 9098, + "gameVersionTypeID": 73247, + "name": "0.14.0", + "slug": "0-14-0" + }, + { + "id": 9099, + "gameVersionTypeID": 73247, + "name": "0.14.1", + "slug": "0-14-1" + }, + { + "id": 9100, + "gameVersionTypeID": 73247, + "name": "0.14.2", + "slug": "0-14-2" + }, + { + "id": 9101, + "gameVersionTypeID": 73247, + "name": "0.14.3", + "slug": "0-14-3" + }, + { + "id": 9109, + "gameVersionTypeID": 73247, + "name": "0.14.4", + "slug": "0-14-4" + }, + { + "id": 9110, + "gameVersionTypeID": 3, + "name": "40.1.2", + "slug": "40-1-2" + }, + { + "id": 9111, + "gameVersionTypeID": 3, + "name": "40.1.1", + "slug": "40-1-1" + }, + { + "id": 9112, + "gameVersionTypeID": 3, + "name": "40.1.11", + "slug": "40-1-11" + }, + { + "id": 9113, + "gameVersionTypeID": 3, + "name": "40.1.10", + "slug": "40-1-10" + }, + { + "id": 9114, + "gameVersionTypeID": 3, + "name": "40.1.8", + "slug": "40-1-8" + }, + { + "id": 9115, + "gameVersionTypeID": 3, + "name": "40.1.6", + "slug": "40-1-6" + }, + { + "id": 9116, + "gameVersionTypeID": 3, + "name": "40.1.5", + "slug": "40-1-5" + }, + { + "id": 9117, + "gameVersionTypeID": 3, + "name": "40.1.4", + "slug": "40-1-4" + }, + { + "id": 9118, + "gameVersionTypeID": 3, + "name": "40.1.3", + "slug": "40-1-3" + }, + { + "id": 9119, + "gameVersionTypeID": 3, + "name": "40.1.12", + "slug": "40-1-12" + }, + { + "id": 9120, + "gameVersionTypeID": 3, + "name": "40.1.14", + "slug": "40-1-14" + }, + { + "id": 9121, + "gameVersionTypeID": 3, + "name": "40.1.13", + "slug": "40-1-13" + }, + { + "id": 9122, + "gameVersionTypeID": 3, + "name": "36.2.35", + "slug": "36-2-35" + }, + { + "id": 9123, + "gameVersionTypeID": 3, + "name": "40.1.15", + "slug": "40-1-15" + }, + { + "id": 9124, + "gameVersionTypeID": 3, + "name": "40.1.16", + "slug": "40-1-16" + }, + { + "id": 9127, + "gameVersionTypeID": 3, + "name": "40.1.17", + "slug": "40-1-17" + }, + { + "id": 9128, + "gameVersionTypeID": 3, + "name": "40.1.18", + "slug": "40-1-18" + }, + { + "id": 9129, + "gameVersionTypeID": 3, + "name": "40.1.19", + "slug": "40-1-19" + }, + { + "id": 9131, + "gameVersionTypeID": 73247, + "name": "0.14.5", + "slug": "0-14-5" + }, + { + "id": 9140, + "gameVersionTypeID": 3, + "name": "40.1.20", + "slug": "40-1-20" + }, + { + "id": 9144, + "gameVersionTypeID": 73247, + "name": "0.14.6", + "slug": "0-14-6" + }, + { + "id": 9145, + "gameVersionTypeID": 3, + "name": "40.1.21", + "slug": "40-1-21" + }, + { + "id": 9146, + "gameVersionTypeID": 3, + "name": "40.1.22", + "slug": "40-1-22" + }, + { + "id": 9148, + "gameVersionTypeID": 3, + "name": "40.1.23", + "slug": "40-1-23" + }, + { + "id": 9150, + "gameVersionTypeID": 3, + "name": "40.1.25", + "slug": "40-1-25" + }, + { + "id": 9151, + "gameVersionTypeID": 3, + "name": "40.1.24", + "slug": "40-1-24" + }, + { + "id": 9153, + "gameVersionTypeID": 68441, + "name": "Quilt", + "slug": "quilt" + }, + { + "id": 9159, + "gameVersionTypeID": 3, + "name": "40.1.30", + "slug": "40-1-30" + }, + { + "id": 9160, + "gameVersionTypeID": 3, + "name": "40.1.29", + "slug": "40-1-29" + }, + { + "id": 9161, + "gameVersionTypeID": 3, + "name": "40.1.28", + "slug": "40-1-28" + }, + { + "id": 9162, + "gameVersionTypeID": 3, + "name": "40.1.27", + "slug": "40-1-27" + }, + { + "id": 9163, + "gameVersionTypeID": 3, + "name": "40.1.26", + "slug": "40-1-26" + }, + { + "id": 9166, + "gameVersionTypeID": 3, + "name": "40.1.31", + "slug": "40-1-31" + }, + { + "id": 9177, + "gameVersionTypeID": 3, + "name": "40.1.44", + "slug": "40-1-44" + }, + { + "id": 9178, + "gameVersionTypeID": 3, + "name": "40.1.41", + "slug": "40-1-41" + }, + { + "id": 9179, + "gameVersionTypeID": 3, + "name": "40.1.36", + "slug": "40-1-36" + }, + { + "id": 9180, + "gameVersionTypeID": 3, + "name": "40.1.35", + "slug": "40-1-35" + }, + { + "id": 9181, + "gameVersionTypeID": 3, + "name": "40.1.34", + "slug": "40-1-34" + }, + { + "id": 9182, + "gameVersionTypeID": 3, + "name": "40.1.45", + "slug": "40-1-45" + }, + { + "id": 9183, + "gameVersionTypeID": 3, + "name": "40.1.46", + "slug": "40-1-46" + }, + { + "id": 9184, + "gameVersionTypeID": 3, + "name": "40.1.47", + "slug": "40-1-47" + }, + { + "id": 9186, + "gameVersionTypeID": 73407, + "name": "1.19", + "slug": "1-19" + }, + { + "id": 9187, + "gameVersionTypeID": 3, + "name": "40.1.48", + "slug": "40-1-48" + }, + { + "id": 9188, + "gameVersionTypeID": 3, + "name": "41.0.1", + "slug": "41-0-1" + }, + { + "id": 9189, + "gameVersionTypeID": 615, + "name": "1.19", + "slug": "1-19" + }, + { + "id": 9190, + "gameVersionTypeID": 1, + "name": "1.19", + "slug": "1-19" + }, + { + "id": 9191, + "gameVersionTypeID": 3, + "name": "41.0.4", + "slug": "41-0-4" + }, + { + "id": 9192, + "gameVersionTypeID": 3, + "name": "41.0.3", + "slug": "41-0-3" + }, + { + "id": 9193, + "gameVersionTypeID": 3, + "name": "41.0.2", + "slug": "41-0-2" + }, + { + "id": 9194, + "gameVersionTypeID": 3, + "name": "41.0.5", + "slug": "41-0-5" + }, + { + "id": 9195, + "gameVersionTypeID": 73247, + "name": "0.14.7", + "slug": "0-14-7" + }, + { + "id": 9196, + "gameVersionTypeID": 3, + "name": "41.0.12", + "slug": "41-0-12" + }, + { + "id": 9197, + "gameVersionTypeID": 3, + "name": "41.0.11", + "slug": "41-0-11" + }, + { + "id": 9198, + "gameVersionTypeID": 3, + "name": "41.0.9", + "slug": "41-0-9" + }, + { + "id": 9199, + "gameVersionTypeID": 3, + "name": "41.0.7", + "slug": "41-0-7" + }, + { + "id": 9200, + "gameVersionTypeID": 3, + "name": "41.0.14", + "slug": "41-0-14" + }, + { + "id": 9201, + "gameVersionTypeID": 3, + "name": "41.0.13", + "slug": "41-0-13" + }, + { + "id": 9202, + "gameVersionTypeID": 3, + "name": "40.1.51", + "slug": "40-1-51" + }, + { + "id": 9203, + "gameVersionTypeID": 3, + "name": "41.0.15", + "slug": "41-0-15" + }, + { + "id": 9204, + "gameVersionTypeID": 3, + "name": "41.0.16", + "slug": "41-0-16" + }, + { + "id": 9205, + "gameVersionTypeID": 3, + "name": "41.0.17", + "slug": "41-0-17" + }, + { + "id": 9206, + "gameVersionTypeID": 3, + "name": "41.0.18", + "slug": "41-0-18" + }, + { + "id": 9207, + "gameVersionTypeID": 3, + "name": "41.0.19", + "slug": "41-0-19" + }, + { + "id": 9208, + "gameVersionTypeID": 3, + "name": "41.0.22", + "slug": "41-0-22" + }, + { + "id": 9209, + "gameVersionTypeID": 3, + "name": "41.0.21", + "slug": "41-0-21" + }, + { + "id": 9210, + "gameVersionTypeID": 3, + "name": "41.0.20", + "slug": "41-0-20" + }, + { + "id": 9212, + "gameVersionTypeID": 3, + "name": "41.0.26", + "slug": "41-0-26" + }, + { + "id": 9213, + "gameVersionTypeID": 3, + "name": "41.0.25", + "slug": "41-0-25" + }, + { + "id": 9214, + "gameVersionTypeID": 3, + "name": "41.0.24", + "slug": "41-0-24" + }, + { + "id": 9215, + "gameVersionTypeID": 3, + "name": "41.0.27", + "slug": "41-0-27" + }, + { + "id": 9217, + "gameVersionTypeID": 3, + "name": "41.0.28", + "slug": "41-0-28" + }, + { + "id": 9218, + "gameVersionTypeID": 3, + "name": "41.0.30", + "slug": "41-0-30" + }, + { + "id": 9219, + "gameVersionTypeID": 3, + "name": "41.0.29", + "slug": "41-0-29" + }, + { + "id": 9221, + "gameVersionTypeID": 3, + "name": "41.0.32", + "slug": "41-0-32" + }, + { + "id": 9222, + "gameVersionTypeID": 3, + "name": "41.0.31", + "slug": "41-0-31" + }, + { + "id": 9223, + "gameVersionTypeID": 3, + "name": "41.0.33", + "slug": "41-0-33" + }, + { + "id": 9224, + "gameVersionTypeID": 3, + "name": "41.0.34", + "slug": "41-0-34" + }, + { + "id": 9225, + "gameVersionTypeID": 3, + "name": "41.0.35", + "slug": "41-0-35" + }, + { + "id": 9227, + "gameVersionTypeID": 3, + "name": "41.0.37", + "slug": "41-0-37" + }, + { + "id": 9228, + "gameVersionTypeID": 3, + "name": "41.0.36", + "slug": "41-0-36" + }, + { + "id": 9229, + "gameVersionTypeID": 3, + "name": "41.0.38", + "slug": "41-0-38" + }, + { + "id": 9230, + "gameVersionTypeID": 73247, + "name": "0.14.8", + "slug": "0-14-8" + }, + { + "id": 9231, + "gameVersionTypeID": 3, + "name": "41.0.42", + "slug": "41-0-42" + }, + { + "id": 9233, + "gameVersionTypeID": 3, + "name": "41.0.44", + "slug": "41-0-44" + }, + { + "id": 9234, + "gameVersionTypeID": 3, + "name": "41.0.43", + "slug": "41-0-43" + }, + { + "id": 9235, + "gameVersionTypeID": 3, + "name": "40.1.52", + "slug": "40-1-52" + }, + { + "id": 9236, + "gameVersionTypeID": 3, + "name": "41.0.45", + "slug": "41-0-45" + }, + { + "id": 9248, + "gameVersionTypeID": 3, + "name": "41.0.48", + "slug": "41-0-48" + }, + { + "id": 9249, + "gameVersionTypeID": 3, + "name": "41.0.47", + "slug": "41-0-47" + }, + { + "id": 9250, + "gameVersionTypeID": 3, + "name": "41.0.46", + "slug": "41-0-46" + }, + { + "id": 9251, + "gameVersionTypeID": 3, + "name": "41.0.61", + "slug": "41-0-61" + }, + { + "id": 9252, + "gameVersionTypeID": 3, + "name": "41.0.60", + "slug": "41-0-60" + }, + { + "id": 9253, + "gameVersionTypeID": 3, + "name": "41.0.57", + "slug": "41-0-57" + }, + { + "id": 9254, + "gameVersionTypeID": 3, + "name": "41.0.56", + "slug": "41-0-56" + }, + { + "id": 9255, + "gameVersionTypeID": 3, + "name": "41.0.54", + "slug": "41-0-54" + }, + { + "id": 9256, + "gameVersionTypeID": 3, + "name": "41.0.51", + "slug": "41-0-51" + }, + { + "id": 9257, + "gameVersionTypeID": 3, + "name": "41.0.50", + "slug": "41-0-50" + }, + { + "id": 9258, + "gameVersionTypeID": 3, + "name": "41.0.49", + "slug": "41-0-49" + }, + { + "id": 9259, + "gameVersionTypeID": 73407, + "name": "1.19.1", + "slug": "1-19-1" + }, + { + "id": 9260, + "gameVersionTypeID": 615, + "name": "1.19.1", + "slug": "1-19-1" + }, + { + "id": 9261, + "gameVersionTypeID": 1, + "name": "1.19.1", + "slug": "1-19-1" + }, + { + "id": 9262, + "gameVersionTypeID": 3, + "name": "41.0.62", + "slug": "41-0-62" + }, + { + "id": 9263, + "gameVersionTypeID": 3, + "name": "40.1.53", + "slug": "40-1-53" + }, + { + "id": 9280, + "gameVersionTypeID": 3, + "name": "40.1.54", + "slug": "40-1-54" + }, + { + "id": 9282, + "gameVersionTypeID": 3, + "name": "41.0.63", + "slug": "41-0-63" + }, + { + "id": 9287, + "gameVersionTypeID": 3, + "name": "41.0.64", + "slug": "41-0-64" + }, + { + "id": 9288, + "gameVersionTypeID": 3, + "name": "40.1.59", + "slug": "40-1-59" + }, + { + "id": 9289, + "gameVersionTypeID": 3, + "name": "40.1.57", + "slug": "40-1-57" + }, + { + "id": 9290, + "gameVersionTypeID": 3, + "name": "40.1.56", + "slug": "40-1-56" + }, + { + "id": 9291, + "gameVersionTypeID": 3, + "name": "40.1.55", + "slug": "40-1-55" + }, + { + "id": 9292, + "gameVersionTypeID": 3, + "name": "41.0.68", + "slug": "41-0-68" + }, + { + "id": 9293, + "gameVersionTypeID": 3, + "name": "41.0.67", + "slug": "41-0-67" + }, + { + "id": 9294, + "gameVersionTypeID": 3, + "name": "40.1.60", + "slug": "40-1-60" + }, + { + "id": 9295, + "gameVersionTypeID": 3, + "name": "41.0.78", + "slug": "41-0-78" + }, + { + "id": 9296, + "gameVersionTypeID": 3, + "name": "41.0.77", + "slug": "41-0-77" + }, + { + "id": 9297, + "gameVersionTypeID": 3, + "name": "41.0.76", + "slug": "41-0-76" + }, + { + "id": 9298, + "gameVersionTypeID": 3, + "name": "41.0.71", + "slug": "41-0-71" + }, + { + "id": 9299, + "gameVersionTypeID": 3, + "name": "41.0.70", + "slug": "41-0-70" + }, + { + "id": 9300, + "gameVersionTypeID": 3, + "name": "41.0.69", + "slug": "41-0-69" + }, + { + "id": 9301, + "gameVersionTypeID": 3, + "name": "41.0.80", + "slug": "41-0-80" + }, + { + "id": 9302, + "gameVersionTypeID": 3, + "name": "41.0.79", + "slug": "41-0-79" + }, + { + "id": 9303, + "gameVersionTypeID": 3, + "name": "41.0.85", + "slug": "41-0-85" + }, + { + "id": 9304, + "gameVersionTypeID": 3, + "name": "41.0.84", + "slug": "41-0-84" + }, + { + "id": 9305, + "gameVersionTypeID": 3, + "name": "41.0.83", + "slug": "41-0-83" + }, + { + "id": 9306, + "gameVersionTypeID": 3, + "name": "41.0.82", + "slug": "41-0-82" + }, + { + "id": 9307, + "gameVersionTypeID": 3, + "name": "41.0.81", + "slug": "41-0-81" + }, + { + "id": 9308, + "gameVersionTypeID": 3, + "name": "41.0.87", + "slug": "41-0-87" + }, + { + "id": 9309, + "gameVersionTypeID": 3, + "name": "41.0.86", + "slug": "41-0-86" + }, + { + "id": 9310, + "gameVersionTypeID": 3, + "name": "41.0.91", + "slug": "41-0-91" + }, + { + "id": 9311, + "gameVersionTypeID": 3, + "name": "41.0.88", + "slug": "41-0-88" + }, + { + "id": 9313, + "gameVersionTypeID": 3, + "name": "41.0.92", + "slug": "41-0-92" + }, + { + "id": 9314, + "gameVersionTypeID": 3, + "name": "41.0.93", + "slug": "41-0-93" + }, + { + "id": 9316, + "gameVersionTypeID": 3, + "name": "41.0.94", + "slug": "41-0-94" + }, + { + "id": 9318, + "gameVersionTypeID": 3, + "name": "41.0.96", + "slug": "41-0-96" + }, + { + "id": 9319, + "gameVersionTypeID": 3, + "name": "41.0.98", + "slug": "41-0-98" + }, + { + "id": 9321, + "gameVersionTypeID": 3, + "name": "41.0.99", + "slug": "41-0-99" + }, + { + "id": 9323, + "gameVersionTypeID": 3, + "name": "41.0.100", + "slug": "41-0-100" + }, + { + "id": 9324, + "gameVersionTypeID": 3, + "name": "40.1.61", + "slug": "40-1-61" + }, + { + "id": 9325, + "gameVersionTypeID": 3, + "name": "36.2.39", + "slug": "36-2-39" + }, + { + "id": 9326, + "gameVersionTypeID": 3, + "name": "40.1.67", + "slug": "40-1-67" + }, + { + "id": 9327, + "gameVersionTypeID": 3, + "name": "40.1.62", + "slug": "40-1-62" + }, + { + "id": 9328, + "gameVersionTypeID": 3, + "name": "40.1.68", + "slug": "40-1-68" + }, + { + "id": 9342, + "gameVersionTypeID": 3, + "name": "41.0.103", + "slug": "41-0-103" + }, + { + "id": 9343, + "gameVersionTypeID": 3, + "name": "41.0.104", + "slug": "41-0-104" + }, + { + "id": 9344, + "gameVersionTypeID": 3, + "name": "41.0.105", + "slug": "41-0-105" + }, + { + "id": 9345, + "gameVersionTypeID": 3, + "name": "41.0.106", + "slug": "41-0-106" + }, + { + "id": 9346, + "gameVersionTypeID": 3, + "name": "41.0.107", + "slug": "41-0-107" + }, + { + "id": 9348, + "gameVersionTypeID": 3, + "name": "41.0.109", + "slug": "41-0-109" + }, + { + "id": 9349, + "gameVersionTypeID": 3, + "name": "41.0.108", + "slug": "41-0-108" + }, + { + "id": 9350, + "gameVersionTypeID": 3, + "name": "41.0.110", + "slug": "41-0-110" + }, + { + "id": 9352, + "gameVersionTypeID": 3, + "name": "41.0.111", + "slug": "41-0-111" + }, + { + "id": 9353, + "gameVersionTypeID": 3, + "name": "41.0.113", + "slug": "41-0-113" + }, + { + "id": 9354, + "gameVersionTypeID": 3, + "name": "41.0.112", + "slug": "41-0-112" + }, + { + "id": 9355, + "gameVersionTypeID": 3, + "name": "41.1.0", + "slug": "41-1-0" + }, + { + "id": 9356, + "gameVersionTypeID": 3, + "name": "42.0.0", + "slug": "42-0-0" + }, + { + "id": 9357, + "gameVersionTypeID": 3, + "name": "42.0.1", + "slug": "42-0-1" + }, + { + "id": 9363, + "gameVersionTypeID": 3, + "name": "42.0.2", + "slug": "42-0-2" + }, + { + "id": 9364, + "gameVersionTypeID": 3, + "name": "40.1.69", + "slug": "40-1-69" + }, + { + "id": 9365, + "gameVersionTypeID": 3, + "name": "42.0.3", + "slug": "42-0-3" + }, + { + "id": 9366, + "gameVersionTypeID": 73407, + "name": "1.19.2", + "slug": "1-19-2" + }, + { + "id": 9367, + "gameVersionTypeID": 3, + "name": "42.0.4", + "slug": "42-0-4" + }, + { + "id": 9368, + "gameVersionTypeID": 3, + "name": "42.0.9", + "slug": "42-0-9" + }, + { + "id": 9369, + "gameVersionTypeID": 3, + "name": "42.0.8", + "slug": "42-0-8" + }, + { + "id": 9370, + "gameVersionTypeID": 3, + "name": "42.0.5", + "slug": "42-0-5" + }, + { + "id": 9371, + "gameVersionTypeID": 3, + "name": "43.0.0", + "slug": "43-0-0" + }, + { + "id": 9374, + "gameVersionTypeID": 73247, + "name": "0.14.9", + "slug": "0-14-9" + }, + { + "id": 9375, + "gameVersionTypeID": 3, + "name": "43.0.1", + "slug": "43-0-1" + }, + { + "id": 9376, + "gameVersionTypeID": 3, + "name": "43.0.2", + "slug": "43-0-2" + }, + { + "id": 9377, + "gameVersionTypeID": 3, + "name": "40.1.73", + "slug": "40-1-73" + }, + { + "id": 9378, + "gameVersionTypeID": 3, + "name": "40.1.71", + "slug": "40-1-71" + }, + { + "id": 9379, + "gameVersionTypeID": 3, + "name": "40.1.70", + "slug": "40-1-70" + }, + { + "id": 9381, + "gameVersionTypeID": 3, + "name": "43.0.7", + "slug": "43-0-7" + }, + { + "id": 9382, + "gameVersionTypeID": 3, + "name": "43.0.5", + "slug": "43-0-5" + }, + { + "id": 9383, + "gameVersionTypeID": 3, + "name": "43.0.4", + "slug": "43-0-4" + }, + { + "id": 9384, + "gameVersionTypeID": 3, + "name": "43.0.3", + "slug": "43-0-3" + }, + { + "id": 9404, + "gameVersionTypeID": 3, + "name": "43.0.8", + "slug": "43-0-8" + }, + { + "id": 9408, + "gameVersionTypeID": 3, + "name": "43.0.11", + "slug": "43-0-11" + }, + { + "id": 9409, + "gameVersionTypeID": 3, + "name": "43.0.10", + "slug": "43-0-10" + }, + { + "id": 9444, + "gameVersionTypeID": 3, + "name": "43.0.12", + "slug": "43-0-12" + }, + { + "id": 9445, + "gameVersionTypeID": 3, + "name": "43.0.18", + "slug": "43-0-18" + }, + { + "id": 9446, + "gameVersionTypeID": 3, + "name": "43.0.17", + "slug": "43-0-17" + }, + { + "id": 9447, + "gameVersionTypeID": 3, + "name": "43.0.16", + "slug": "43-0-16" + }, + { + "id": 9448, + "gameVersionTypeID": 3, + "name": "43.0.15", + "slug": "43-0-15" + }, + { + "id": 9449, + "gameVersionTypeID": 3, + "name": "43.0.13", + "slug": "43-0-13" + }, + { + "id": 9450, + "gameVersionTypeID": 3, + "name": "43.0.19", + "slug": "43-0-19" + }, + { + "id": 9451, + "gameVersionTypeID": 3, + "name": "43.0.21", + "slug": "43-0-21" + }, + { + "id": 9452, + "gameVersionTypeID": 3, + "name": "43.0.20", + "slug": "43-0-20" + }, + { + "id": 9453, + "gameVersionTypeID": 3, + "name": "43.1.1", + "slug": "43-1-1" + }, + { + "id": 9454, + "gameVersionTypeID": 3, + "name": "43.1.0", + "slug": "43-1-0" + }, + { + "id": 9455, + "gameVersionTypeID": 3, + "name": "43.0.22", + "slug": "43-0-22" + }, + { + "id": 9462, + "gameVersionTypeID": 3, + "name": "43.1.2", + "slug": "43-1-2" + }, + { + "id": 9464, + "gameVersionTypeID": 3, + "name": "43.1.3", + "slug": "43-1-3" + }, + { + "id": 9467, + "gameVersionTypeID": 3, + "name": "40.1.74", + "slug": "40-1-74" + }, + { + "id": 9474, + "gameVersionTypeID": 3, + "name": "43.1.13", + "slug": "43-1-13" + }, + { + "id": 9475, + "gameVersionTypeID": 3, + "name": "43.1.12", + "slug": "43-1-12" + }, + { + "id": 9476, + "gameVersionTypeID": 3, + "name": "43.1.10", + "slug": "43-1-10" + }, + { + "id": 9477, + "gameVersionTypeID": 3, + "name": "43.1.7", + "slug": "43-1-7" + }, + { + "id": 9478, + "gameVersionTypeID": 3, + "name": "43.1.4", + "slug": "43-1-4" + }, + { + "id": 9479, + "gameVersionTypeID": 3, + "name": "40.1.76", + "slug": "40-1-76" + }, + { + "id": 9480, + "gameVersionTypeID": 3, + "name": "40.1.75", + "slug": "40-1-75" + }, + { + "id": 9481, + "gameVersionTypeID": 3, + "name": "43.1.15", + "slug": "43-1-15" + }, + { + "id": 9482, + "gameVersionTypeID": 3, + "name": "43.1.14", + "slug": "43-1-14" + }, + { + "id": 9486, + "gameVersionTypeID": 3, + "name": "43.1.16", + "slug": "43-1-16" + }, + { + "id": 9496, + "gameVersionTypeID": 3, + "name": "43.1.17", + "slug": "43-1-17" + }, + { + "id": 9497, + "gameVersionTypeID": 3, + "name": "43.1.24", + "slug": "43-1-24" + }, + { + "id": 9498, + "gameVersionTypeID": 3, + "name": "43.1.23", + "slug": "43-1-23" + }, + { + "id": 9499, + "gameVersionTypeID": 3, + "name": "40.1.79", + "slug": "40-1-79" + }, + { + "id": 9500, + "gameVersionTypeID": 3, + "name": "40.1.78", + "slug": "40-1-78" + }, + { + "id": 9503, + "gameVersionTypeID": 3, + "name": "43.1.25", + "slug": "43-1-25" + }, + { + "id": 9504, + "gameVersionTypeID": 3, + "name": "40.1.80", + "slug": "40-1-80" + }, + { + "id": 9512, + "gameVersionTypeID": 3, + "name": "43.1.27", + "slug": "43-1-27" + }, + { + "id": 9513, + "gameVersionTypeID": 3, + "name": "43.1.26", + "slug": "43-1-26" + }, + { + "id": 9520, + "gameVersionTypeID": 3, + "name": "43.1.28", + "slug": "43-1-28" + }, + { + "id": 9522, + "gameVersionTypeID": 3, + "name": "43.1.29", + "slug": "43-1-29" + }, + { + "id": 9523, + "gameVersionTypeID": 3, + "name": "43.1.30", + "slug": "43-1-30" + }, + { + "id": 9527, + "gameVersionTypeID": 3, + "name": "43.1.32", + "slug": "43-1-32" + }, + { + "id": 9531, + "gameVersionTypeID": 3, + "name": "43.1.33", + "slug": "43-1-33" + } +] \ No newline at end of file diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index fa7e7e6ee..8f4748078 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -30,7 +30,7 @@ "mcpitanlibarch-common.mixins.json" ], "depends": { - "fabricloader": ">=0.14.9", + "fabricloader": "*", "minecraft": ">=1.18" } } diff --git a/gradle.properties b/gradle.properties index 4cab96902..26c14fc74 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.8-1.18 +mod_version=1.0.9-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api diff --git a/upload_curseforge.bat b/upload_curseforge.bat new file mode 100644 index 000000000..668dab2c9 --- /dev/null +++ b/upload_curseforge.bat @@ -0,0 +1,2 @@ +php upload_curseforge.php +pause \ No newline at end of file diff --git a/upload_curseforge.php b/upload_curseforge.php new file mode 100644 index 000000000..1699c8785 --- /dev/null +++ b/upload_curseforge.php @@ -0,0 +1,145 @@ + './common/build/libs/', + 'fabric' => './fabric/build/libs/', + 'forge' => './forge/build/libs/', +)); + +define('GAME_VERSIONS', array( + '1.16.5' => '1.16', + '1.17' => '1.17', + '1.18' => '1.18', + '1.19' => '1.19', +)); + +define('PLATFORM_FILE_MARK', array( +// 'common' => '', + 'fabric' => '-fabric', + 'forge' => '-forge', +)); + +$postData = array(); + +$ch = curl_init('https://minecraft.curseforge.com/api/game/version-types'); + +curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); +curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'X-Api-Token: 788ae0f4-ae9a-405f-be51-7988574a533a')); +curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); +$result = curl_exec($ch); + +$game_version_types_data = json_decode($result, true); + +curl_close($ch); + +//file_put_contents('curse_forge_game_version_types.json', json_encode($game_version_json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + +$postData = array(); + +$ch = curl_init('https://minecraft.curseforge.com/api/game/versions'); + +curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); +curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'X-Api-Token: 788ae0f4-ae9a-405f-be51-7988574a533a')); +curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); +$result = curl_exec($ch); + +$game_versions_data = json_decode($result, true); + +curl_close($ch); + +//file_put_contents('curse_forge_game_versions.json', json_encode($game_version_json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + +$CHANGE_LOG = CHANGE_LOG; + +foreach (DIRS as $type => $dir) { + + foreach (GAME_VERSIONS as $file_ver => $ver) { + $typeId = 0; + foreach ($game_version_types_data as $data) { + if ($data['name'] == 'Minecraft ' . $ver) { + $typeId = $data['id']; + } + } + + $version_id_list = array(); + foreach ($game_versions_data as $data) { + if ($data['gameVersionTypeID'] == $typeId) { + if (!str_ends_with($data['slug'], 'snapshot')) { + $version_id_list[] = $data['id']; + } + } + } + + $postData = array(); + + $releaseType = ($type === "fabric" ? 'release' : 'beta'); + $fabric_api = ''; + if ($type == 'fabric') { +$fabric_api = << './common/build/libs/', + 'fabric' => './fabric/build/libs/', + 'forge' => './forge/build/libs/', +)); + +define('GAME_VERSIONS', array( + '1.16.5' => '1.16', + '1.17' => '1.17', + '1.18' => '1.18', + '1.19' => '1.19', +)); + +define('PLATFORM_FILE_MARK', array( + 'common' => '', + 'fabric' => '-fabric', + 'forge' => '-forge', +)); + +foreach (DIRS as $type => $dir) { + + foreach (GAME_VERSIONS as $file_ver => $ver) { + + $postData = array(); + + $postData['group_id'] = 'ml.pkom'; + $postData['artifact_id'] = 'mcpitanlibarch-' . $type . '+' . $ver; + $postData['version'] = VERSION; + + $files = array( + $dir . 'mcpitanlibarch-' . VERSION . '-' . $file_ver . PLATFORM_FILE_MARK[$type] . '.jar', + $dir . 'mcpitanlibarch-' . VERSION . '-' . $file_ver . PLATFORM_FILE_MARK[$type] . '-sources.jar', + ); + + foreach ($files as $index => $file) { + $postData['upload[' . $index . ']'] = curl_file_create( + realpath($file), + mime_content_type($file), + basename($file) + ); + echo "Uploading '" . $file . "'\n"; + } + + $request = curl_init('http://localhost/maven/maven.php'); + curl_setopt($request, CURLOPT_POST, true); + curl_setopt($request, CURLOPT_POSTFIELDS, $postData); + curl_setopt($request, CURLOPT_RETURNTRANSFER, true); + $result = curl_exec($request); + + if ($result === false) { + error_log(curl_error($request)); + } + curl_close($request); + } +} + + From e82f6cc92d4866c9f9ca894b4a2769ef752ab006 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 31 Oct 2022 23:56:35 +0900 Subject: [PATCH 027/617] 1.0.10 --- .../api/client/SimpleHandledScreen.java | 11 ++-- .../mcpitanlibarch/test/ExampleGuiBlock.java | 31 +++++++++++ .../mcpitanlibarch/test/ExampleGuiItem.java | 28 ++++++++++ .../pkom/mcpitanlibarch/test/ExampleMod.java | 13 +++++ .../mcpitanlibarch/test/ExampleModClient.java | 9 ++++ .../mcpitanlibarch/test/ExampleScreen.java | 53 +++++++++++++++++++ .../test/ExampleScreenHandler.java | 18 +++++++ .../fabric/MCPitanLibarchFabric.java | 6 +++ .../forge/MCPitanLibarchForge.java | 9 +++- .../client/MCPitanLibarchForgeClient.java | 12 +++++ gradle.properties | 2 +- upload_maven.php | 8 +-- 12 files changed, 190 insertions(+), 10 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiBlock.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiItem.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleModClient.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java create mode 100644 forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 4793a4520..77ab09d6b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -1,16 +1,14 @@ package ml.pkom.mcpitanlibarch.api.client; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; -@Environment(EnvType.CLIENT) public abstract class SimpleHandledScreen extends HandledScreen { public SimpleHandledScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { super(handler, inventory, title); @@ -20,4 +18,11 @@ protected T addDrawableChild_compati return super.addDrawableChild(drawableElement); // addButton } + + @Override + protected void drawBackground(MatrixStack matrices, float delta, int mouseX, int mouseY) { + drawBackgroundOverride(matrices, delta, mouseX, mouseY); + } + + public abstract void drawBackgroundOverride(MatrixStack matrices, float delta, int mouseX, int mouseY); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiBlock.java new file mode 100644 index 000000000..d05211327 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiBlock.java @@ -0,0 +1,31 @@ +package ml.pkom.mcpitanlibarch.test; + +import ml.pkom.mcpitanlibarch.api.block.ExtendBlock; +import ml.pkom.mcpitanlibarch.api.event.block.BlockUseEvent; +import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.minecraft.block.BlockState; +import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.screen.SimpleNamedScreenHandlerFactory; +import net.minecraft.util.ActionResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ExampleGuiBlock extends ExtendBlock { + + public ExampleGuiBlock(Settings settings) { + super(settings); + } + + @Override + public ActionResult onRightClick(BlockUseEvent e) { + if (e.world.isClient) { + e.player.openGuiScreen(e.world, e.state, e.pos); + } + return ActionResult.SUCCESS; + } + + @Override + public NamedScreenHandlerFactory createScreenHandlerFactory(BlockState state, World world, BlockPos pos) { + return new SimpleNamedScreenHandlerFactory((i, playerInventory, playerEntity) -> new ExampleScreenHandler(i, playerInventory), TextUtil.literal("Example Title")); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiItem.java new file mode 100644 index 000000000..82870a54f --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiItem.java @@ -0,0 +1,28 @@ +package ml.pkom.mcpitanlibarch.test; + +import ml.pkom.mcpitanlibarch.api.event.item.ItemUseEvent; +import ml.pkom.mcpitanlibarch.api.item.ExtendItem; +import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.screen.SimpleNamedScreenHandlerFactory; +import net.minecraft.util.TypedActionResult; + +public class ExampleGuiItem extends ExtendItem { + + public ExampleGuiItem(Settings settings) { + super(settings); + } + + @Override + public TypedActionResult onRightClick(ItemUseEvent event) { + if (!event.world.isClient()) { + event.user.openGuiScreen(getFactory()); + } + return super.onRightClick(event); + } + + public static NamedScreenHandlerFactory getFactory() { + return new SimpleNamedScreenHandlerFactory((i, playerInventory, playerEntity) -> new ExampleScreenHandler(i, playerInventory), TextUtil.literal("Example Title")); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java index 588b13a35..1cb36856e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java @@ -8,6 +8,7 @@ import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.util.Identifier; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; @@ -28,10 +29,22 @@ public static Identifier id(String id) { public static ArchRegistry registry = ArchRegistry.createRegistry(MOD_ID); + public static RegistryEvent> supplierEXAMPLE_SCREENHANDLER = registry.registerScreenHandlerType(id("example_gui"), () -> new ScreenHandlerType<>(ExampleScreenHandler::new));; + public static void init() { registry.registerItem(id("example_item"), () -> new Item(new Item.Settings().group(ItemGroup.MISC))); RegistryEvent EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new Block(AbstractBlock.Settings.of(Material.STONE))); registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); + + + + registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new Item.Settings().group(ItemGroup.MISC))); + + + + RegistryEvent EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(AbstractBlock.Settings.of(Material.STONE))); + registry.registerItem(id("example_gui_block"), () -> new BlockItem(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); + registry.allRegister(); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleModClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleModClient.java new file mode 100644 index 000000000..6e727b788 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleModClient.java @@ -0,0 +1,9 @@ +package ml.pkom.mcpitanlibarch.test; + +import dev.architectury.registry.menu.MenuRegistry; + +public class ExampleModClient { + public static void init() { + MenuRegistry.registerScreenFactory(ExampleMod.supplierEXAMPLE_SCREENHANDLER.getOrNull(), ExampleScreen::new); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java new file mode 100644 index 000000000..0696ee689 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java @@ -0,0 +1,53 @@ +package ml.pkom.mcpitanlibarch.test; + +import ml.pkom.mcpitanlibarch.api.client.SimpleHandledScreen; +import ml.pkom.mcpitanlibarch.api.util.client.ScreenUtil; +import net.minecraft.client.gui.widget.TexturedButtonWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +public class ExampleScreen extends SimpleHandledScreen { + + public static Identifier GUI = new Identifier("textures/gui/container/blast_furnace.png"); + + public ExampleScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + @Override + protected void init() { + super.init(); + this.backgroundWidth = 176; + this.backgroundHeight = 166; + int x = (width - backgroundWidth) / 2; + int y = (height - backgroundHeight) / 2; + System.out.println("hogehogehoge1111"); + this.addDrawableChild_compatibility(new TexturedButtonWidget(0, 0, 30, 30, 0, 0, 16, GUI, (buttonWidget) -> { + System.out.println("hogehoge"); + })); + } + + @Override + public void drawBackgroundOverride(MatrixStack matrices, float delta, int mouseX, int mouseY) { + int x = (this.width - this.backgroundWidth) / 2; + int y = (this.height - this.backgroundHeight) / 2; + + ScreenUtil.setBackground(GUI); + drawTexture(matrices, x, y, 0, 0, this.backgroundWidth, this.backgroundHeight); + } + + @Override + protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { + super.drawForeground(matrices, mouseX, mouseY); + } + + @Override + public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + this.renderBackground(matrices); + super.render(matrices, mouseX, mouseY, delta); + this.drawMouseoverTooltip(matrices, mouseX, mouseY); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java new file mode 100644 index 000000000..ef10e2f3d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java @@ -0,0 +1,18 @@ +package ml.pkom.mcpitanlibarch.test; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; + +public class ExampleScreenHandler extends ScreenHandler { + + public ExampleScreenHandler(int i, PlayerInventory playerInventory) { + super(ExampleMod.supplierEXAMPLE_SCREENHANDLER.getOrNull(), i); + + } + + @Override + public boolean canUse(PlayerEntity player) { + return true; + } +} diff --git a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java b/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java index 9a7e82d3b..43c91610b 100644 --- a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java +++ b/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java @@ -1,11 +1,17 @@ package ml.pkom.mcpitanlibarch.fabric; import ml.pkom.mcpitanlibarch.MCPitanLibarch; +import ml.pkom.mcpitanlibarch.test.ExampleModClient; +import net.fabricmc.api.EnvType; import net.fabricmc.api.ModInitializer; +import net.fabricmc.loader.api.FabricLoader; public class MCPitanLibarchFabric implements ModInitializer { @Override public void onInitialize() { MCPitanLibarch.init(); + if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) + if (FabricLoader.getInstance().isDevelopmentEnvironment()) + ExampleModClient.init(); } } \ No newline at end of file diff --git a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java index a88692ebc..bcc7e2447 100644 --- a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java +++ b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java @@ -1,8 +1,10 @@ package ml.pkom.mcpitanlibarch.forge; +import dev.architectury.platform.Platform; import dev.architectury.platform.forge.EventBuses; import ml.pkom.mcpitanlibarch.MCPitanLibarch; import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; +import ml.pkom.mcpitanlibarch.forge.client.MCPitanLibarchForgeClient; import ml.pkom.mcpitanlibarch.test.ExampleMod; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @@ -12,9 +14,12 @@ public class MCPitanLibarchForge { public MCPitanLibarchForge() { // Submit our event bus to let architectury register our content on the right time EventBuses.registerModEventBus(MCPitanLibarch.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); - if (PlatformUtil.isDevelopmentEnvironment()) { + if (PlatformUtil.isDevelopmentEnvironment()) EventBuses.registerModEventBus(ExampleMod.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); - } + MCPitanLibarch.init(); + + if (Platform.getEnv().isClient()) + FMLJavaModLoadingContext.get().getModEventBus().addListener(MCPitanLibarchForgeClient::clientInit); } } \ No newline at end of file diff --git a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java new file mode 100644 index 000000000..547a4b49c --- /dev/null +++ b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java @@ -0,0 +1,12 @@ +package ml.pkom.mcpitanlibarch.forge.client; + +import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; +import ml.pkom.mcpitanlibarch.test.ExampleModClient; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +public class MCPitanLibarchForgeClient { + public static void clientInit(FMLClientSetupEvent event) { + if (PlatformUtil.isDevelopmentEnvironment()) + ExampleModClient.init(); + } +} diff --git a/gradle.properties b/gradle.properties index 26c14fc74..67e10b074 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.9-1.18 +mod_version=1.0.10-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api diff --git a/upload_maven.php b/upload_maven.php index d59acb85e..ea94b9449 100644 --- a/upload_maven.php +++ b/upload_maven.php @@ -1,5 +1,5 @@ './common/build/libs/', @@ -8,10 +8,10 @@ )); define('GAME_VERSIONS', array( - '1.16.5' => '1.16', - '1.17' => '1.17', + //'1.16.5' => '1.16', + //'1.17' => '1.17', '1.18' => '1.18', - '1.19' => '1.19', + //'1.19' => '1.19', )); define('PLATFORM_FILE_MARK', array( From 022cc2477ddd5f7f4da955d8b4ddd4833d028606 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 1 Nov 2022 00:10:22 +0900 Subject: [PATCH 028/617] 1.0.10 --- upload_maven.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/upload_maven.php b/upload_maven.php index ea94b9449..cff54d888 100644 --- a/upload_maven.php +++ b/upload_maven.php @@ -1,5 +1,5 @@ './common/build/libs/', @@ -8,10 +8,10 @@ )); define('GAME_VERSIONS', array( - //'1.16.5' => '1.16', - //'1.17' => '1.17', + '1.16.5' => '1.16', + '1.17' => '1.17', '1.18' => '1.18', - //'1.19' => '1.19', + '1.19' => '1.19', )); define('PLATFORM_FILE_MARK', array( From e0eb2741a57c24552e4544648fd25d337f449631 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 2 Nov 2022 23:08:53 +0900 Subject: [PATCH 029/617] 1.1.0 --- .../api/client/SimpleHandledScreen.java | 40 +++++++++++++++++++ gradle.properties | 2 +- upload_maven.php | 8 ++-- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 77ab09d6b..ec0e34d10 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -1,5 +1,6 @@ package ml.pkom.mcpitanlibarch.api.client; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; @@ -25,4 +26,43 @@ protected void drawBackground(MatrixStack matrices, float delta, int mouseX, int } public abstract void drawBackgroundOverride(MatrixStack matrices, float delta, int mouseX, int mouseY); + + public void callDrawTexture(MatrixStack matrices, int x, int y, int u, int v, int width, int height) { + super.drawTexture(matrices, x, y, u, v, width, height); + } + + public void callRenderBackground(MatrixStack matrices) { + super.renderBackground(matrices); + } + + public void callDrawMouseoverTooltip(MatrixStack matrices, int x, int y) { + super.drawMouseoverTooltip(matrices, x, y); + } + + public void renderOverride(MatrixStack matrices, int mouseX, int mouseY, float delta) { + super.render(matrices, mouseX, mouseY, delta); + } + + public void resizeOverride(MinecraftClient client, int width, int height) { + super.resize(client, width, height); + } + + public void initOverride() { + super.init(); + } + + @Override + protected void init() { + initOverride(); + } + + @Override + public void resize(MinecraftClient client, int width, int height) { + resizeOverride(client, width, height); + } + + @Override + public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + renderOverride(matrices, mouseX, mouseY, delta); + } } diff --git a/gradle.properties b/gradle.properties index 67e10b074..c7d1c59b7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.0.10-1.18 +mod_version=1.1.0-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api diff --git a/upload_maven.php b/upload_maven.php index cff54d888..b7d229f15 100644 --- a/upload_maven.php +++ b/upload_maven.php @@ -1,5 +1,5 @@ './common/build/libs/', @@ -8,10 +8,10 @@ )); define('GAME_VERSIONS', array( - '1.16.5' => '1.16', - '1.17' => '1.17', + //'1.16.5' => '1.16', + //'1.17' => '1.17', '1.18' => '1.18', - '1.19' => '1.19', + //'1.19' => '1.19', )); define('PLATFORM_FILE_MARK', array( From 99b0b68713dd8cf2c403cbdae1c827b9527b5026 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 7 Nov 2022 00:17:27 +0900 Subject: [PATCH 030/617] 1.1.1 --- .../api/client/SimpleHandledScreen.java | 34 +++++ .../mcpitanlibarch/api/entity/Player.java | 27 ++++ .../api/gui/SimpleScreenHandler.java | 117 ++++++++++++++++++ .../mcpitanlibarch/api/util/BlockUtil.java | 8 ++ .../mcpitanlibarch/api/util/ItemUtil.java | 6 + .../mcpitanlibarch/test/ExampleScreen.java | 26 ++-- gradle.properties | 2 +- upload_curseforge.php | 2 +- upload_maven.php | 8 +- 9 files changed, 205 insertions(+), 25 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index ec0e34d10..30694938c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -1,18 +1,33 @@ package ml.pkom.mcpitanlibarch.api.client; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; public abstract class SimpleHandledScreen extends HandledScreen { + + public int width, height, backgroundWidth, backgroundHeight, x, y; + public ScreenHandler handler; + public TextRenderer textRenderer; + public ItemRenderer itemRenderer; + public SimpleHandledScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { super(handler, inventory, title); + this.width = MinecraftClient.getInstance().getWindow().getScaledWidth(); + this.height = MinecraftClient.getInstance().getWindow().getScaledHeight(); + this.backgroundWidth = 176; + this.backgroundHeight = 166; + this.x = (this.width - this.backgroundWidth) / 2; + this.y = (this.height - this.backgroundHeight) / 2; + this.handler = handler; } protected T addDrawableChild_compatibility(T drawableElement) { @@ -27,6 +42,15 @@ protected void drawBackground(MatrixStack matrices, float delta, int mouseX, int public abstract void drawBackgroundOverride(MatrixStack matrices, float delta, int mouseX, int mouseY); + @Override + protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { + drawForegroundOverride(matrices, mouseX, mouseY); + } + + protected void drawForegroundOverride(MatrixStack matrices, int mouseX, int mouseY) { + super.drawForeground(matrices, mouseX, mouseY); + } + public void callDrawTexture(MatrixStack matrices, int x, int y, int u, int v, int width, int height) { super.drawTexture(matrices, x, y, u, v, width, height); } @@ -49,6 +73,8 @@ public void resizeOverride(MinecraftClient client, int width, int height) { public void initOverride() { super.init(); + this.textRenderer = super.textRenderer; + this.itemRenderer = super.itemRenderer; } @Override @@ -59,6 +85,14 @@ protected void init() { @Override public void resize(MinecraftClient client, int width, int height) { resizeOverride(client, width, height); + fixScreen(); + } + + public void fixScreen() { + this.width = MinecraftClient.getInstance().getWindow().getScaledWidth(); + this.height = MinecraftClient.getInstance().getWindow().getScaledHeight(); + this.x = (this.width - this.backgroundWidth) / 2; + this.y = (this.height - this.backgroundHeight) / 2; } @Override diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index e6e199ed6..20f5ba37d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -1,12 +1,15 @@ package ml.pkom.mcpitanlibarch.api.entity; import net.minecraft.block.BlockState; +import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.PlayerAbilities; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -146,4 +149,28 @@ public boolean isSneaking() { public ItemStack getCursorStack() { return getCurrentScreenHandler().getCursorStack(); } + + public boolean isClient() { + return getWorld().isClient(); + } + + public void readCustomDataFromNbt(NbtCompound nbt) { + getEntity().readCustomDataFromNbt(nbt); + } + + public void writeCustomDataToNbt(NbtCompound nbt) { + getEntity().writeCustomDataToNbt(nbt); + } + + public void sendMessage(Text text) { + getEntity().sendMessage(text, false); + } + + public void sendActionBar(Text text) { + getEntity().sendMessage(text, true); + } + + public void equipStack(EquipmentSlot slot, ItemStack stack) { + getEntity().equipStack(slot, stack); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java new file mode 100644 index 000000000..4ef3d68c7 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java @@ -0,0 +1,117 @@ +package ml.pkom.mcpitanlibarch.api.gui; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.Inventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.screen.slot.Slot; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class SimpleScreenHandler extends ScreenHandler { + protected SimpleScreenHandler(@Nullable ScreenHandlerType type, int syncId) { + super(type, syncId); + } + + @Deprecated + @Override + public boolean canUse(PlayerEntity player) { + return canUse(new Player(player)); + } + + public boolean canUse(Player player) { + return true; + } + + protected Slot addNormalSlot(Inventory inventory, int index, int x, int y) { + Slot slot = new Slot(inventory, index, x, y); + return this.addSlot(slot); + } + + public static final int DEFAULT_SLOT_SIZE = 18; + + /** + * Add player main inventory slots + * @param inventory target player inventory + * @param x start x + * @param y start y + */ + protected List addPlayerMainInventorySlots(PlayerInventory inventory, int x, int y) { + return this.addSlots(inventory, 9, x, y, DEFAULT_SLOT_SIZE, 9, 3); + } + + /** + * Add player hotbar slots + * @param inventory target player inventory + * @param x start x + * @param y start y + */ + protected List addPlayerHotbarSlots(PlayerInventory inventory, int x, int y) { + return this.addSlotsX(inventory, 0, x, y, DEFAULT_SLOT_SIZE, 9); + } + + /** + * 一括でスロットを設置する + * @param inventory target inventory + * @param firstIndex fisrt index + * @param firstX first x + * @param firstY first y + * @param size a slot size (if this is -1, set 18 to this) + * @param maxAmountX x line slot max amount + * @param maxAmountY y line slot max amount + * @return Slot list + */ + protected List addSlots(Inventory inventory, int firstIndex, int firstX, int firstY, int size, int maxAmountX, int maxAmountY) { + if (size < 0) size = DEFAULT_SLOT_SIZE; + List slots = new ArrayList<>(); + for (int y = 0; y < maxAmountY; ++y) { + List xSlots = this.addSlotsX(inventory, firstIndex + (y * maxAmountX), firstX, firstY + (y * size), size, maxAmountX); + slots.addAll(xSlots); + } + return slots; + } + + /** + * 一括で横にスロットを設置する + * @param inventory target inventory + * @param firstIndex first index + * @param firstX first x + * @param y y + * @param size a slot size (if this is -1, set 18 to this) + * @param amount slot amount + * @return Slot list + */ + protected List addSlotsX(Inventory inventory, int firstIndex, int firstX, int y, int size, int amount) { + if (size < 0) size = DEFAULT_SLOT_SIZE; + List slots = new ArrayList<>(); + for (int x = 0; x < amount; ++x) { + Slot slot = this.addNormalSlot(inventory, firstIndex + x, firstX + (x * size), y); + slots.add(slot); + } + return slots; + } + + /** + * 一括で縦にスロットを設置する + * @param inventory target inventory + * @param firstIndex first index + * @param x x + * @param firstY first y + * @param size a slot size (if this is -1, set 18 to this) + * @param amount slot amount + * @return Slot list + */ + protected List addSlotsY(Inventory inventory, int firstIndex, int x, int firstY, int size, int amount) { + if (size < 0) size = DEFAULT_SLOT_SIZE; + List slots = new ArrayList<>(); + for (int y = 0; y < amount; ++y) { + Slot slot = this.addNormalSlot(inventory, firstIndex + x, x, firstY + (y * size)); + slots.add(slot); + } + return slots; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index 62ab65435..f618e4bb5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -34,4 +34,12 @@ public static AbstractBlock.Settings requiresTool(AbstractBlock.Settings setting public static boolean isExist(Identifier identifier) { return Registry.BLOCK.containsId(identifier); } + + public static Identifier toID(Block block) { + return Registry.BLOCK.getId(block); + } + + public static Block fromId(Identifier identifier) { + return Registry.BLOCK.get(identifier); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index f64ec7b7c..a34effd88 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -30,5 +30,11 @@ public static boolean isIn(Item item, TagKey tagKey) { public static boolean isExist(Identifier identifier) { return Registry.ITEM.containsId(identifier); } + public static Identifier toID(Item item) { + return Registry.ITEM.getId(item); + } + public static Item fromId(Identifier identifier) { + return Registry.ITEM.get(identifier); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java index 0696ee689..320974312 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java @@ -18,12 +18,8 @@ public ExampleScreen(ScreenHandler handler, PlayerInventory inventory, Text titl } @Override - protected void init() { - super.init(); - this.backgroundWidth = 176; - this.backgroundHeight = 166; - int x = (width - backgroundWidth) / 2; - int y = (height - backgroundHeight) / 2; + public void initOverride() { + super.initOverride(); System.out.println("hogehogehoge1111"); this.addDrawableChild_compatibility(new TexturedButtonWidget(0, 0, 30, 30, 0, 0, 16, GUI, (buttonWidget) -> { System.out.println("hogehoge"); @@ -32,22 +28,14 @@ protected void init() { @Override public void drawBackgroundOverride(MatrixStack matrices, float delta, int mouseX, int mouseY) { - int x = (this.width - this.backgroundWidth) / 2; - int y = (this.height - this.backgroundHeight) / 2; - ScreenUtil.setBackground(GUI); - drawTexture(matrices, x, y, 0, 0, this.backgroundWidth, this.backgroundHeight); - } - - @Override - protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { - super.drawForeground(matrices, mouseX, mouseY); + callDrawTexture(matrices, x, y, 0, 0, this.backgroundWidth, this.backgroundHeight); } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - this.renderBackground(matrices); - super.render(matrices, mouseX, mouseY, delta); - this.drawMouseoverTooltip(matrices, mouseX, mouseY); + public void renderOverride(MatrixStack matrices, int mouseX, int mouseY, float delta) { + this.callRenderBackground(matrices); + super.renderOverride(matrices, mouseX, mouseY, delta); + this.callDrawMouseoverTooltip(matrices, mouseX, mouseY); } } diff --git a/gradle.properties b/gradle.properties index c7d1c59b7..aaeff3e01 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.0-1.18 +mod_version=1.1.1-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api diff --git a/upload_curseforge.php b/upload_curseforge.php index 1699c8785..2e472a77e 100644 --- a/upload_curseforge.php +++ b/upload_curseforge.php @@ -1,6 +1,6 @@ './common/build/libs/', @@ -8,10 +8,10 @@ )); define('GAME_VERSIONS', array( - //'1.16.5' => '1.16', - //'1.17' => '1.17', + '1.16.5' => '1.16', + '1.17' => '1.17', '1.18' => '1.18', - //'1.19' => '1.19', + '1.19' => '1.19', )); define('PLATFORM_FILE_MARK', array( From 95127c06390720ec1caa89f54681e04173eaf903 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 7 Nov 2022 00:30:07 +0900 Subject: [PATCH 031/617] 1.1.1 --- upload_curseforge.php | 2 +- upload_maven.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/upload_curseforge.php b/upload_curseforge.php index 2e472a77e..f0331cbc4 100644 --- a/upload_curseforge.php +++ b/upload_curseforge.php @@ -1,6 +1,6 @@ './common/build/libs/', From 3bb61d808cc578b757d2a17c74d8f77034260f3e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 7 Nov 2022 17:56:17 +0900 Subject: [PATCH 032/617] 1.1.1 --- .../api/client/SimpleHandledScreen.java | 17 +++++++++++------ gradle.properties | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 30694938c..13116f534 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -21,12 +21,7 @@ public abstract class SimpleHandledScreen extends HandledScreen { public SimpleHandledScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { super(handler, inventory, title); - this.width = MinecraftClient.getInstance().getWindow().getScaledWidth(); - this.height = MinecraftClient.getInstance().getWindow().getScaledHeight(); - this.backgroundWidth = 176; - this.backgroundHeight = 166; - this.x = (this.width - this.backgroundWidth) / 2; - this.y = (this.height - this.backgroundHeight) / 2; + fixScreen(); this.handler = handler; } @@ -91,10 +86,20 @@ public void resize(MinecraftClient client, int width, int height) { public void fixScreen() { this.width = MinecraftClient.getInstance().getWindow().getScaledWidth(); this.height = MinecraftClient.getInstance().getWindow().getScaledHeight(); + this.backgroundWidth = getBackgroundWidth(); + this.backgroundHeight = getBackgroundHeight(); this.x = (this.width - this.backgroundWidth) / 2; this.y = (this.height - this.backgroundHeight) / 2; } + public int getBackgroundWidth() { + return 176; + } + + public int getBackgroundHeight() { + return 166; + } + @Override public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { renderOverride(matrices, mouseX, mouseY, delta); diff --git a/gradle.properties b/gradle.properties index aaeff3e01..9f89131b0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.1-1.18 +mod_version=1.1.2-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 642b15b085f54f70f252b009ae9a72a53dccece5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 7 Nov 2022 17:56:17 +0900 Subject: [PATCH 033/617] 1.1.2 --- .../api/client/SimpleHandledScreen.java | 17 +++++++++++------ gradle.properties | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 30694938c..13116f534 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -21,12 +21,7 @@ public abstract class SimpleHandledScreen extends HandledScreen { public SimpleHandledScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { super(handler, inventory, title); - this.width = MinecraftClient.getInstance().getWindow().getScaledWidth(); - this.height = MinecraftClient.getInstance().getWindow().getScaledHeight(); - this.backgroundWidth = 176; - this.backgroundHeight = 166; - this.x = (this.width - this.backgroundWidth) / 2; - this.y = (this.height - this.backgroundHeight) / 2; + fixScreen(); this.handler = handler; } @@ -91,10 +86,20 @@ public void resize(MinecraftClient client, int width, int height) { public void fixScreen() { this.width = MinecraftClient.getInstance().getWindow().getScaledWidth(); this.height = MinecraftClient.getInstance().getWindow().getScaledHeight(); + this.backgroundWidth = getBackgroundWidth(); + this.backgroundHeight = getBackgroundHeight(); this.x = (this.width - this.backgroundWidth) / 2; this.y = (this.height - this.backgroundHeight) / 2; } + public int getBackgroundWidth() { + return 176; + } + + public int getBackgroundHeight() { + return 166; + } + @Override public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { renderOverride(matrices, mouseX, mouseY, delta); diff --git a/gradle.properties b/gradle.properties index aaeff3e01..9f89131b0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.1-1.18 +mod_version=1.1.2-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 06fc920f99ab9de12b8fa0409907c6e72a6f5341 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 8 Nov 2022 00:57:10 +0900 Subject: [PATCH 034/617] 1.1.3 --- .../api/client/SimpleHandledScreen.java | 17 +++++++++-------- gradle.properties | 2 +- upload_curseforge.php | 2 +- upload_maven.php | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 13116f534..5b6b6d811 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -68,13 +68,12 @@ public void resizeOverride(MinecraftClient client, int width, int height) { public void initOverride() { super.init(); - this.textRenderer = super.textRenderer; - this.itemRenderer = super.itemRenderer; } @Override protected void init() { initOverride(); + fixScreen(); } @Override @@ -84,20 +83,22 @@ public void resize(MinecraftClient client, int width, int height) { } public void fixScreen() { - this.width = MinecraftClient.getInstance().getWindow().getScaledWidth(); - this.height = MinecraftClient.getInstance().getWindow().getScaledHeight(); this.backgroundWidth = getBackgroundWidth(); this.backgroundHeight = getBackgroundHeight(); - this.x = (this.width - this.backgroundWidth) / 2; - this.y = (this.height - this.backgroundHeight) / 2; + this.x = super.x; //(this.width - this.backgroundWidth) / 2; + this.y = super.y; //(this.height - this.backgroundHeight) / 2; + this.textRenderer = super.textRenderer; + this.itemRenderer = super.itemRenderer; + this.width = super.width; + this.height = super.height; } public int getBackgroundWidth() { - return 176; + return super.backgroundWidth; } public int getBackgroundHeight() { - return 166; + return super.backgroundHeight; } @Override diff --git a/gradle.properties b/gradle.properties index 9f89131b0..731baa236 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.2-1.18 +mod_version=1.1.3-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api diff --git a/upload_curseforge.php b/upload_curseforge.php index f0331cbc4..d0d412799 100644 --- a/upload_curseforge.php +++ b/upload_curseforge.php @@ -1,6 +1,6 @@ './common/build/libs/', From c70545fa9e068acdb548aabe09c073c40907c23d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 10 Nov 2022 22:05:53 +0900 Subject: [PATCH 035/617] 1.1.4 --- .../api/client/SimpleHandledScreen.java | 44 ++++++++++++++++++- gradle.properties | 2 +- upload_curseforge.php | 2 +- upload_maven.php | 2 +- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 5b6b6d811..46c9f5516 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -72,14 +72,14 @@ public void initOverride() { @Override protected void init() { - initOverride(); fixScreen(); + initOverride(); } @Override public void resize(MinecraftClient client, int width, int height) { - resizeOverride(client, width, height); fixScreen(); + resizeOverride(client, width, height); } public void fixScreen() { @@ -93,6 +93,46 @@ public void fixScreen() { this.height = super.height; } + public void setX(int x) { + this.x = x; + super.x = x; + } + + public void setY(int y) { + this.y = y; + super.y = y; + } + + public void setTextRenderer(TextRenderer textRenderer) { + this.textRenderer = textRenderer; + super.textRenderer = textRenderer; + } + + public void setItemRenderer(ItemRenderer itemRenderer) { + this.itemRenderer = itemRenderer; + super.itemRenderer = itemRenderer; + } + + public void setWidth(int width) { + this.width = width; + super.width = width; + } + + public void setBackgroundWidth(int backgroundWidth) { + this.backgroundWidth = backgroundWidth; + super.backgroundWidth = backgroundWidth; + } + + public void setBackgroundHeight(int backgroundHeight) { + this.backgroundHeight = backgroundHeight; + super.backgroundHeight = backgroundHeight; + } + + public void setHeight(int height) { + this.height = height; + super.height = height; + } + public int getBackgroundWidth() { return super.backgroundWidth; } diff --git a/gradle.properties b/gradle.properties index 731baa236..0a57ddac0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.3-1.18 +mod_version=1.1.4-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api diff --git a/upload_curseforge.php b/upload_curseforge.php index d0d412799..899756ae0 100644 --- a/upload_curseforge.php +++ b/upload_curseforge.php @@ -1,6 +1,6 @@ './common/build/libs/', From 348380c7ebec5f45050d818ac58ef9555aa20a27 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 10 Nov 2022 22:27:40 +0900 Subject: [PATCH 036/617] 1.1.5 --- .../pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java | 4 ++-- gradle.properties | 2 +- upload_curseforge.php | 2 +- upload_maven.php | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 46c9f5516..389f770d0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -63,21 +63,21 @@ public void renderOverride(MatrixStack matrices, int mouseX, int mouseY, float d } public void resizeOverride(MinecraftClient client, int width, int height) { - super.resize(client, width, height); } public void initOverride() { - super.init(); } @Override protected void init() { + super.init(); fixScreen(); initOverride(); } @Override public void resize(MinecraftClient client, int width, int height) { + super.resize(client, width, height); fixScreen(); resizeOverride(client, width, height); } diff --git a/gradle.properties b/gradle.properties index 0a57ddac0..0f3cc7583 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.4-1.18 +mod_version=1.1.5-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api diff --git a/upload_curseforge.php b/upload_curseforge.php index 899756ae0..560db389d 100644 --- a/upload_curseforge.php +++ b/upload_curseforge.php @@ -1,6 +1,6 @@ './common/build/libs/', From 3a77f883876939d21db376e239e9b437002a2dcc Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Nov 2022 22:59:43 +0900 Subject: [PATCH 037/617] 1.1.5 --- .gitignore | 3 ++- upload_curseforge.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 3c37caf38..7cb091745 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ atlassian-ide-plugin.xml *.zip *.tar.gz *.rar +*.php # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* @@ -115,4 +116,4 @@ gradle-app.setting run/ # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar +!gradle-wrapper.jar \ No newline at end of file diff --git a/upload_curseforge.php b/upload_curseforge.php index 560db389d..aa0a6db40 100644 --- a/upload_curseforge.php +++ b/upload_curseforge.php @@ -29,7 +29,7 @@ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); -curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'X-Api-Token: 788ae0f4-ae9a-405f-be51-7988574a533a')); +curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'X-Api-Token: 3ff711ba-5123-49d0-8d08-bbada59929e7')); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); From 0fec39742462690c1e6f9d3230f0ec34e8c4baac Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Nov 2022 23:02:38 +0900 Subject: [PATCH 038/617] 1.1.5 --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7cb091745..679459dad 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,8 @@ atlassian-ide-plugin.xml *.rar *.php +php/ + # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* @@ -116,4 +118,4 @@ gradle-app.setting run/ # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar \ No newline at end of file +!gradle-wrapper.jar From 6d63b9b3b3348819e379c466c350ccf7ca947358 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Nov 2022 23:02:51 +0900 Subject: [PATCH 039/617] 1.1.5 --- .../upload_curseforge.bat | 0 upload_maven.bat => php/upload_maven.bat | 0 upload_curseforge.php | 145 ------------------ upload_maven.php | 60 -------- 4 files changed, 205 deletions(-) rename upload_curseforge.bat => php/upload_curseforge.bat (100%) rename upload_maven.bat => php/upload_maven.bat (100%) delete mode 100644 upload_curseforge.php delete mode 100644 upload_maven.php diff --git a/upload_curseforge.bat b/php/upload_curseforge.bat similarity index 100% rename from upload_curseforge.bat rename to php/upload_curseforge.bat diff --git a/upload_maven.bat b/php/upload_maven.bat similarity index 100% rename from upload_maven.bat rename to php/upload_maven.bat diff --git a/upload_curseforge.php b/upload_curseforge.php deleted file mode 100644 index aa0a6db40..000000000 --- a/upload_curseforge.php +++ /dev/null @@ -1,145 +0,0 @@ - './common/build/libs/', - 'fabric' => './fabric/build/libs/', - 'forge' => './forge/build/libs/', -)); - -define('GAME_VERSIONS', array( - '1.16.5' => '1.16', - '1.17' => '1.17', - '1.18' => '1.18', - '1.19' => '1.19', -)); - -define('PLATFORM_FILE_MARK', array( -// 'common' => '', - 'fabric' => '-fabric', - 'forge' => '-forge', -)); - -$postData = array(); - -$ch = curl_init('https://minecraft.curseforge.com/api/game/version-types'); - -curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); -curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); -curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); -curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'X-Api-Token: 3ff711ba-5123-49d0-8d08-bbada59929e7')); -curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); -$result = curl_exec($ch); - -$game_version_types_data = json_decode($result, true); - -curl_close($ch); - -//file_put_contents('curse_forge_game_version_types.json', json_encode($game_version_json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - - -$postData = array(); - -$ch = curl_init('https://minecraft.curseforge.com/api/game/versions'); - -curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); -curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); -curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); -curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'X-Api-Token: 788ae0f4-ae9a-405f-be51-7988574a533a')); -curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); -$result = curl_exec($ch); - -$game_versions_data = json_decode($result, true); - -curl_close($ch); - -//file_put_contents('curse_forge_game_versions.json', json_encode($game_version_json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - -$CHANGE_LOG = CHANGE_LOG; - -foreach (DIRS as $type => $dir) { - - foreach (GAME_VERSIONS as $file_ver => $ver) { - $typeId = 0; - foreach ($game_version_types_data as $data) { - if ($data['name'] == 'Minecraft ' . $ver) { - $typeId = $data['id']; - } - } - - $version_id_list = array(); - foreach ($game_versions_data as $data) { - if ($data['gameVersionTypeID'] == $typeId) { - if (!str_ends_with($data['slug'], 'snapshot')) { - $version_id_list[] = $data['id']; - } - } - } - - $postData = array(); - - $releaseType = ($type === "fabric" ? 'release' : 'beta'); - $fabric_api = ''; - if ($type == 'fabric') { -$fabric_api = << './common/build/libs/', - 'fabric' => './fabric/build/libs/', - 'forge' => './forge/build/libs/', -)); - -define('GAME_VERSIONS', array( - '1.16.5' => '1.16', - '1.17' => '1.17', - '1.18' => '1.18', - '1.19' => '1.19', -)); - -define('PLATFORM_FILE_MARK', array( - 'common' => '', - 'fabric' => '-fabric', - 'forge' => '-forge', -)); - -foreach (DIRS as $type => $dir) { - - foreach (GAME_VERSIONS as $file_ver => $ver) { - - $postData = array(); - - $postData['group_id'] = 'ml.pkom'; - $postData['artifact_id'] = 'mcpitanlibarch-' . $type . '+' . $ver; - $postData['version'] = VERSION; - - $files = array( - $dir . 'mcpitanlibarch-' . VERSION . '-' . $file_ver . PLATFORM_FILE_MARK[$type] . '.jar', - $dir . 'mcpitanlibarch-' . VERSION . '-' . $file_ver . PLATFORM_FILE_MARK[$type] . '-sources.jar', - ); - - foreach ($files as $index => $file) { - $postData['upload[' . $index . ']'] = curl_file_create( - realpath($file), - mime_content_type($file), - basename($file) - ); - echo "Uploading '" . $file . "'\n"; - } - - $request = curl_init('http://localhost/maven/maven.php'); - curl_setopt($request, CURLOPT_POST, true); - curl_setopt($request, CURLOPT_POSTFIELDS, $postData); - curl_setopt($request, CURLOPT_RETURNTRANSFER, true); - $result = curl_exec($request); - - if ($result === false) { - error_log(curl_error($request)); - } - curl_close($request); - } -} - - From 4964c40006c2262a7e79cdbf6196c2aa9d4f6787 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 16 Nov 2022 16:41:20 +0900 Subject: [PATCH 040/617] 1.1.6 --- .../api/command/AbstractCommand.java | 35 ++++++++++ .../api/command/CommandRegistry.java | 42 ++++++++++++ .../api/event/ServerCommandEvent.java | 68 +++++++++++++++++++ .../mcpitanlibarch/test/ExampleCommand.java | 33 +++++++++ .../pkom/mcpitanlibarch/test/ExampleMod.java | 26 ++++--- gradle.properties | 2 +- 6 files changed, 195 insertions(+), 11 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java new file mode 100644 index 000000000..c4427a6f9 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java @@ -0,0 +1,35 @@ +package ml.pkom.mcpitanlibarch.api.command; + +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; + +import java.util.*; + +public abstract class AbstractCommand { + + private Map argumentCommands = new HashMap<>(); + public int isSuccess = 1; + + abstract public void init(); + + abstract public void execute(ServerCommandEvent event); + + public void success() { + isSuccess = 1; + } + + public void failure() { + isSuccess = 0; + } + + public Map getArgumentCommands() { + return argumentCommands; + } + + public void setArgumentCommands(Map argumentCommands) { + this.argumentCommands = argumentCommands; + } + + public void addArgumentCommand(String name, AbstractCommand command) { + getArgumentCommands().put(name, command); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java new file mode 100644 index 000000000..37300af29 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java @@ -0,0 +1,42 @@ +package ml.pkom.mcpitanlibarch.api.command; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import dev.architectury.event.events.common.CommandRegistrationEvent; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.minecraft.server.command.ServerCommandSource; + +import java.util.Map; + +public class CommandRegistry { + public static void register(String name, AbstractCommand command) { + command.init(); + LiteralArgumentBuilder builder = LiteralArgumentBuilder.literal(name) + .executes(context -> { + ServerCommandEvent event = new ServerCommandEvent(); + event.setContext(context); + command.execute(event); + return command.isSuccess; + }); + + forArgsCmd(command, builder); + + CommandRegistrationEvent.EVENT.register((dispatcher, environment) -> + dispatcher.register(builder) + ); + } + + private static void forArgsCmd(AbstractCommand command, LiteralArgumentBuilder builder) { + if (!command.getArgumentCommands().isEmpty()) { + for (Map.Entry argCmd : command.getArgumentCommands().entrySet()) { + argCmd.getValue().init(); + LiteralArgumentBuilder builder2 = builder.then(LiteralArgumentBuilder.literal(argCmd.getKey()).executes(context -> { + ServerCommandEvent event = new ServerCommandEvent(); + event.setContext(context); + argCmd.getValue().execute(event); + return argCmd.getValue().isSuccess; + })); + forArgsCmd(argCmd.getValue(), builder2); + } + } + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java new file mode 100644 index 000000000..bd69d38da --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java @@ -0,0 +1,68 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.context.StringRange; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class ServerCommandEvent { + public CommandContext context; + + public CommandContext getContext() { + return context; + } + + public void setContext(CommandContext context) { + this.context = context; + } + + public PlayerEntity getPlayerEntity() throws CommandSyntaxException { + return context.getSource().getPlayer(); + } + + public Player getPlayer() throws CommandSyntaxException { + return new Player(getPlayerEntity()); + } + + public World getWorld() { + return context.getSource().getWorld(); + } + + public Entity getEntity() { + return context.getSource().getEntity(); + } + + public String getInput() { + return context.getInput(); + } + + public Command getCommand() { + return context.getCommand(); + } + + public CommandContext getChild() { + return context.getChild(); + } + + public CommandContext getLastChild() { + return context.getLastChild(); + } + + public StringRange getRange() { + return context.getRange(); + } + + public void sendSuccess(Text message, boolean broadcastToOps) { + context.getSource().sendFeedback(message, broadcastToOps); + } + + public void sendFailure(Text message) { + context.getSource().sendError(message); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java new file mode 100644 index 000000000..8436808f0 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java @@ -0,0 +1,33 @@ +package ml.pkom.mcpitanlibarch.test; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import ml.pkom.mcpitanlibarch.api.command.AbstractCommand; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.minecraft.item.ItemStack; + +public class ExampleCommand extends AbstractCommand { + + @Override + public void init() { + addArgumentCommand("item", new AbstractCommand() { + @Override + public void init() { + + } + + @Override + public void execute(ServerCommandEvent event) { + try { + event.getPlayer().offerOrDrop(new ItemStack(ExampleMod.EXAMPLE_ITEM_SUPPLIER.getOrNull())); + } catch (CommandSyntaxException e) { + + } + } + }); + } + + @Override + public void execute(ServerCommandEvent event) { + System.out.println(event.getInput()); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java index 1cb36856e..9b6069a9e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java @@ -1,5 +1,6 @@ package ml.pkom.mcpitanlibarch.test; +import ml.pkom.mcpitanlibarch.api.command.CommandRegistry; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; import net.minecraft.block.AbstractBlock; @@ -31,20 +32,25 @@ public static Identifier id(String id) { public static RegistryEvent> supplierEXAMPLE_SCREENHANDLER = registry.registerScreenHandlerType(id("example_gui"), () -> new ScreenHandlerType<>(ExampleScreenHandler::new));; - public static void init() { - registry.registerItem(id("example_item"), () -> new Item(new Item.Settings().group(ItemGroup.MISC))); - RegistryEvent EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new Block(AbstractBlock.Settings.of(Material.STONE))); - registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); - - - - registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new Item.Settings().group(ItemGroup.MISC))); + public static RegistryEvent EXAMPLE_ITEM_SUPPLIER; + public static RegistryEvent EXAMPLE_BLOCK_SUPPLIER; + public static RegistryEvent EXAMPLE_BLOCK_ITEM_SUPPLIER; + public static RegistryEvent EXAMPLE_GUI_ITEM_SUPPLIER; + public static RegistryEvent EXAMPLE_GUI_BLOCK_SUPPLIER; + public static RegistryEvent EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER; + public static void init() { + EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new Item(new Item.Settings().group(ItemGroup.MISC))); + EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new Block(AbstractBlock.Settings.of(Material.STONE))); + EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); + EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new Item.Settings().group(ItemGroup.MISC))); - RegistryEvent EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(AbstractBlock.Settings.of(Material.STONE))); - registry.registerItem(id("example_gui_block"), () -> new BlockItem(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); + EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(AbstractBlock.Settings.of(Material.STONE))); + EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> new BlockItem(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); registry.allRegister(); + + CommandRegistry.register("mpla", new ExampleCommand()); } } diff --git a/gradle.properties b/gradle.properties index 0f3cc7583..3882b3037 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.5-1.18 +mod_version=1.1.6-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From c8a85bb68a792ee819aa16ddd9c3a4a4a3db3b00 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 16 Nov 2022 23:18:05 +0900 Subject: [PATCH 041/617] add BlockEntity API --- .../api/block/ExtendBlockEntityProvider.java | 18 ++++++++++++++++++ .../api/tile/ExtendBlockEntity.java | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java new file mode 100644 index 000000000..ab5fb7778 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java @@ -0,0 +1,18 @@ +package ml.pkom.mcpitanlibarch.api.block; + +import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import org.jetbrains.annotations.Nullable; + +public interface ExtendBlockEntityProvider extends BlockEntityProvider { + @Nullable + default BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return createBlockEntity(new TileCreateEvent(pos, state)); + } + + @Nullable + BlockEntity createBlockEntity(TileCreateEvent event); +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java new file mode 100644 index 000000000..640e945e1 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java @@ -0,0 +1,17 @@ +package ml.pkom.mcpitanlibarch.api.tile; + +import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.BlockPos; + +public class ExtendBlockEntity extends BlockEntity { + public ExtendBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + public ExtendBlockEntity(BlockEntityType type, TileCreateEvent event) { + this(type, event.getBlockPos(), event.getBlockState()); + } +} From 96065474b99083a731c619208e8164285016fb6e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 16 Nov 2022 23:18:22 +0900 Subject: [PATCH 042/617] 1.1.7 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 3882b3037..95cec5542 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,14 +2,14 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.6-1.18 +mod_version=1.1.7-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api architectury_version=4.9.84 # https://fabricmc.net/develop/ -fabric_loader_version=0.14.9 +fabric_loader_version=0.14.10 yarn_mappings=1.18.2+build.4 fabric_api_version=0.58.0+1.18.2 From a33b855b3f6572b296fa2f385fc7378c92c7b2c1 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Nov 2022 01:55:30 +0900 Subject: [PATCH 043/617] 1.1.8 --- .../api/util/InventoryUtil.java | 42 ++++++++++++++++ .../mcpitanlibarch/api/util/WorldUtil.java | 39 +++++++++++++++ .../mcpitanlibarch/api/world/ExtendWorld.java | 48 +++++++++++++++++++ gradle.properties | 2 +- 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java new file mode 100644 index 000000000..97d6fceb5 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java @@ -0,0 +1,42 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; + +public class InventoryUtil { + public static boolean insertItem(ItemStack insertStack, DefaultedList inventory) { + return insertItem(insertStack, inventory, false); + } + + public static boolean insertItem(ItemStack insertStack, DefaultedList inventory, boolean test) { + boolean isInserted = false; + for (int i = 0; i < inventory.size(); i++) { + ItemStack stack = inventory.get(i); + if (stack.isEmpty()) { + if (!test) inventory.set(i, insertStack); + isInserted = true; + break; + } else if (canMergeItems(stack, insertStack)) { + int j = insertStack.getCount(); + if (!test) stack.increment(j); + isInserted = j > 0; + break; + } + } + return isInserted; + + } + + public static boolean canMergeItems(ItemStack first, ItemStack second) { + if (!first.isOf(second.getItem())) { + return false; + } + if (first.getDamage() != second.getDamage()) { + return false; + } + if (first.getCount() + second.getCount() > first.getMaxCount()) { + return false; + } + return ItemStack.areNbtEqual(first, second); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java new file mode 100644 index 000000000..bf7d21a3e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -0,0 +1,39 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class WorldUtil { + public static boolean hasSkyLight(World world) { + return world.getDimension().hasSkyLight(); + } + + public static boolean isThundering(World world) { + return world.isThundering(); + } + + public static boolean isRaining(World world) { + return world.isRaining(); + } + + public static boolean isNight(World world) { + return world.isNight(); + } + + public static boolean isDay(World world) { + return world.isDay(); + } + + public static boolean isSkyVisible(World world, BlockPos pos) { + return world.isSkyVisible(pos); + } + + public static boolean isClient(World world) { + return world.isClient(); + } + + public static boolean isServer(World world) { + return !isClient(world); + } + +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java new file mode 100644 index 000000000..4d74d03a8 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java @@ -0,0 +1,48 @@ +package ml.pkom.mcpitanlibarch.api.world; + +import ml.pkom.mcpitanlibarch.api.util.WorldUtil; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ExtendWorld { + public World world; + public ExtendWorld(World world) { + this.world = world; + } + + public boolean isDay() { + return WorldUtil.isDay(world); + } + + public boolean isThundering() { + return WorldUtil.isThundering(world); + } + + public boolean isSkyVisible(BlockPos pos) { + return WorldUtil.isSkyVisible(world, pos); + } + + public boolean isRaining() { + return WorldUtil.isRaining(world); + } + + public boolean hasSkyLight() { + return WorldUtil.hasSkyLight(world); + } + + public boolean isNight() { + return WorldUtil.isNight(world); + } + + public boolean isClient() { + return WorldUtil.isClient(world); + } + + public boolean isServer() { + return WorldUtil.isServer(world); + } + + public World getMinecraftWorld() { + return world; + } +} diff --git a/gradle.properties b/gradle.properties index 95cec5542..c91664c82 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.7-1.18 +mod_version=1.1.8-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 717f2fc10721ae44d12edb6c74f10548e9399e6b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Nov 2022 01:55:30 +0900 Subject: [PATCH 044/617] 1.1.8 --- .../api/tile/ExtendBlockEntity.java | 9 ++++ .../api/util/InventoryUtil.java | 42 ++++++++++++++++ .../mcpitanlibarch/api/util/WorldUtil.java | 39 +++++++++++++++ .../mcpitanlibarch/api/world/ExtendWorld.java | 48 +++++++++++++++++++ gradle.properties | 2 +- 5 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java index 640e945e1..38cb78416 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java @@ -1,12 +1,15 @@ package ml.pkom.mcpitanlibarch.api.tile; import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; +import ml.pkom.mcpitanlibarch.api.world.ExtendWorld; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; public class ExtendBlockEntity extends BlockEntity { + public ExtendWorld world; public ExtendBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } @@ -14,4 +17,10 @@ public ExtendBlockEntity(BlockEntityType type, BlockPos pos, BlockState state public ExtendBlockEntity(BlockEntityType type, TileCreateEvent event) { this(type, event.getBlockPos(), event.getBlockState()); } + + @Override + public void setWorld(World world) { + super.setWorld(world); + this.world = new ExtendWorld(world); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java new file mode 100644 index 000000000..97d6fceb5 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java @@ -0,0 +1,42 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; + +public class InventoryUtil { + public static boolean insertItem(ItemStack insertStack, DefaultedList inventory) { + return insertItem(insertStack, inventory, false); + } + + public static boolean insertItem(ItemStack insertStack, DefaultedList inventory, boolean test) { + boolean isInserted = false; + for (int i = 0; i < inventory.size(); i++) { + ItemStack stack = inventory.get(i); + if (stack.isEmpty()) { + if (!test) inventory.set(i, insertStack); + isInserted = true; + break; + } else if (canMergeItems(stack, insertStack)) { + int j = insertStack.getCount(); + if (!test) stack.increment(j); + isInserted = j > 0; + break; + } + } + return isInserted; + + } + + public static boolean canMergeItems(ItemStack first, ItemStack second) { + if (!first.isOf(second.getItem())) { + return false; + } + if (first.getDamage() != second.getDamage()) { + return false; + } + if (first.getCount() + second.getCount() > first.getMaxCount()) { + return false; + } + return ItemStack.areNbtEqual(first, second); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java new file mode 100644 index 000000000..bf7d21a3e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -0,0 +1,39 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class WorldUtil { + public static boolean hasSkyLight(World world) { + return world.getDimension().hasSkyLight(); + } + + public static boolean isThundering(World world) { + return world.isThundering(); + } + + public static boolean isRaining(World world) { + return world.isRaining(); + } + + public static boolean isNight(World world) { + return world.isNight(); + } + + public static boolean isDay(World world) { + return world.isDay(); + } + + public static boolean isSkyVisible(World world, BlockPos pos) { + return world.isSkyVisible(pos); + } + + public static boolean isClient(World world) { + return world.isClient(); + } + + public static boolean isServer(World world) { + return !isClient(world); + } + +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java new file mode 100644 index 000000000..4d74d03a8 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java @@ -0,0 +1,48 @@ +package ml.pkom.mcpitanlibarch.api.world; + +import ml.pkom.mcpitanlibarch.api.util.WorldUtil; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ExtendWorld { + public World world; + public ExtendWorld(World world) { + this.world = world; + } + + public boolean isDay() { + return WorldUtil.isDay(world); + } + + public boolean isThundering() { + return WorldUtil.isThundering(world); + } + + public boolean isSkyVisible(BlockPos pos) { + return WorldUtil.isSkyVisible(world, pos); + } + + public boolean isRaining() { + return WorldUtil.isRaining(world); + } + + public boolean hasSkyLight() { + return WorldUtil.hasSkyLight(world); + } + + public boolean isNight() { + return WorldUtil.isNight(world); + } + + public boolean isClient() { + return WorldUtil.isClient(world); + } + + public boolean isServer() { + return WorldUtil.isServer(world); + } + + public World getMinecraftWorld() { + return world; + } +} diff --git a/gradle.properties b/gradle.properties index 95cec5542..c91664c82 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.7-1.18 +mod_version=1.1.8-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 7016003329043cc95d90eaf75d9d1052308e4c33 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 8 Dec 2022 14:33:45 +0900 Subject: [PATCH 045/617] Change API --- .../api/gui/SimpleScreenHandler.java | 36 +++++++++++++++++++ .../api/item/DefaultItemGroups.java | 20 +++++++++++ .../api/item/ExtendSettings.java | 20 +++++++++++ .../pkom/mcpitanlibarch/test/ExampleMod.java | 11 +++--- .../test/ExampleScreenHandler.java | 9 ++++- 5 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java index 4ef3d68c7..439bfb8e7 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java @@ -4,6 +4,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.slot.Slot; @@ -114,4 +115,39 @@ protected List addSlotsY(Inventory inventory, int firstIndex, int x, int f } return slots; } + + public ItemStack quickMoveOverride(PlayerEntity player, int index) { + ItemStack itemStack = ItemStack.EMPTY; + Slot slot = this.slots.get(index); + if (slot.hasStack()) { + ItemStack itemStack2 = slot.getStack(); + itemStack = itemStack2.copy(); + if (index < 9) { + if (!this.insertItem(itemStack2, 9, 36, true)) { + return ItemStack.EMPTY; + } + } else if (!this.insertItem(itemStack2, 0, 9, false)) { + return ItemStack.EMPTY; + } + + if (itemStack2.isEmpty()) { + slot.setStack(ItemStack.EMPTY); + } else { + slot.markDirty(); + } + + if (itemStack2.getCount() == itemStack.getCount()) { + return ItemStack.EMPTY; + } + + slot.onTakeItem(player, itemStack2); + } + + return itemStack; + } + + @Override + public ItemStack transferSlot(PlayerEntity player, int slot) { + return quickMoveOverride(player, slot); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java new file mode 100644 index 000000000..29b19bd9c --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import net.minecraft.item.ItemGroup; + +public class DefaultItemGroups { + public static final ItemGroup BUILDING_BLOCKS = ItemGroup.BUILDING_BLOCKS; + public static final ItemGroup COLORED_BLOCKS = ItemGroup.BUILDING_BLOCKS; + public static final ItemGroup NATURAL = ItemGroup.BUILDING_BLOCKS; + public static final ItemGroup FUNCTIONAL = ItemGroup.DECORATIONS; + public static final ItemGroup REDSTONE = ItemGroup.REDSTONE; + public static final ItemGroup HOTBAR = ItemGroup.HOTBAR; + public static final ItemGroup SEARCH = ItemGroup.SEARCH; + public static final ItemGroup TOOLS = ItemGroup.TOOLS; + public static final ItemGroup COMBAT = ItemGroup.COMBAT; + public static final ItemGroup FOOD_AND_DRINK = ItemGroup.FOOD; + public static final ItemGroup INGREDIENTS = ItemGroup.MISC; + public static final ItemGroup SPAWN_EGGS = ItemGroup.MISC; + public static final ItemGroup OPERATOR = ItemGroup.MISC; + public static final ItemGroup INVENTORY = ItemGroup.INVENTORY; +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java new file mode 100644 index 000000000..3f0b15a55 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.util.Identifier; + +public class ExtendSettings extends Item.Settings { + public ExtendSettings addGroup(ItemGroup itemGroup) { + super.group(itemGroup); + return this; + } + + // Support 1.19.3~ + // identifier: Item ID + // ~1.19.2 setGroup... + public ExtendSettings addGroup(ItemGroup itemGroup, Identifier identifier) { + //CreativeTabRegistry.append(itemGroup, ItemUtil.fromId(identifier)); + return addGroup(itemGroup); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java index 9b6069a9e..8d671d797 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java @@ -2,13 +2,14 @@ import ml.pkom.mcpitanlibarch.api.command.CommandRegistry; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; +import ml.pkom.mcpitanlibarch.api.item.DefaultItemGroups; +import ml.pkom.mcpitanlibarch.api.item.ExtendSettings; import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.block.Material; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.util.Identifier; import org.apache.logging.log4j.Level; @@ -40,14 +41,14 @@ public static Identifier id(String id) { public static RegistryEvent EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER; public static void init() { - EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new Item(new Item.Settings().group(ItemGroup.MISC))); + EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new Item(new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS, id("example_item")))); EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new Block(AbstractBlock.Settings.of(Material.STONE))); - EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); + EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); - EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new Item.Settings().group(ItemGroup.MISC))); + EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(AbstractBlock.Settings.of(Material.STONE))); - EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> new BlockItem(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new Item.Settings().group(ItemGroup.MISC))); + EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> new BlockItem(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); registry.allRegister(); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java index ef10e2f3d..66a688d6e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java @@ -1,16 +1,23 @@ package ml.pkom.mcpitanlibarch.test; +import ml.pkom.mcpitanlibarch.api.gui.SimpleScreenHandler; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; -public class ExampleScreenHandler extends ScreenHandler { +public class ExampleScreenHandler extends SimpleScreenHandler { public ExampleScreenHandler(int i, PlayerInventory playerInventory) { super(ExampleMod.supplierEXAMPLE_SCREENHANDLER.getOrNull(), i); } + @Override + public ItemStack quickMoveOverride(PlayerEntity player, int slot) { + return null; + } + @Override public boolean canUse(PlayerEntity player) { return true; From 824b64ffef281cc08b59184b30dc9df09b49f6c3 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 8 Dec 2022 14:54:15 +0900 Subject: [PATCH 046/617] Change API --- .../mcpitanlibarch/api/item/DefaultItemGroups.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java index 29b19bd9c..05ef99108 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java @@ -5,8 +5,8 @@ public class DefaultItemGroups { public static final ItemGroup BUILDING_BLOCKS = ItemGroup.BUILDING_BLOCKS; public static final ItemGroup COLORED_BLOCKS = ItemGroup.BUILDING_BLOCKS; - public static final ItemGroup NATURAL = ItemGroup.BUILDING_BLOCKS; - public static final ItemGroup FUNCTIONAL = ItemGroup.DECORATIONS; + public static final ItemGroup NATURAL = ItemGroup.DECORATIONS; + public static final ItemGroup FUNCTIONAL = ItemGroup.TRANSPORTATION; public static final ItemGroup REDSTONE = ItemGroup.REDSTONE; public static final ItemGroup HOTBAR = ItemGroup.HOTBAR; public static final ItemGroup SEARCH = ItemGroup.SEARCH; @@ -17,4 +17,10 @@ public class DefaultItemGroups { public static final ItemGroup SPAWN_EGGS = ItemGroup.MISC; public static final ItemGroup OPERATOR = ItemGroup.MISC; public static final ItemGroup INVENTORY = ItemGroup.INVENTORY; + + // ~1.19.2 Item Group + public static final ItemGroup BREWING = ItemGroup.BREWING; // if version is 1.19.3, FOOD_AND_DRINK + public static final ItemGroup TRANSPORTATION = ItemGroup.TRANSPORTATION; // if version is 1.19.3, FUNCTIONAL + public static final ItemGroup DECORATIONS = ItemGroup.DECORATIONS; // if version is 1.19.3, NATURAL + public static final ItemGroup MISC = ItemGroup.MISC; // if version is 1.19.3, INGREDIENTS } From e16df14ae56a17c110e85c06b88a6424ae69e90a Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 8 Dec 2022 14:54:38 +0900 Subject: [PATCH 047/617] version info --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c91664c82..1ccf79906 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.1.8-1.18 +mod_version=1.2.0-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From b4bfc30685c5b19d0c58b1bc90fe0af64590a0c7 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 9 Dec 2022 13:05:40 +0900 Subject: [PATCH 048/617] b --- .../api/item/CreativeTabManager.java | 49 +++++++++++++++++++ .../api/registry/ArchRegistry.java | 6 ++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java new file mode 100644 index 000000000..7af997874 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java @@ -0,0 +1,49 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import dev.architectury.registry.CreativeTabRegistry; +import ml.pkom.mcpitanlibarch.api.util.ItemUtil; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.collection.DefaultedList; + +import java.util.ArrayList; +import java.util.List; + +public class CreativeTabManager { + private static final List bookingItems = new ArrayList<>(); + + // グループ予約済みアイテム + public static class BookingItem { + public ItemGroup itemGroup; + public Identifier identifier; + private BookingItem(ItemGroup itemGroup, Identifier identifier) { + this.itemGroup = itemGroup; + this.identifier = identifier; + } + } + + public static void allRegister() { + if (bookingItems.isEmpty()) return; + for (BookingItem bookingItem : bookingItems) { + bookingItem.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); + //CreativeTabRegistry.append(bookingItem.itemGroup, ItemUtil.fromId(bookingItem.identifier)); + bookingItems.remove(bookingItem); + } + } + + public static void register(Identifier identifier) { + if (bookingItems.isEmpty()) return; + for (BookingItem bookingItem : bookingItems) { + if (!bookingItem.identifier.toString().equals(identifier.toString())) continue; + bookingItem.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); + //CreativeTabRegistry.append(bookingItem.itemGroup, ItemUtil.fromId(bookingItem.identifier)); + bookingItems.remove(bookingItem); + break; + } + } + + public static void addItem(ItemGroup itemGroup, Identifier identifier) { + bookingItems.add(new BookingItem(itemGroup, identifier)); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 3b198d5cd..fac7bd4d2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -3,7 +3,9 @@ import com.google.common.base.Suppliers; import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.Registries; +import dev.architectury.registry.registries.RegistrySupplier; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; +import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.EntityType; @@ -45,7 +47,9 @@ public static ArchRegistry createRegistry(String MOD_ID) { } public RegistryEvent registerItem(Identifier id, Supplier supplier) { - return new RegistryEvent<>(ITEMS.register(id, supplier)); + RegistrySupplier registrySupplier = ITEMS.register(id, supplier); + CreativeTabManager.register(id); + return new RegistryEvent<>(registrySupplier); } public RegistryEvent registerBlock(Identifier id, Supplier supplier) { From ad9cf5b8cbda4eff6f9942816825cbc7cb8bf959 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 9 Dec 2022 13:21:34 +0900 Subject: [PATCH 049/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1ccf79906..ceee2e5bc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.0-1.18 +mod_version=1.2.1-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From aa5ed0e1b7bdbd46a6ec8d3a892b350bdd005702 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 9 Dec 2022 16:33:08 +0900 Subject: [PATCH 050/617] Add API 1193 --- .../api/item/CreativeTabBuilder.java | 82 +++++++++++++++++++ .../api/item/ExtendSettings.java | 5 +- .../api/registry/ArchRegistry.java | 9 ++ 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java new file mode 100644 index 000000000..e385ffe51 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java @@ -0,0 +1,82 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import dev.architectury.registry.CreativeTabRegistry; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +import java.util.function.Supplier; + +public class CreativeTabBuilder { + + private final Identifier identifier; + private Text displayName = null; + private Supplier iconSupplier = null; + private boolean noRenderedName = false; + private boolean noScrollbar = false; + private boolean special = false; + private String texture; + + public CreativeTabBuilder(Identifier identifier) { + this.identifier = identifier; + } + + public CreativeTabBuilder create(Identifier identifier) { + return new CreativeTabBuilder(identifier); + } + + public CreativeTabBuilder setDisplayName(Text text) { + this.displayName = text; + return this; + } + + public CreativeTabBuilder setIcon(Supplier iconSupplier) { + this.iconSupplier = iconSupplier; + return this; + } + + public CreativeTabBuilder setIcon(Item item) { + return setIcon(() -> new ItemStack(item)); + } + + public void noRenderedName() { + this.noRenderedName = true; + } + + public void noScrollbar() { + this.noScrollbar = true; + } + + public void special() { + this.special = true; + } + + public void setTexture(String texture) { + this.texture = texture; + } + + public ItemGroup build() { + /* + CreativeTabRegistry tabSupplier = CreativeTabRegistry.create(identifier, (builder -> { + if (displayName != null) builder.displayName(displayName); + if (iconSupplier != null) builder.icon(iconSupplier); + if (noRenderedName) builder.noRenderedName(); + if (noScrollbar) builder.noScrollbar(); + if (special) builder.special(); + if (texture != null) builder.texture(texture); + builder.build(); + })); + return tabSupplier.get(); + + */ + ItemGroup itemGroup = CreativeTabRegistry.create(identifier, iconSupplier); + if (displayName != null) itemGroup.setName(displayName.getString()); + if (noRenderedName) itemGroup.setName(""); + if (noScrollbar) itemGroup.setNoScrollbar(); + if (special) itemGroup.isSpecial(); + if (texture != null) itemGroup.setTexture(texture); + return itemGroup; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java index 3f0b15a55..aff61e7d6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java @@ -5,14 +5,15 @@ import net.minecraft.util.Identifier; public class ExtendSettings extends Item.Settings { + + // ~1.19.2 public ExtendSettings addGroup(ItemGroup itemGroup) { super.group(itemGroup); return this; } - // Support 1.19.3~ + // 1.19.3~ // identifier: Item ID - // ~1.19.2 setGroup... public ExtendSettings addGroup(ItemGroup itemGroup, Identifier identifier) { //CreativeTabRegistry.append(itemGroup, ItemUtil.fromId(identifier)); return addGroup(itemGroup); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index fac7bd4d2..0044484eb 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -72,10 +72,19 @@ public RegistryEvent> registerEntity(Identifier id, Supplier(ENTITY_TYPE.register(id, supplier)); } + @Deprecated public RegistryEvent registerSoundEvent(Identifier id, Supplier supplier) { return new RegistryEvent<>(SOUND_EVENT.register(id, supplier)); } + public RegistryEvent registerSoundEvent(Identifier id) { + return registerSoundEvent(id, () -> new SoundEvent(id)); + } + + public RegistryEvent registerSoundEvent(Identifier id, float distanceToTravel) { + return registerSoundEvent(id, () -> new SoundEvent(id, distanceToTravel)); + } + public RegistryEvent registerFluid(Identifier id, Supplier supplier) { return new RegistryEvent<>(FLUID.register(id, supplier)); } From 3e89a95246de9791189286e63bd1ae95617eccb1 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 9 Dec 2022 16:41:56 +0900 Subject: [PATCH 051/617] ver --- .../java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 0044484eb..a9bcbe36d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -82,7 +82,7 @@ public RegistryEvent registerSoundEvent(Identifier id) { } public RegistryEvent registerSoundEvent(Identifier id, float distanceToTravel) { - return registerSoundEvent(id, () -> new SoundEvent(id, distanceToTravel)); + return registerSoundEvent(id, () -> new SoundEvent(id)); } public RegistryEvent registerFluid(Identifier id, Supplier supplier) { diff --git a/gradle.properties b/gradle.properties index ceee2e5bc..172443864 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.1-1.18 +mod_version=1.2.2-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 7eddd0fff458aad90b864f87377dcde560cb8617 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 9 Dec 2022 17:35:36 +0900 Subject: [PATCH 052/617] add APIs --- .../mcpitanlibarch/api/item/CreativeTabBuilder.java | 1 - .../ml/pkom/mcpitanlibarch/api/util/BlockUtil.java | 11 +++++++++++ .../ml/pkom/mcpitanlibarch/api/util/ItemUtil.java | 11 +++++++++++ .../pkom/mcpitanlibarch/api/util/PlatformUtil.java | 4 ++++ .../mcpitanlibarch/api/util/ScreenHandlerUtil.java | 13 +++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java index e385ffe51..a5b7f6ee3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java @@ -66,7 +66,6 @@ public ItemGroup build() { if (noScrollbar) builder.noScrollbar(); if (special) builder.special(); if (texture != null) builder.texture(texture); - builder.build(); })); return tabSupplier.get(); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index f618e4bb5..764afa668 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -6,6 +6,9 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import java.util.ArrayList; +import java.util.List; + public class BlockUtil { public static Block block(Identifier id) { return Registry.BLOCK.get(id); @@ -42,4 +45,12 @@ public static Identifier toID(Block block) { public static Block fromId(Identifier identifier) { return Registry.BLOCK.get(identifier); } + + public static List getAllBlocks() { + List blocks = new ArrayList<>(); + for (Block block : Registries.BLOCK) { + blocks.add(block); + } + return blocks; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index a34effd88..683a129b8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -6,6 +6,9 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import java.util.ArrayList; +import java.util.List; + public class ItemUtil { public static Item item(Identifier id) { return Registry.ITEM.get(id); @@ -37,4 +40,12 @@ public static Identifier toID(Item item) { public static Item fromId(Identifier identifier) { return Registry.ITEM.get(identifier); } + + public static List getAllItems() { + List items = new ArrayList<>(); + for (Item item : Registries.ITEM) { + items.add(item); + } + return items; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java index 14bf63556..975164401 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java @@ -51,4 +51,8 @@ public static Collection getModIds() { public static EnvType getEnv() { return Platform.getEnv(); } + + public static String getGameVersion() { + return Platform.getMinecraftVersion(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java index 145931558..db7bd1ebe 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java @@ -1,11 +1,24 @@ package ml.pkom.mcpitanlibarch.api.util; +import net.minecraft.registry.Registries; import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.slot.Slot; import net.minecraft.util.collection.DefaultedList; +import java.util.ArrayList; +import java.util.List; + public class ScreenHandlerUtil { public static DefaultedList getSlots(ScreenHandler screenHandler) { return screenHandler.slots; } + + public static List> getAllScreenHandlerTypes() { + List> screenHandlerTypes = new ArrayList<>(); + for (ScreenHandlerType screenHandler : Registries.SCREEN_HANDLER) { + screenHandlerTypes.add(screenHandler); + } + return screenHandlerTypes; + } } From a962aaed1bf429340a825f84ef482fba6033a380 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 9 Dec 2022 17:37:25 +0900 Subject: [PATCH 053/617] fix --- .../main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java | 2 +- .../main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java | 2 +- .../ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index 764afa668..c7639fa7a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -48,7 +48,7 @@ public static Block fromId(Identifier identifier) { public static List getAllBlocks() { List blocks = new ArrayList<>(); - for (Block block : Registries.BLOCK) { + for (Block block : Registry.BLOCK) { blocks.add(block); } return blocks; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index 683a129b8..7f48eae97 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -43,7 +43,7 @@ public static Item fromId(Identifier identifier) { public static List getAllItems() { List items = new ArrayList<>(); - for (Item item : Registries.ITEM) { + for (Item item : Registry.ITEM) { items.add(item); } return items; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java index db7bd1ebe..f87733a89 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java @@ -1,10 +1,10 @@ package ml.pkom.mcpitanlibarch.api.util; -import net.minecraft.registry.Registries; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.slot.Slot; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.util.registry.Registry; import java.util.ArrayList; import java.util.List; @@ -16,7 +16,7 @@ public static DefaultedList getSlots(ScreenHandler screenHandler) { public static List> getAllScreenHandlerTypes() { List> screenHandlerTypes = new ArrayList<>(); - for (ScreenHandlerType screenHandler : Registries.SCREEN_HANDLER) { + for (ScreenHandlerType screenHandler : Registry.SCREEN_HANDLER) { screenHandlerTypes.add(screenHandler); } return screenHandlerTypes; From 02eabdef30a2e85b42b2274155cfb409d905ac19 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 9 Dec 2022 17:37:56 +0900 Subject: [PATCH 054/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 172443864..fe30a16f3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.2-1.18 +mod_version=1.2.3-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 25a33eda403915ea20462c0ed42d3f98d6acfb8f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Dec 2022 14:29:38 +0900 Subject: [PATCH 055/617] Change Command API --- .../api/command/AbstractCommand.java | 20 ++++--- .../api/command/CommandRegistry.java | 54 ++++++++++++++----- .../api/command/CommandSettings.java | 4 ++ .../api/command/LiteralCommand.java | 6 +++ .../api/command/RequiredCommand.java | 9 ++++ .../api/event/CommandEvent.java | 24 +++++++++ .../api/event/ServerCommandEvent.java | 3 +- .../mcpitanlibarch/test/ExampleCommand.java | 5 +- 8 files changed, 102 insertions(+), 23 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/RequiredCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java index c4427a6f9..f1f326a03 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java @@ -4,14 +4,20 @@ import java.util.*; -public abstract class AbstractCommand { +public abstract class AbstractCommand { - private Map argumentCommands = new HashMap<>(); + private Map> argumentCommands = new HashMap<>(); public int isSuccess = 1; - abstract public void init(); + public void init() { - abstract public void execute(ServerCommandEvent event); + } + + public void init(CommandSettings settings) { + init(); + } + + abstract public void execute(T event); public void success() { isSuccess = 1; @@ -21,15 +27,15 @@ public void failure() { isSuccess = 0; } - public Map getArgumentCommands() { + public Map> getArgumentCommands() { return argumentCommands; } - public void setArgumentCommands(Map argumentCommands) { + public void setArgumentCommands(Map> argumentCommands) { this.argumentCommands = argumentCommands; } - public void addArgumentCommand(String name, AbstractCommand command) { + public void addArgumentCommand(String name, AbstractCommand command) { getArgumentCommands().put(name, command); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java index 37300af29..22f650970 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java @@ -1,14 +1,20 @@ package ml.pkom.mcpitanlibarch.api.command; +import com.mojang.brigadier.arguments.ArgumentType; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.builder.RequiredArgumentBuilder; import dev.architectury.event.events.common.CommandRegistrationEvent; +import ml.pkom.mcpitanlibarch.api.event.CommandEvent; import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.minecraft.command.argument.ArgumentTypes; import net.minecraft.server.command.ServerCommandSource; import java.util.Map; public class CommandRegistry { - public static void register(String name, AbstractCommand command) { + public static void register(String name, LiteralCommand command) { command.init(); LiteralArgumentBuilder builder = LiteralArgumentBuilder.literal(name) .executes(context -> { @@ -25,18 +31,42 @@ public static void register(String name, AbstractCommand command) { ); } - private static void forArgsCmd(AbstractCommand command, LiteralArgumentBuilder builder) { - if (!command.getArgumentCommands().isEmpty()) { - for (Map.Entry argCmd : command.getArgumentCommands().entrySet()) { - argCmd.getValue().init(); - LiteralArgumentBuilder builder2 = builder.then(LiteralArgumentBuilder.literal(argCmd.getKey()).executes(context -> { - ServerCommandEvent event = new ServerCommandEvent(); - event.setContext(context); - argCmd.getValue().execute(event); - return argCmd.getValue().isSuccess; - })); - forArgsCmd(argCmd.getValue(), builder2); + private static void forArgsCmd(AbstractCommand absCmd, ArgumentBuilder builder) { + + if (!absCmd.getArgumentCommands().isEmpty()) { + // 引数コマンド + for (Map.Entry> argCmd : absCmd.getArgumentCommands().entrySet()) { + argCmd.getValue().init(new CommandSettings()); + + if (argCmd.getValue() instanceof RequiredCommand) { + RequiredCommand command = (RequiredCommand) argCmd.getValue(); + RequiredArgumentBuilder builder2 = ((RequiredArgumentBuilder) builder).then(RequiredArgumentBuilder.argument(command.getArgumentName(), command.getArgumentType()) + .executes(context -> { + ServerCommandEvent event = new ServerCommandEvent(); + event.setContext(context); + command.execute(event); + return command.isSuccess; + } + )); + forArgsCmd(command, builder2); + continue; + } + if (argCmd.getValue() instanceof LiteralCommand) { + LiteralCommand command = (LiteralCommand) argCmd.getValue(); + LiteralArgumentBuilder builder2 = ((LiteralArgumentBuilder) builder).then(LiteralArgumentBuilder.literal(argCmd.getKey()) + .executes(context -> { + ServerCommandEvent event = new ServerCommandEvent(); + event.setContext(context); + command.execute(event); + return command.isSuccess; + } + )); + forArgsCmd(command, builder2); + } } } + + + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java new file mode 100644 index 000000000..67af43000 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java @@ -0,0 +1,4 @@ +package ml.pkom.mcpitanlibarch.api.command; + +public class CommandSettings { +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java new file mode 100644 index 000000000..1b3d4cb9c --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java @@ -0,0 +1,6 @@ +package ml.pkom.mcpitanlibarch.api.command; + +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; + +public abstract class LiteralCommand extends AbstractCommand { +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/RequiredCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/RequiredCommand.java new file mode 100644 index 000000000..02effff7b --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/RequiredCommand.java @@ -0,0 +1,9 @@ +package ml.pkom.mcpitanlibarch.api.command; + +import com.mojang.brigadier.arguments.ArgumentType; + +public abstract class RequiredCommand extends AbstractCommand { + public abstract String getArgumentName(); + + public abstract ArgumentType getArgumentType(); +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java new file mode 100644 index 000000000..ca0ddd4da --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java @@ -0,0 +1,24 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.context.StringRange; + +public class CommandEvent { + public CommandContext context; + + public CommandContext getContext() { + return context; + } + + public void setContext(CommandContext context) { + this.context = context; + } + + public String getInput() { + return context.getInput(); + } + + public StringRange getRange() { + return context.getRange(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java index bd69d38da..f6a733e6d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java @@ -11,8 +11,7 @@ import net.minecraft.text.Text; import net.minecraft.world.World; -public class ServerCommandEvent { - public CommandContext context; +public class ServerCommandEvent extends CommandEvent { public CommandContext getContext() { return context; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java index 8436808f0..cf6f04a94 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java @@ -2,14 +2,15 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import ml.pkom.mcpitanlibarch.api.command.AbstractCommand; +import ml.pkom.mcpitanlibarch.api.command.LiteralCommand; import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; import net.minecraft.item.ItemStack; -public class ExampleCommand extends AbstractCommand { +public class ExampleCommand extends LiteralCommand { @Override public void init() { - addArgumentCommand("item", new AbstractCommand() { + addArgumentCommand("item", new LiteralCommand() { @Override public void init() { From 02ac0f02950ed120b5d760a6d8b802aa0864eb4d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Dec 2022 14:30:41 +0900 Subject: [PATCH 056/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index fe30a16f3..8686d7d0d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.3-1.18 +mod_version=1.2.4-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From a802e2474b9886f205c7cdeb6d809fdba298c2ed Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Dec 2022 16:56:53 +0900 Subject: [PATCH 057/617] Change Command API --- .../api/command/AbstractCommand.java | 20 ++++-- .../api/command/CommandRegistry.java | 66 ++++++++++++++----- .../api/command/CommandSettings.java | 29 ++++++++ .../api/command/LiteralCommand.java | 1 + .../api/command/RequiredCommand.java | 9 --- .../api/command/argument/EntitiesCommand.java | 20 ++++++ .../api/command/argument/EntityCommand.java | 20 ++++++ .../command/argument/GreedyStringCommand.java | 12 ++++ .../api/command/argument/IntegerCommand.java | 19 ++++++ .../api/command/argument/ItemCommand.java | 20 ++++++ .../api/command/argument/PlayerCommand.java | 20 ++++++ .../api/command/argument/PlayersCommand.java | 21 ++++++ .../api/command/argument/RequiredCommand.java | 11 ++++ .../api/command/argument/StringCommand.java | 19 ++++++ .../api/event/CommandEvent.java | 10 +++ .../api/event/EntitiesCommandEvent.java | 16 +++++ .../api/event/EntityCommandEvent.java | 16 +++++ .../api/event/IntegerCommandEvent.java | 10 +++ .../api/event/ItemCommandEvent.java | 11 ++++ .../api/event/PlayerCommandEvent.java | 16 +++++ .../api/event/PlayersCommandEvent.java | 16 +++++ .../api/event/RequiredCommandEvent.java | 5 ++ .../api/event/ServerCommandEvent.java | 2 +- .../api/event/StringCommandEvent.java | 10 +++ .../mcpitanlibarch/test/ExampleCommand.java | 23 ++++++- 25 files changed, 384 insertions(+), 38 deletions(-) delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/RequiredCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntitiesCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntityCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/GreedyStringCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/IntegerCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/ItemCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayerCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayersCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/RequiredCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/StringCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntitiesCommandEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntityCommandEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/IntegerCommandEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ItemCommandEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayerCommandEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayersCommandEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/RequiredCommandEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/StringCommandEvent.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java index f1f326a03..3d464fd72 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java @@ -1,12 +1,14 @@ package ml.pkom.mcpitanlibarch.api.command; +import ml.pkom.mcpitanlibarch.api.command.argument.RequiredCommand; import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; -import java.util.*; +import java.util.HashMap; +import java.util.Map; public abstract class AbstractCommand { - private Map> argumentCommands = new HashMap<>(); + private Map> argumentCommands = new HashMap<>(); public int isSuccess = 1; public void init() { @@ -17,8 +19,6 @@ public void init(CommandSettings settings) { init(); } - abstract public void execute(T event); - public void success() { isSuccess = 1; } @@ -27,15 +27,21 @@ public void failure() { isSuccess = 0; } - public Map> getArgumentCommands() { + public Map> getArgumentCommands() { return argumentCommands; } - public void setArgumentCommands(Map> argumentCommands) { + public void setArgumentCommands(Map> argumentCommands) { this.argumentCommands = argumentCommands; } - public void addArgumentCommand(String name, AbstractCommand command) { + public void addArgumentCommand(String name, AbstractCommand command) { getArgumentCommands().put(name, command); } + + public void addArgumentCommand(RequiredCommand command) { + getArgumentCommands().put(command.getArgumentName(), command); + } + + public abstract void execute(ServerCommandEvent event); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java index 22f650970..07a332517 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java @@ -1,22 +1,22 @@ package ml.pkom.mcpitanlibarch.api.command; -import com.mojang.brigadier.arguments.ArgumentType; -import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.RequiredArgumentBuilder; import dev.architectury.event.events.common.CommandRegistrationEvent; -import ml.pkom.mcpitanlibarch.api.event.CommandEvent; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; -import net.minecraft.command.argument.ArgumentTypes; +import ml.pkom.mcpitanlibarch.api.command.argument.*; +import ml.pkom.mcpitanlibarch.api.event.*; +import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import java.util.Map; public class CommandRegistry { public static void register(String name, LiteralCommand command) { - command.init(); - LiteralArgumentBuilder builder = LiteralArgumentBuilder.literal(name) + CommandSettings settings = new CommandSettings(); + command.init(settings); + + LiteralArgumentBuilder builder = LiteralArgumentBuilder.literal(name).requires(settings::requires) .executes(context -> { ServerCommandEvent event = new ServerCommandEvent(); event.setContext(context); @@ -26,6 +26,10 @@ public static void register(String name, LiteralCommand command) { forArgsCmd(command, builder); + register(builder); + } + + public static void register(LiteralArgumentBuilder builder) { CommandRegistrationEvent.EVENT.register((dispatcher, environment) -> dispatcher.register(builder) ); @@ -36,33 +40,59 @@ private static void forArgsCmd(AbstractCommand absCmd, ArgumentBuilder> argCmd : absCmd.getArgumentCommands().entrySet()) { + ArgumentBuilder nextBuilder = null; argCmd.getValue().init(new CommandSettings()); - if (argCmd.getValue() instanceof RequiredCommand) { - RequiredCommand command = (RequiredCommand) argCmd.getValue(); - RequiredArgumentBuilder builder2 = ((RequiredArgumentBuilder) builder).then(RequiredArgumentBuilder.argument(command.getArgumentName(), command.getArgumentType()) + if (argCmd.getValue() instanceof LiteralCommand) { + LiteralCommand command = (LiteralCommand) argCmd.getValue(); + nextBuilder = CommandManager.literal(argCmd.getKey()) .executes(context -> { ServerCommandEvent event = new ServerCommandEvent(); event.setContext(context); + event.setCommand(command); command.execute(event); return command.isSuccess; } - )); - forArgsCmd(command, builder2); - continue; + ); } - if (argCmd.getValue() instanceof LiteralCommand) { - LiteralCommand command = (LiteralCommand) argCmd.getValue(); - LiteralArgumentBuilder builder2 = ((LiteralArgumentBuilder) builder).then(LiteralArgumentBuilder.literal(argCmd.getKey()) + + if (argCmd.getValue() instanceof RequiredCommand) { + RequiredCommand command = (RequiredCommand) argCmd.getValue(); + + nextBuilder = CommandManager.argument(argCmd.getKey(), command.getArgumentType()) .executes(context -> { ServerCommandEvent event = new ServerCommandEvent(); + if (command instanceof IntegerCommand) { + event = new IntegerCommandEvent(); + } + if (command instanceof StringCommand) { + event = new StringCommandEvent(); + } + if (command instanceof EntityCommand) { + event = new EntityCommandEvent(); + } + if (command instanceof EntitiesCommand) { + event = new EntitiesCommandEvent(); + } + if (command instanceof PlayerCommand) { + event = new PlayerCommandEvent(); + } + if (command instanceof PlayersCommand) { + event = new PlayersCommandEvent(); + } + if (command instanceof ItemCommand) { + event = new ItemCommandEvent(); + } + event.setContext(context); + event.setCommand(command); command.execute(event); return command.isSuccess; } - )); - forArgsCmd(command, builder2); + ); } + forArgsCmd(argCmd.getValue(), nextBuilder); + ((LiteralArgumentBuilder) builder).then(nextBuilder); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java index 67af43000..69676a52f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java @@ -1,4 +1,33 @@ package ml.pkom.mcpitanlibarch.api.command; +import net.minecraft.server.command.ServerCommandSource; + public class CommandSettings { + private int permissionLevel = -1; + private ICustom iCustom = null; + + public boolean requires(ServerCommandSource source) { + + return customRequires(source) && (permissionLevel == -1 || source.hasPermissionLevel(permissionLevel)); + } + + private boolean customRequires(ServerCommandSource source) { + if (iCustom == null) return true; + return iCustom.custom(source); + } + + public CommandSettings permissionLevel(int level) { + this.permissionLevel = level; + return this; + } + + public CommandSettings custom(ICustom iCustom) { + this.iCustom = iCustom; + return this; + } + + @FunctionalInterface + public interface ICustom { + boolean custom(ServerCommandSource source); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java index 1b3d4cb9c..c0510c381 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java @@ -3,4 +3,5 @@ import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; public abstract class LiteralCommand extends AbstractCommand { + } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/RequiredCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/RequiredCommand.java deleted file mode 100644 index 02effff7b..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/RequiredCommand.java +++ /dev/null @@ -1,9 +0,0 @@ -package ml.pkom.mcpitanlibarch.api.command; - -import com.mojang.brigadier.arguments.ArgumentType; - -public abstract class RequiredCommand extends AbstractCommand { - public abstract String getArgumentName(); - - public abstract ArgumentType getArgumentType(); -} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntitiesCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntitiesCommand.java new file mode 100644 index 000000000..23f823ed8 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntitiesCommand.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import ml.pkom.mcpitanlibarch.api.event.EntitiesCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; + +public abstract class EntitiesCommand extends RequiredCommand { + @Override + public EntityArgumentType getArgumentType() { + return EntityArgumentType.entities(); + } + + public abstract void execute(EntitiesCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((EntitiesCommandEvent) event); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntityCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntityCommand.java new file mode 100644 index 000000000..fa098416e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntityCommand.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import ml.pkom.mcpitanlibarch.api.event.EntityCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; + +public abstract class EntityCommand extends RequiredCommand { + @Override + public EntityArgumentType getArgumentType() { + return EntityArgumentType.entity(); + } + + public abstract void execute(EntityCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((EntityCommandEvent) event); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/GreedyStringCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/GreedyStringCommand.java new file mode 100644 index 000000000..3be923519 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/GreedyStringCommand.java @@ -0,0 +1,12 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import com.mojang.brigadier.arguments.StringArgumentType; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.StringCommandEvent; + +public abstract class GreedyStringCommand extends StringCommand { + @Override + public StringArgumentType getArgumentType() { + return StringArgumentType.greedyString(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/IntegerCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/IntegerCommand.java new file mode 100644 index 000000000..b20f8b2d3 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/IntegerCommand.java @@ -0,0 +1,19 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import com.mojang.brigadier.arguments.IntegerArgumentType; +import ml.pkom.mcpitanlibarch.api.event.IntegerCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; + +public abstract class IntegerCommand extends RequiredCommand { + @Override + public IntegerArgumentType getArgumentType() { + return IntegerArgumentType.integer(); + } + + public abstract void execute(IntegerCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((IntegerCommandEvent) event); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/ItemCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/ItemCommand.java new file mode 100644 index 000000000..960517214 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/ItemCommand.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import ml.pkom.mcpitanlibarch.api.event.ItemCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.minecraft.command.argument.ItemStackArgumentType; +import net.minecraft.entity.Entity; + +public abstract class ItemCommand extends RequiredCommand { + @Override + public ItemStackArgumentType getArgumentType() { + return ItemStackArgumentType.itemStack(); + } + + public abstract void execute(ItemCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((ItemCommandEvent) event); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayerCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayerCommand.java new file mode 100644 index 000000000..26c2353ca --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayerCommand.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import ml.pkom.mcpitanlibarch.api.event.PlayerCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; + +public abstract class PlayerCommand extends RequiredCommand { + @Override + public EntityArgumentType getArgumentType() { + return EntityArgumentType.player(); + } + + public abstract void execute(PlayerCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((PlayerCommandEvent) event); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayersCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayersCommand.java new file mode 100644 index 000000000..1d798f9de --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayersCommand.java @@ -0,0 +1,21 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import ml.pkom.mcpitanlibarch.api.event.EntityCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.PlayersCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; + +public abstract class PlayersCommand extends RequiredCommand { + @Override + public EntityArgumentType getArgumentType() { + return EntityArgumentType.players(); + } + + public abstract void execute(PlayersCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((PlayersCommandEvent) event); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/RequiredCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/RequiredCommand.java new file mode 100644 index 000000000..daca91561 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/RequiredCommand.java @@ -0,0 +1,11 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import com.mojang.brigadier.arguments.ArgumentType; +import com.mojang.brigadier.arguments.IntegerArgumentType; +import ml.pkom.mcpitanlibarch.api.command.AbstractCommand; + +public abstract class RequiredCommand extends AbstractCommand { + public abstract String getArgumentName(); + + public abstract ArgumentType getArgumentType(); +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/StringCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/StringCommand.java new file mode 100644 index 000000000..68f6d5989 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/StringCommand.java @@ -0,0 +1,19 @@ +package ml.pkom.mcpitanlibarch.api.command.argument; + +import com.mojang.brigadier.arguments.StringArgumentType; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.StringCommandEvent; + +public abstract class StringCommand extends RequiredCommand { + @Override + public StringArgumentType getArgumentType() { + return StringArgumentType.string(); + } + + public abstract void execute(StringCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((StringCommandEvent) event); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java index ca0ddd4da..36b944fb0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java @@ -2,9 +2,11 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.StringRange; +import ml.pkom.mcpitanlibarch.api.command.AbstractCommand; public class CommandEvent { public CommandContext context; + public AbstractCommand command; public CommandContext getContext() { return context; @@ -21,4 +23,12 @@ public String getInput() { public StringRange getRange() { return context.getRange(); } + + public void setCommand(AbstractCommand command) { + this.command = command; + } + + public AbstractCommand getCommand() { + return command; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntitiesCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntitiesCommandEvent.java new file mode 100644 index 000000000..d4c71c1f6 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntitiesCommandEvent.java @@ -0,0 +1,16 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import ml.pkom.mcpitanlibarch.api.command.argument.EntitiesCommand; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; + +public class EntitiesCommandEvent extends RequiredCommandEvent { + public Entity getValue() { + try { + return EntityArgumentType.getEntity(context, ((EntitiesCommand) getCommand()).getArgumentName()); + } catch (CommandSyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntityCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntityCommandEvent.java new file mode 100644 index 000000000..fadf3e096 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntityCommandEvent.java @@ -0,0 +1,16 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import ml.pkom.mcpitanlibarch.api.command.argument.EntityCommand; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; + +public class EntityCommandEvent extends RequiredCommandEvent { + public Entity getValue() { + try { + return EntityArgumentType.getEntity(context, ((EntityCommand) getCommand()).getArgumentName()); + } catch (CommandSyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/IntegerCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/IntegerCommandEvent.java new file mode 100644 index 000000000..8bb2ed715 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/IntegerCommandEvent.java @@ -0,0 +1,10 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import com.mojang.brigadier.arguments.IntegerArgumentType; +import ml.pkom.mcpitanlibarch.api.command.argument.IntegerCommand; + +public class IntegerCommandEvent extends RequiredCommandEvent { + public Integer getValue() { + return IntegerArgumentType.getInteger(context, ((IntegerCommand) getCommand()).getArgumentName()); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ItemCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ItemCommandEvent.java new file mode 100644 index 000000000..3e835b698 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ItemCommandEvent.java @@ -0,0 +1,11 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import ml.pkom.mcpitanlibarch.api.command.argument.ItemCommand; +import net.minecraft.command.argument.ItemStackArgumentType; +import net.minecraft.item.Item; + +public class ItemCommandEvent extends RequiredCommandEvent { + public Item getValue() { + return ItemStackArgumentType.getItemStackArgument(context, ((ItemCommand) getCommand()).getArgumentName()).getItem(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayerCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayerCommandEvent.java new file mode 100644 index 000000000..49e85f5d6 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayerCommandEvent.java @@ -0,0 +1,16 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import ml.pkom.mcpitanlibarch.api.command.argument.PlayerCommand; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; + +public class PlayerCommandEvent extends RequiredCommandEvent { + public Entity getValue() { + try { + return EntityArgumentType.getPlayer(context, ((PlayerCommand) getCommand()).getArgumentName()); + } catch (CommandSyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayersCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayersCommandEvent.java new file mode 100644 index 000000000..b8ba0c265 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayersCommandEvent.java @@ -0,0 +1,16 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import ml.pkom.mcpitanlibarch.api.command.argument.PlayersCommand; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; + +public class PlayersCommandEvent extends RequiredCommandEvent { + public Entity getValue() { + try { + return EntityArgumentType.getPlayer(context, ((PlayersCommand) getCommand()).getArgumentName()); + } catch (CommandSyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/RequiredCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/RequiredCommandEvent.java new file mode 100644 index 000000000..13bf6e99c --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/RequiredCommandEvent.java @@ -0,0 +1,5 @@ +package ml.pkom.mcpitanlibarch.api.event; + +public abstract class RequiredCommandEvent extends ServerCommandEvent { + public abstract Object getValue(); +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java index f6a733e6d..46260a71f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java @@ -41,7 +41,7 @@ public String getInput() { return context.getInput(); } - public Command getCommand() { + public Command getContextCommand() { return context.getCommand(); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/StringCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/StringCommandEvent.java new file mode 100644 index 000000000..d4a9b3963 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/StringCommandEvent.java @@ -0,0 +1,10 @@ +package ml.pkom.mcpitanlibarch.api.event; + +import com.mojang.brigadier.arguments.StringArgumentType; +import ml.pkom.mcpitanlibarch.api.command.argument.StringCommand; + +public class StringCommandEvent extends RequiredCommandEvent { + public String getValue() { + return StringArgumentType.getString(context, ((StringCommand) getCommand()).getArgumentName()); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java index cf6f04a94..32f84d549 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java @@ -2,25 +2,42 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import ml.pkom.mcpitanlibarch.api.command.AbstractCommand; +import ml.pkom.mcpitanlibarch.api.command.CommandSettings; import ml.pkom.mcpitanlibarch.api.command.LiteralCommand; +import ml.pkom.mcpitanlibarch.api.command.argument.IntegerCommand; +import ml.pkom.mcpitanlibarch.api.event.IntegerCommandEvent; import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; import net.minecraft.item.ItemStack; public class ExampleCommand extends LiteralCommand { @Override - public void init() { + public void init(CommandSettings settings) { addArgumentCommand("item", new LiteralCommand() { @Override - public void init() { + public void init(CommandSettings settings) { + addArgumentCommand(new IntegerCommand() { + @Override + public void execute(IntegerCommandEvent event) { + try { + event.getPlayer().offerOrDrop(new ItemStack(ExampleMod.EXAMPLE_ITEM_SUPPLIER.getOrNull(), event.getValue())); + } catch (CommandSyntaxException ignored) { + } + } + + @Override + public String getArgumentName() { + return "count"; + } + }); } @Override public void execute(ServerCommandEvent event) { try { event.getPlayer().offerOrDrop(new ItemStack(ExampleMod.EXAMPLE_ITEM_SUPPLIER.getOrNull())); - } catch (CommandSyntaxException e) { + } catch (CommandSyntaxException ignored) { } } From a14e13fe800bb5270f40ed4819f6de39899be2e0 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Dec 2022 16:59:50 +0900 Subject: [PATCH 058/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8686d7d0d..4dba9f19a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.4-1.18 +mod_version=1.2.5-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 8c164f7a2eeff17b217f5642e9e7e4e562e99000 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Dec 2022 17:56:27 +0900 Subject: [PATCH 059/617] fix --- .../ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java index 07a332517..dd359c07f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java @@ -35,7 +35,7 @@ public static void register(LiteralArgumentBuilder builder) ); } - private static void forArgsCmd(AbstractCommand absCmd, ArgumentBuilder builder) { + private static > void forArgsCmd(AbstractCommand absCmd, ArgumentBuilder builder) { if (!absCmd.getArgumentCommands().isEmpty()) { // 引数コマンド @@ -92,7 +92,7 @@ private static void forArgsCmd(AbstractCommand absCmd, ArgumentBuilder) builder).then(nextBuilder); + builder.then(nextBuilder); } } From 57c32392ab7dc8fc00f6d3474ebb948c1a4c3ee3 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Dec 2022 17:57:10 +0900 Subject: [PATCH 060/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4dba9f19a..859cf5fa0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.5-1.18 +mod_version=1.2.6-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 08822e3c7d9bbb7717b259330e9cd08266d84ef1 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 17 Dec 2022 21:52:05 +0900 Subject: [PATCH 061/617] update api --- .../api/client/SimpleHandledScreen.java | 2 + .../api/gui/ExtendedScreenHandler.java | 15 ++++++ .../api/gui/ExtendedScreenHandlerType.java | 24 +++++++++ .../api/gui/SimpleScreenHandler.java | 51 ++++++++++++++++++- .../pkom/mcpitanlibarch/api/nbt/NbtTag.java | 1 + .../api/registry/ArchRegistry.java | 7 +++ .../pkom/mcpitanlibarch/api/tag/TagKey.java | 19 ++++++- .../api/tile/ExtendBlockEntity.java | 22 ++++++++ .../api/util/EntityTypeUtil.java | 15 ++++++ .../mcpitanlibarch/api/util/FluidUtil.java | 15 ++++++ .../mcpitanlibarch/api/util/ItemUtil.java | 1 + .../api/util/ScreenHandlerUtil.java | 4 ++ .../mcpitanlibarch/api/util/WorldUtil.java | 10 ++++ .../api/util/client/ScreenUtil.java | 17 +++++++ 14 files changed, 200 insertions(+), 3 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandler.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 389f770d0..32e89a72d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -145,4 +145,6 @@ public int getBackgroundHeight() { public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { renderOverride(matrices, mouseX, mouseY, delta); } + + } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandler.java new file mode 100644 index 000000000..d6f3d6fe9 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandler.java @@ -0,0 +1,15 @@ +package ml.pkom.mcpitanlibarch.api.gui; + +import net.minecraft.network.PacketByteBuf; +import net.minecraft.screen.ScreenHandlerType; +import org.jetbrains.annotations.Nullable; + +public class ExtendedScreenHandler extends SimpleScreenHandler { + protected ExtendedScreenHandler(@Nullable ScreenHandlerType type, int syncId, PacketByteBuf buf) { + this(type, syncId); + } + + protected ExtendedScreenHandler(@Nullable ScreenHandlerType type, int syncId) { + super(type, syncId); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java new file mode 100644 index 000000000..56155ee99 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java @@ -0,0 +1,24 @@ +package ml.pkom.mcpitanlibarch.api.gui; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; + +public class ExtendedScreenHandlerType extends ScreenHandlerType { + + public ExtendedScreenHandlerType(Factory factory) { + super(factory); + this.factory = factory; + } + + private final Factory factory; + + public T create(int syncId, PlayerInventory playerInventory, PacketByteBuf buf) { + return this.factory.create(syncId, playerInventory, buf); + } + + public interface Factory extends ScreenHandlerType.Factory { + T create(int syncId, PlayerInventory playerInventory, PacketByteBuf buf); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java index 439bfb8e7..47f7ca6af 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java @@ -28,11 +28,41 @@ public boolean canUse(Player player) { return true; } - protected Slot addNormalSlot(Inventory inventory, int index, int x, int y) { + public Slot addNormalSlot(Inventory inventory, int index, int x, int y) { Slot slot = new Slot(inventory, index, x, y); return this.addSlot(slot); } + public Slot addSlot(Inventory inventory, int index, int x, int y, SlotFactory factory) { + Slot slot = factory.create(inventory, index, x, y); + return this.addSlot(slot); + } + + public interface SlotFactory { + T create(Inventory inventory, int index, int x, int y); + } + + public Slot callAddSlot(Slot slot) { + return this.addSlot(slot); + } + + @Deprecated + @Override + protected Slot addSlot(Slot slot) { + return super.addSlot(slot); + } + + @Deprecated + @Override + public void close(PlayerEntity player) { + this.close(new Player(player)); + } + + public void close(Player player) { + super.close(player.getPlayerEntity()); + } + + public static final int DEFAULT_SLOT_SIZE = 18; /** @@ -116,7 +146,22 @@ protected List addSlotsY(Inventory inventory, int firstIndex, int x, int f return slots; } + @Deprecated public ItemStack quickMoveOverride(PlayerEntity player, int index) { + return quickMoveOverride(new Player(player), index); + } + + public boolean callInsertItem(ItemStack stack, int startIndex, int endIndex, boolean fromLast) { + return this.insertItem(stack, startIndex, endIndex, fromLast); + } + + @Deprecated + @Override + protected boolean insertItem(ItemStack stack, int startIndex, int endIndex, boolean fromLast) { + return super.insertItem(stack, startIndex, endIndex, fromLast); + } + + public ItemStack quickMoveOverride(Player player, int index) { ItemStack itemStack = ItemStack.EMPTY; Slot slot = this.slots.get(index); if (slot.hasStack()) { @@ -140,12 +185,14 @@ public ItemStack quickMoveOverride(PlayerEntity player, int index) { return ItemStack.EMPTY; } - slot.onTakeItem(player, itemStack2); + slot.onTakeItem(player.getEntity(), itemStack2); } return itemStack; } + + @Deprecated @Override public ItemStack transferSlot(PlayerEntity player, int slot) { return quickMoveOverride(player, slot); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/nbt/NbtTag.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/nbt/NbtTag.java index d27ae8aad..b46a37933 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/nbt/NbtTag.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/nbt/NbtTag.java @@ -4,6 +4,7 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtType; +@Deprecated public class NbtTag extends NbtCompound { public NbtTag() { super(); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index a9bcbe36d..416c37181 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -1,10 +1,13 @@ package ml.pkom.mcpitanlibarch.api.registry; import com.google.common.base.Suppliers; +import dev.architectury.registry.menu.MenuRegistry; import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; +import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandler; +import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerType; import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; @@ -60,6 +63,10 @@ public RegistryEvent> registerScreenHandlerType(Identifier return new RegistryEvent<>(SCREEN_HANDLER_TYPE.register(id, supplier)); } + public RegistryEvent> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { + return registerScreenHandlerType(id, () -> MenuRegistry.ofExtended((id1, inventory, buf) -> supplier.get().create(id1, inventory, buf))); + } + public RegistryEvent> registerMenu(Identifier id, Supplier> supplier) { return registerScreenHandlerType(id, supplier); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java index 6503747ee..6cb475f44 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java @@ -1,5 +1,13 @@ package ml.pkom.mcpitanlibarch.api.tag; +import ml.pkom.mcpitanlibarch.api.util.BlockUtil; +import ml.pkom.mcpitanlibarch.api.util.EntityTypeUtil; +import ml.pkom.mcpitanlibarch.api.util.FluidUtil; +import ml.pkom.mcpitanlibarch.api.util.ItemUtil; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityType; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; @@ -34,6 +42,15 @@ public enum Type { } public boolean isOf(T value) { - return RegistryEntry.of(value).isIn(tagKey); + if (value instanceof Item) + return getTagKey() == net.minecraft.tag.TagKey.of(Registry.ITEM_KEY, ItemUtil.toID((Item) value)); + if (value instanceof Block) + return getTagKey() == net.minecraft.tag.TagKey.of(Registry.BLOCK_KEY, BlockUtil.toID((Block) value)); + if (value instanceof Fluid) + return getTagKey() == net.minecraft.tag.TagKey.of(Registry.FLUID_KEY, FluidUtil.toID((Fluid) value)); + if (value instanceof EntityType) + return getTagKey() == net.minecraft.tag.TagKey.of(Registry.ENTITY_TYPE_KEY, EntityTypeUtil.toID((EntityType) value)); + + return RegistryEntry.of(value).isIn(getTagKey()); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java index 38cb78416..d1ae1a077 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java @@ -1,10 +1,12 @@ package ml.pkom.mcpitanlibarch.api.tile; import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; +import ml.pkom.mcpitanlibarch.api.nbt.NbtTag; import ml.pkom.mcpitanlibarch.api.world.ExtendWorld; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -18,6 +20,26 @@ public ExtendBlockEntity(BlockEntityType type, TileCreateEvent event) { this(type, event.getBlockPos(), event.getBlockState()); } + public void writeNbtOverride(NbtCompound nbt) { + super.writeNbt(nbt); + } + + public void readNbtOverride(NbtCompound nbt) { + super.readNbt(nbt); + } + + @Deprecated + @Override + public void writeNbt(NbtCompound nbt) { + writeNbtOverride(nbt); + } + + @Deprecated + @Override + public void readNbt(NbtCompound nbt) { + readNbtOverride(nbt); + } + @Override public void setWorld(World world) { super.setWorld(world); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java new file mode 100644 index 000000000..36d1ef1ff --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java @@ -0,0 +1,15 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.entity.EntityType; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public class EntityTypeUtil { + public static Identifier toID(EntityType entityType) { + return Registry.ENTITY_TYPE.getId(entityType); + } + + public static EntityType fromId(Identifier identifier) { + return Registry.ENTITY_TYPE.get(identifier); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java new file mode 100644 index 000000000..1495f051d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java @@ -0,0 +1,15 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.fluid.Fluid; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public class FluidUtil { + public static Identifier toID(Fluid fluid) { + return Registry.FLUID.getId(fluid); + } + + public static Fluid fromId(Identifier identifier) { + return Registry.FLUID.get(identifier); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index 7f48eae97..54c172675 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -27,6 +27,7 @@ public static boolean isIn(ItemStack stack, TagKey tagKey) { } public static boolean isIn(Item item, TagKey tagKey) { + if (item.getRegistryEntry().isIn(tagKey.getTagKey())) return true; return tagKey.isOf(item); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java index f87733a89..d0784238b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java @@ -14,6 +14,10 @@ public static DefaultedList getSlots(ScreenHandler screenHandler) { return screenHandler.slots; } + public static Slot getSlot(ScreenHandler screenHandler, int index) { + return screenHandler.getSlot(index); + } + public static List> getAllScreenHandlerTypes() { List> screenHandlerTypes = new ArrayList<>(); for (ScreenHandlerType screenHandler : Registry.SCREEN_HANDLER) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index bf7d21a3e..f80a716f0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -1,5 +1,7 @@ package ml.pkom.mcpitanlibarch.api.util; +import net.minecraft.block.Block; +import net.minecraft.fluid.Fluid; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -32,6 +34,14 @@ public static boolean isClient(World world) { return world.isClient(); } + public static void scheduleBlockTick(World world, BlockPos pos, Block block, int delay) { + world.createAndScheduleBlockTick(pos, block, delay); + } + + public static void scheduleFluidTick(World world, BlockPos pos, Fluid fluid, int delay) { + world.createAndScheduleFluidTick(pos, fluid, delay); + } + public static boolean isServer(World world) { return !isClient(world); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index ef22862d1..35ee90df7 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -3,7 +3,11 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.render.GameRenderer; +import net.minecraft.text.Text; import net.minecraft.util.Identifier; @Environment(EnvType.CLIENT) @@ -20,4 +24,17 @@ public static void setBackground(Identifier GUI, float f, float g, float h, floa public static void setBackground(Identifier GUI) { setBackground(GUI, 1.0F, 1.0F, 1.0F, 1.0F); } + + // ~1.19.2 + public static void setRepeatEvents(boolean isRepeatEvents) { + MinecraftClient.getInstance().keyboard.setRepeatEvents(isRepeatEvents); + } + + public static ButtonWidget createButtonWidget(int x, int y, int width, int height, Text message, ButtonWidget.PressAction onPress) { + return createButtonWidget(x, y, width, height, message, onPress, ButtonWidget.EMPTY); + } + + public static ButtonWidget createButtonWidget(int x, int y, int width, int height, Text message, ButtonWidget.PressAction onPress, ButtonWidget.TooltipSupplier tooltipSupplier) { + return new ButtonWidget(x, y, width , height, message, onPress, tooltipSupplier); + } } From 28d034fe6cfe65f73f62d5e3b74d998f9c2055a5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 17 Dec 2022 21:52:22 +0900 Subject: [PATCH 062/617] version 1.2.8 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 859cf5fa0..72639dab2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.6-1.18 +mod_version=1.2.8-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From fae3fd4a42e392de098d665ea243cefc59d0bf76 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 21 Dec 2022 15:58:59 +0900 Subject: [PATCH 063/617] update api --- .../pkom/mcpitanlibarch/MCPitanLibarch.java | 32 ++++++++ .../api/gui/inventory/IInventory.java | 77 +++++++++++++++++++ .../api/registry/ArchRegistry.java | 6 ++ 3 files changed, 115 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/inventory/IInventory.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java index 2c1120b00..52d4b3b9f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java @@ -1,14 +1,46 @@ package ml.pkom.mcpitanlibarch; +import ml.pkom.easyapi.config.Config; +import ml.pkom.easyapi.config.YamlConfig; import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; import ml.pkom.mcpitanlibarch.test.ExampleMod; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class MCPitanLibarch { public static final String MOD_ID = "mcpitanlibarch"; + private static File configFile = new File(PlatformUtil.getConfigFolder().toFile(), MOD_ID + "/blacklist.json"); + + public static Config config = new YamlConfig(); + private static boolean configLoaded = false; + + public static List itemBlackList = new ArrayList<>(); + public static List blockBlackList = new ArrayList<>(); + public static void init() { + configInit(); if (PlatformUtil.isDevelopmentEnvironment()) { ExampleMod.init(); } } + + public static void configInit() { + if (configLoaded) return; + configLoaded = true; + config.setString("item", "examplemod:hogehoge_item,examplemod:fuga_item"); + config.setString("block", "examplemod:hogehoge_block,examplemod:fuga_block"); + + config.load(configFile); + + itemBlackList.addAll(Arrays.asList(config.getString("item").split(","))); + blockBlackList.addAll(Arrays.asList(config.getString("block").split(","))); + + config.save(configFile); + + } + } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/inventory/IInventory.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/inventory/IInventory.java new file mode 100644 index 000000000..95554c211 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/inventory/IInventory.java @@ -0,0 +1,77 @@ +package ml.pkom.mcpitanlibarch.api.gui.inventory; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.Inventories; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; + +public interface IInventory extends Inventory { + + DefaultedList getItems(); + + static IInventory of(DefaultedList items) { + return () -> items; + } + + static IInventory ofSize(int size) { + return of(DefaultedList.ofSize(size, ItemStack.EMPTY)); + } + + @Override + default int size() { + return getItems().size(); + } + + @Override + default boolean isEmpty() { + for (int i = 0; i < size(); i++) { + ItemStack stack = getStack(i); + if (!stack.isEmpty()) { + return false; + } + } + return true; + } + + @Override + default ItemStack getStack(int slot) { + return getItems().get(slot); + } + + @Override + default ItemStack removeStack(int slot, int count) { + ItemStack result = Inventories.splitStack(getItems(), slot, count); + if (!result.isEmpty()) { + markDirty(); + } + return result; + } + + @Override + default ItemStack removeStack(int slot) { + return Inventories.removeStack(getItems(), slot); + } + + @Override + default void setStack(int slot, ItemStack stack) { + getItems().set(slot, stack); + if (stack.getCount() > getMaxCountPerStack()) { + stack.setCount(getMaxCountPerStack()); + } + } + + @Override + default void clear() { + getItems().clear(); + } + + @Override + default void markDirty() { + } + + @Override + default boolean canPlayerUse(PlayerEntity player) { + return true; + } +} \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 416c37181..721a9b33d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -5,11 +5,15 @@ import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; +import ml.pkom.mcpitanlibarch.MCPitanLibarch; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandler; import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerType; import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; +import ml.pkom.mcpitanlibarch.api.item.ExtendSettings; +import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; +import net.minecraft.block.Material; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; @@ -50,12 +54,14 @@ public static ArchRegistry createRegistry(String MOD_ID) { } public RegistryEvent registerItem(Identifier id, Supplier supplier) { + if (MCPitanLibarch.itemBlackList.contains(id.toString())) supplier = () -> new Item(new ExtendSettings()); RegistrySupplier registrySupplier = ITEMS.register(id, supplier); CreativeTabManager.register(id); return new RegistryEvent<>(registrySupplier); } public RegistryEvent registerBlock(Identifier id, Supplier supplier) { + if (MCPitanLibarch.blockBlackList.contains(id.toString())) supplier = () -> new Block(AbstractBlock.Settings.of(Material.STONE)); return new RegistryEvent<>(BLOCKS.register(id, supplier)); } From 8d09afdd4a3aa9128874f5f7ed3efa59a4fa7519 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 21 Dec 2022 15:59:16 +0900 Subject: [PATCH 064/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 72639dab2..d245558ff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.8-1.18 +mod_version=1.2.9-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 6f64d95961fb9c0547b6a8967a20d99009728888 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 23 Dec 2022 14:54:19 +0900 Subject: [PATCH 065/617] snakeyaml --- build.gradle | 2 +- fabric/build.gradle | 2 ++ forge/build.gradle | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3573dd513..7a0b39dd0 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ subprojects { mappings "net.fabricmc:yarn:${rootProject.yarn_mappings}:v2" // https://mvnrepository.com/artifact/org.yaml/snakeyaml - implementation 'org.yaml:snakeyaml:1.8' + implementation 'org.yaml:snakeyaml:1.33' } } diff --git a/fabric/build.gradle b/fabric/build.gradle index f4d631232..688b6acb7 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -23,6 +23,8 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } + + shadowCommon 'org.yaml:snakeyaml:1.33' } processResources { diff --git a/forge/build.gradle b/forge/build.gradle index 51a986ea1..0b890cefa 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -21,6 +21,8 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } + + shadowCommon 'org.yaml:snakeyaml:1.33' } processResources { From 350a7c9c19fb058cbcc77ebeb42e06a4dbaca1d6 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 23 Dec 2022 15:04:57 +0900 Subject: [PATCH 066/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d245558ff..e1a19b76d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.2.9-1.18 +mod_version=1.3.0-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 1b1fc791da3ba19434324c82209e5632cdbff075 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 23 Dec 2022 15:05:06 +0900 Subject: [PATCH 067/617] fix item group --- .../api/item/DefaultItemGroups.java | 80 ++++++++++++++----- 1 file changed, 62 insertions(+), 18 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java index 05ef99108..ba53383bc 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java @@ -3,24 +3,68 @@ import net.minecraft.item.ItemGroup; public class DefaultItemGroups { - public static final ItemGroup BUILDING_BLOCKS = ItemGroup.BUILDING_BLOCKS; - public static final ItemGroup COLORED_BLOCKS = ItemGroup.BUILDING_BLOCKS; - public static final ItemGroup NATURAL = ItemGroup.DECORATIONS; - public static final ItemGroup FUNCTIONAL = ItemGroup.TRANSPORTATION; - public static final ItemGroup REDSTONE = ItemGroup.REDSTONE; - public static final ItemGroup HOTBAR = ItemGroup.HOTBAR; - public static final ItemGroup SEARCH = ItemGroup.SEARCH; - public static final ItemGroup TOOLS = ItemGroup.TOOLS; - public static final ItemGroup COMBAT = ItemGroup.COMBAT; - public static final ItemGroup FOOD_AND_DRINK = ItemGroup.FOOD; - public static final ItemGroup INGREDIENTS = ItemGroup.MISC; - public static final ItemGroup SPAWN_EGGS = ItemGroup.MISC; - public static final ItemGroup OPERATOR = ItemGroup.MISC; - public static final ItemGroup INVENTORY = ItemGroup.INVENTORY; + + public static final ItemGroup BUILDING_BLOCKS; + public static final ItemGroup COLORED_BLOCKS; + public static final ItemGroup NATURAL; + public static final ItemGroup FUNCTIONAL; + public static final ItemGroup REDSTONE; + public static final ItemGroup HOTBAR; + public static final ItemGroup SEARCH; + public static final ItemGroup TOOLS; + public static final ItemGroup COMBAT; + public static final ItemGroup FOOD_AND_DRINK; + public static final ItemGroup INGREDIENTS; + public static final ItemGroup SPAWN_EGGS; + public static final ItemGroup OPERATOR; + public static final ItemGroup INVENTORY; // ~1.19.2 Item Group - public static final ItemGroup BREWING = ItemGroup.BREWING; // if version is 1.19.3, FOOD_AND_DRINK - public static final ItemGroup TRANSPORTATION = ItemGroup.TRANSPORTATION; // if version is 1.19.3, FUNCTIONAL - public static final ItemGroup DECORATIONS = ItemGroup.DECORATIONS; // if version is 1.19.3, NATURAL - public static final ItemGroup MISC = ItemGroup.MISC; // if version is 1.19.3, INGREDIENTS + public static final ItemGroup BREWING; // if version is 1.19.3, FOOD_AND_DRINK + public static final ItemGroup TRANSPORTATION; // if version is 1.19.3, FUNCTIONAL + public static final ItemGroup DECORATIONS; // if version is 1.19.3, NATURAL + public static final ItemGroup MISC; // if version is 1.19.3, INGREDIENTS + + static { + BUILDING_BLOCKS = ItemGroup.BUILDING_BLOCKS; + COLORED_BLOCKS = ItemGroup.BUILDING_BLOCKS; + NATURAL = ItemGroup.DECORATIONS; + FUNCTIONAL = ItemGroup.TRANSPORTATION; + REDSTONE = ItemGroup.REDSTONE; + + ItemGroup HOTBAR_TMP; + try { + HOTBAR_TMP = ItemGroup.HOTBAR; + } catch (Exception ignored) { + HOTBAR_TMP = null; + } + + HOTBAR = HOTBAR_TMP; + + ItemGroup SEARCH_TMP; + try { + SEARCH_TMP = ItemGroup.SEARCH; + } catch (Exception ignored) { + SEARCH_TMP = null; + } + SEARCH = SEARCH_TMP; + TOOLS = ItemGroup.TOOLS; + COMBAT = ItemGroup.COMBAT; + FOOD_AND_DRINK = ItemGroup.FOOD; + INGREDIENTS = ItemGroup.MISC; + SPAWN_EGGS = ItemGroup.MISC; + OPERATOR = ItemGroup.MISC; + + ItemGroup INVENTORY_TMP; + try { + INVENTORY_TMP = ItemGroup.INVENTORY; + } catch (Exception ignored) { + INVENTORY_TMP = null; + } + INVENTORY = INVENTORY_TMP; + BREWING = ItemGroup.BREWING; + TRANSPORTATION = ItemGroup.TRANSPORTATION; + DECORATIONS = ItemGroup.DECORATIONS; + MISC = ItemGroup.MISC; + } } From 71f579fe7d75c7d67835c22cca94468d94d46e07 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 23 Dec 2022 16:39:58 +0900 Subject: [PATCH 068/617] Revert "fix item group" This reverts commit 1b1fc791da3ba19434324c82209e5632cdbff075. --- .../api/item/DefaultItemGroups.java | 80 +++++-------------- 1 file changed, 18 insertions(+), 62 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java index ba53383bc..05ef99108 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java @@ -3,68 +3,24 @@ import net.minecraft.item.ItemGroup; public class DefaultItemGroups { - - public static final ItemGroup BUILDING_BLOCKS; - public static final ItemGroup COLORED_BLOCKS; - public static final ItemGroup NATURAL; - public static final ItemGroup FUNCTIONAL; - public static final ItemGroup REDSTONE; - public static final ItemGroup HOTBAR; - public static final ItemGroup SEARCH; - public static final ItemGroup TOOLS; - public static final ItemGroup COMBAT; - public static final ItemGroup FOOD_AND_DRINK; - public static final ItemGroup INGREDIENTS; - public static final ItemGroup SPAWN_EGGS; - public static final ItemGroup OPERATOR; - public static final ItemGroup INVENTORY; + public static final ItemGroup BUILDING_BLOCKS = ItemGroup.BUILDING_BLOCKS; + public static final ItemGroup COLORED_BLOCKS = ItemGroup.BUILDING_BLOCKS; + public static final ItemGroup NATURAL = ItemGroup.DECORATIONS; + public static final ItemGroup FUNCTIONAL = ItemGroup.TRANSPORTATION; + public static final ItemGroup REDSTONE = ItemGroup.REDSTONE; + public static final ItemGroup HOTBAR = ItemGroup.HOTBAR; + public static final ItemGroup SEARCH = ItemGroup.SEARCH; + public static final ItemGroup TOOLS = ItemGroup.TOOLS; + public static final ItemGroup COMBAT = ItemGroup.COMBAT; + public static final ItemGroup FOOD_AND_DRINK = ItemGroup.FOOD; + public static final ItemGroup INGREDIENTS = ItemGroup.MISC; + public static final ItemGroup SPAWN_EGGS = ItemGroup.MISC; + public static final ItemGroup OPERATOR = ItemGroup.MISC; + public static final ItemGroup INVENTORY = ItemGroup.INVENTORY; // ~1.19.2 Item Group - public static final ItemGroup BREWING; // if version is 1.19.3, FOOD_AND_DRINK - public static final ItemGroup TRANSPORTATION; // if version is 1.19.3, FUNCTIONAL - public static final ItemGroup DECORATIONS; // if version is 1.19.3, NATURAL - public static final ItemGroup MISC; // if version is 1.19.3, INGREDIENTS - - static { - BUILDING_BLOCKS = ItemGroup.BUILDING_BLOCKS; - COLORED_BLOCKS = ItemGroup.BUILDING_BLOCKS; - NATURAL = ItemGroup.DECORATIONS; - FUNCTIONAL = ItemGroup.TRANSPORTATION; - REDSTONE = ItemGroup.REDSTONE; - - ItemGroup HOTBAR_TMP; - try { - HOTBAR_TMP = ItemGroup.HOTBAR; - } catch (Exception ignored) { - HOTBAR_TMP = null; - } - - HOTBAR = HOTBAR_TMP; - - ItemGroup SEARCH_TMP; - try { - SEARCH_TMP = ItemGroup.SEARCH; - } catch (Exception ignored) { - SEARCH_TMP = null; - } - SEARCH = SEARCH_TMP; - TOOLS = ItemGroup.TOOLS; - COMBAT = ItemGroup.COMBAT; - FOOD_AND_DRINK = ItemGroup.FOOD; - INGREDIENTS = ItemGroup.MISC; - SPAWN_EGGS = ItemGroup.MISC; - OPERATOR = ItemGroup.MISC; - - ItemGroup INVENTORY_TMP; - try { - INVENTORY_TMP = ItemGroup.INVENTORY; - } catch (Exception ignored) { - INVENTORY_TMP = null; - } - INVENTORY = INVENTORY_TMP; - BREWING = ItemGroup.BREWING; - TRANSPORTATION = ItemGroup.TRANSPORTATION; - DECORATIONS = ItemGroup.DECORATIONS; - MISC = ItemGroup.MISC; - } + public static final ItemGroup BREWING = ItemGroup.BREWING; // if version is 1.19.3, FOOD_AND_DRINK + public static final ItemGroup TRANSPORTATION = ItemGroup.TRANSPORTATION; // if version is 1.19.3, FUNCTIONAL + public static final ItemGroup DECORATIONS = ItemGroup.DECORATIONS; // if version is 1.19.3, NATURAL + public static final ItemGroup MISC = ItemGroup.MISC; // if version is 1.19.3, INGREDIENTS } From 380bc1b6681f08a2b04a4ebe5056f2bd954bb12c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 23 Dec 2022 16:39:15 +0900 Subject: [PATCH 069/617] m --- .../java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java index 7af997874..19ef2d843 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java @@ -1,6 +1,5 @@ package ml.pkom.mcpitanlibarch.api.item; -import dev.architectury.registry.CreativeTabRegistry; import ml.pkom.mcpitanlibarch.api.util.ItemUtil; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; From 88588ffb8d134a777fa63cb0946cb8b9d887827c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 23 Dec 2022 16:58:32 +0900 Subject: [PATCH 070/617] getSlot --- .../mcpitanlibarch/api/gui/SimpleScreenHandler.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java index 47f7ca6af..fb0e95bf1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java @@ -197,4 +197,14 @@ public ItemStack quickMoveOverride(Player player, int index) { public ItemStack transferSlot(PlayerEntity player, int slot) { return quickMoveOverride(player, slot); } + + @Deprecated + @Override + public Slot getSlot(int index) { + return super.getSlot(index); + } + + public Slot callGetSlot(int index) { + return getSlot(index); + } } From ae8bb109baca2eb851defa3c7ad021ae8b985ff6 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 Dec 2022 01:07:39 +0900 Subject: [PATCH 071/617] fixed recipe remainder(fabric only) --- .../recipe/FixedRecipeRemainder.java | 7 +++++ .../fabric/mixin/RecipeMixin.java | 28 +++++++++++++++++++ .../main/resources/mcpitanlibarch.mixins.json | 3 +- .../main/resources/mcpitanlibarch.mixins.json | 2 +- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/recipe/FixedRecipeRemainder.java create mode 100644 fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/recipe/FixedRecipeRemainder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/recipe/FixedRecipeRemainder.java new file mode 100644 index 000000000..affb25f06 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/recipe/FixedRecipeRemainder.java @@ -0,0 +1,7 @@ +package ml.pkom.mcpitanlibarch.recipe; + +import net.minecraft.item.ItemStack; + +public interface FixedRecipeRemainder { + ItemStack getFixedRecipeRemainder(ItemStack stack); +} diff --git a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java b/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java new file mode 100644 index 000000000..0a69b3eed --- /dev/null +++ b/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java @@ -0,0 +1,28 @@ +package ml.pkom.mcpitanlibarch.fabric.mixin; + +import ml.pkom.mcpitanlibarch.recipe.FixedRecipeRemainder; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Recipe; +import net.minecraft.util.collection.DefaultedList; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Recipe.class) +public interface RecipeMixin { + @Inject(method = "getRemainder", at = @At("RETURN")) + default void injectGetRemainder(C inventory, CallbackInfoReturnable> cir) { + DefaultedList defaultedList = cir.getReturnValue(); + + int i = 0; + for(ItemStack stack : defaultedList) { + if (stack.getItem() instanceof FixedRecipeRemainder) { + FixedRecipeRemainder remainder = (FixedRecipeRemainder) stack.getItem(); + defaultedList.set(i, remainder.getFixedRecipeRemainder(stack)); + } + i++; + } + } +} diff --git a/fabric/src/main/resources/mcpitanlibarch.mixins.json b/fabric/src/main/resources/mcpitanlibarch.mixins.json index 5ff32912f..864f03833 100644 --- a/fabric/src/main/resources/mcpitanlibarch.mixins.json +++ b/fabric/src/main/resources/mcpitanlibarch.mixins.json @@ -1,9 +1,10 @@ { "required": true, "minVersion": "0.8", - "package": "ml.pkom.mcpitanlibarch.mixin.fabric", + "package": "ml.pkom.mcpitanlibarch.fabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ + "RecipeMixin" ], "client": [ ], diff --git a/forge/src/main/resources/mcpitanlibarch.mixins.json b/forge/src/main/resources/mcpitanlibarch.mixins.json index e3ae4ab50..f00451cf3 100644 --- a/forge/src/main/resources/mcpitanlibarch.mixins.json +++ b/forge/src/main/resources/mcpitanlibarch.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "ml.pkom.mcpitanlibarch.mixin.forge", + "package": "ml.pkom.mcpitanlibarch.forge.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ ], From 9bc4cb7b59d2cc3da74acb6d6db3b4144d538120 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 Dec 2022 01:08:04 +0900 Subject: [PATCH 072/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e1a19b76d..ca30f51d2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.3.0-1.18 +mod_version=1.3.1-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 2640e760037647578552682fb002f3729ec65597 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 Dec 2022 01:10:38 +0900 Subject: [PATCH 073/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ca30f51d2..f745ba5c9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.3.1-1.18 +mod_version=1.3.2-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From d58c2d44820740bcfe4d7d03df5a33ffdfdb714f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 Dec 2022 21:55:46 +0900 Subject: [PATCH 074/617] fix --- .../src/main/java/ml/pkom/mcpitanlibarch/Dummy.java | 4 ++++ .../ml/pkom/mcpitanlibarch/api/item/ExtendItem.java | 13 +++++++++++++ .../item/FixedRecipeRemainderItem.java} | 4 ++-- .../mcpitanlibarch/fabric/mixin/RecipeMixin.java | 8 ++++---- 4 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/Dummy.java rename common/src/main/java/ml/pkom/mcpitanlibarch/{recipe/FixedRecipeRemainder.java => api/item/FixedRecipeRemainderItem.java} (53%) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/Dummy.java b/common/src/main/java/ml/pkom/mcpitanlibarch/Dummy.java new file mode 100644 index 000000000..d523b5c3a --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/Dummy.java @@ -0,0 +1,4 @@ +package ml.pkom.mcpitanlibarch; + +public class Dummy { +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java index a0fe64754..e38b9852d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java @@ -1,5 +1,6 @@ package ml.pkom.mcpitanlibarch.api.item; +import ml.pkom.mcpitanlibarch.Dummy; import ml.pkom.mcpitanlibarch.api.event.item.ItemUseEvent; import ml.pkom.mcpitanlibarch.api.event.item.ItemUseOnBlockEvent; import ml.pkom.mcpitanlibarch.mixin.ItemUsageContextMixin; @@ -17,17 +18,25 @@ public ExtendItem(Settings settings) { super(settings); } + @Deprecated @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { return onRightClick(new ItemUseEvent(world, user, hand)); } + @Deprecated @Override public ActionResult useOnBlock(ItemUsageContext context) { ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())); } + @Deprecated + @Override + public boolean hasRecipeRemainder() { + return hasRecipeRemainder(new Dummy()); + } + /** * item right click event * @@ -46,4 +55,8 @@ public TypedActionResult onRightClick(ItemUseEvent event) { public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { return super.useOnBlock(event.toIUC()); } + + public boolean hasRecipeRemainder(Dummy dummy) { + return super.hasRecipeRemainder(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/recipe/FixedRecipeRemainder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/FixedRecipeRemainderItem.java similarity index 53% rename from common/src/main/java/ml/pkom/mcpitanlibarch/recipe/FixedRecipeRemainder.java rename to common/src/main/java/ml/pkom/mcpitanlibarch/api/item/FixedRecipeRemainderItem.java index affb25f06..1d9a3d348 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/recipe/FixedRecipeRemainder.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/FixedRecipeRemainderItem.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.recipe; +package ml.pkom.mcpitanlibarch.api.item; import net.minecraft.item.ItemStack; -public interface FixedRecipeRemainder { +public interface FixedRecipeRemainderItem { ItemStack getFixedRecipeRemainder(ItemStack stack); } diff --git a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java b/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java index 0a69b3eed..dd7f6e646 100644 --- a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java +++ b/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java @@ -1,6 +1,6 @@ package ml.pkom.mcpitanlibarch.fabric.mixin; -import ml.pkom.mcpitanlibarch.recipe.FixedRecipeRemainder; +import ml.pkom.mcpitanlibarch.api.item.FixedRecipeRemainderItem; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; @@ -18,9 +18,9 @@ default void injectGetRemainder(C inventory, CallbackInfoReturnable Date: Sat, 24 Dec 2022 21:55:59 +0900 Subject: [PATCH 075/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f745ba5c9..e973cbcdb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.3.2-1.18 +mod_version=1.3.3-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 6bc3150fd66ff735dbe6d281e4b7a2ff179fe6d9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 Dec 2022 23:53:16 +0900 Subject: [PATCH 076/617] add api --- .../mcpitanlibarch/api/util/RecipeUtil.java | 24 +++++++++++++++++ .../mcpitanlibarch/api/util/ResourceUtil.java | 27 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java new file mode 100644 index 000000000..828a77585 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java @@ -0,0 +1,24 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Ingredient; +import net.minecraft.recipe.ShapelessRecipe; +import net.minecraft.util.Identifier; +import net.minecraft.util.collection.DefaultedList; + +public class RecipeUtil { + public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { + return createShapelessRecipe(id, group, output, input); + } + + public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, ItemStack output, DefaultedList input) { + return new ShapelessRecipe(id, group, output, input); + } + + public enum CompatibilityCraftingRecipeCategory { + BUILDING, + REDSTONE, + EQUIPMENT, + MISC; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java new file mode 100644 index 000000000..4a770572e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java @@ -0,0 +1,27 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.resource.Resource; +import net.minecraft.resource.ResourceManager; +import net.minecraft.util.Identifier; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class ResourceUtil { + public static Resource getResource(ResourceManager resourceManager, Identifier identifier) throws IOException { + return resourceManager.getResource(identifier); + } + + public static Map findResources(ResourceManager resourceManager, String startingPath, String endingPath) throws IOException { + Map map = new HashMap<>(); + for (Identifier identifier : resourceManager.findResources(startingPath, s -> s.endsWith(endingPath))) { + map.put(identifier, resourceManager.getResource(identifier)); + } + return map; + } + + public static void close(Resource resource) throws IOException { + resource.close(); + } +} From 55447f70417a2a074628ba23e5fb4882f4c8e973 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 25 Dec 2022 00:14:13 +0900 Subject: [PATCH 077/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e973cbcdb..69c911dae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.3.3-1.18 +mod_version=1.3.4-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 208e39c4ca29f8a1e39083ad4dff96532d3bc1ae Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 25 Dec 2022 00:38:57 +0900 Subject: [PATCH 078/617] add api --- .../java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java index 4a770572e..271741bed 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java @@ -5,6 +5,7 @@ import net.minecraft.util.Identifier; import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.Map; @@ -13,6 +14,10 @@ public static Resource getResource(ResourceManager resourceManager, Identifier i return resourceManager.getResource(identifier); } + public static InputStream getInputStream(Resource resource) { + return resource.getInputStream(); + } + public static Map findResources(ResourceManager resourceManager, String startingPath, String endingPath) throws IOException { Map map = new HashMap<>(); for (Identifier identifier : resourceManager.findResources(startingPath, s -> s.endsWith(endingPath))) { From 6034cbf22345acd622ebaf8b381ffb7572bd2136 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 25 Dec 2022 00:39:12 +0900 Subject: [PATCH 079/617] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 69c911dae..1941566ce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.3.4-1.18 +mod_version=1.3.5-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 25e600cdc58f1c6b1e53d9659cbc895a10af86db Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 27 Dec 2022 16:25:14 +0900 Subject: [PATCH 080/617] fix config --- .../java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java index 52d4b3b9f..a1a402bd2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java @@ -13,7 +13,7 @@ public class MCPitanLibarch { public static final String MOD_ID = "mcpitanlibarch"; - private static File configFile = new File(PlatformUtil.getConfigFolder().toFile(), MOD_ID + "/blacklist.json"); + private static File configFile = new File(PlatformUtil.getConfigFolder().toFile(), MOD_ID + "/blacklist.yml"); public static Config config = new YamlConfig(); private static boolean configLoaded = false; @@ -31,13 +31,19 @@ public static void init() { public static void configInit() { if (configLoaded) return; configLoaded = true; + if (!configFile.getParentFile().exists()) + configFile.mkdirs(); + config.setString("item", "examplemod:hogehoge_item,examplemod:fuga_item"); config.setString("block", "examplemod:hogehoge_block,examplemod:fuga_block"); config.load(configFile); - itemBlackList.addAll(Arrays.asList(config.getString("item").split(","))); - blockBlackList.addAll(Arrays.asList(config.getString("block").split(","))); + if (config.configMap.containsKey("item")) + itemBlackList.addAll(Arrays.asList(config.getString("item").split(","))); + + if (config.configMap.containsKey("block")) + blockBlackList.addAll(Arrays.asList(config.getString("block").split(","))); config.save(configFile); From 256611a63e9be89ca88df498942e9a82cba805b9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 5 Feb 2023 23:21:52 +0900 Subject: [PATCH 081/617] update api (WorldUtil, Player, Tick API) --- .../api/block/ExtendBlockEntityProvider.java | 41 ++++++++++++++++++- .../mcpitanlibarch/api/entity/Player.java | 12 ++++++ .../api/event/tile/TileTickEvent.java | 20 +++++++++ .../api/tile/ExtendBlockEntityTicker.java | 17 ++++++++ .../mcpitanlibarch/api/util/WorldUtil.java | 24 +++++++++++ 5 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/tile/TileTickEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntityTicker.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java index ab5fb7778..0599a54a5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java @@ -1,10 +1,14 @@ package ml.pkom.mcpitanlibarch.api.block; import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; +import ml.pkom.mcpitanlibarch.api.tile.ExtendBlockEntityTicker; import net.minecraft.block.BlockEntityProvider; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; public interface ExtendBlockEntityProvider extends BlockEntityProvider { @@ -14,5 +18,40 @@ default BlockEntity createBlockEntity(BlockPos pos, BlockState state) { } @Nullable - BlockEntity createBlockEntity(TileCreateEvent event); + default BlockEntity createBlockEntity(TileCreateEvent event) { + if (getBlockEntityType() == null) return null; + + // return new ...BlockEntity(pos, state) + return getBlockEntityType().instantiate(event.getBlockPos(), event.getBlockState()); + } + + @Nullable + default BlockEntityType getBlockEntityType() { + return null; + } + + @Nullable + @Override + default BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type) { + if (isTick()) { + return ((world1, pos, state1, blockEntity) -> { + if (getBlockEntityType() == null || blockEntity == getBlockEntityType().get(world, pos)) { + if (blockEntity instanceof ExtendBlockEntityTicker) { + ExtendBlockEntityTicker ticker = (ExtendBlockEntityTicker) blockEntity; + ticker.tick(world, pos, state, blockEntity); + } else if (blockEntity instanceof BlockEntityTicker) { + BlockEntityTicker ticker = (BlockEntityTicker) blockEntity; + ticker.tick(world, pos, state, blockEntity); + } + } + }); + } + return BlockEntityProvider.super.getTicker(world, state, type); + } + + default boolean isTick() { + return false; + } + + } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index 20f5ba37d..c759e6377 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -173,4 +173,16 @@ public void sendActionBar(Text text) { public void equipStack(EquipmentSlot slot, ItemStack stack) { getEntity().equipStack(slot, stack); } + + public void dropStack(ItemStack stack, boolean throwRandomly, boolean retainOwnership) { + getEntity().dropItem(stack, throwRandomly, retainOwnership); + } + + public void dropStack(ItemStack stack, boolean retainOwnership) { + dropStack(stack, false, retainOwnership); + } + + public void dropStack(ItemStack stack) { + dropStack(stack, false, false); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/tile/TileTickEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/tile/TileTickEvent.java new file mode 100644 index 000000000..2a7c9f628 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/tile/TileTickEvent.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.event.tile; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileTickEvent { + public World world; + public BlockPos pos; + public BlockState state; + public BlockEntity blockEntity; + + public TileTickEvent(World world, BlockPos pos, BlockState state, BlockEntity blockEntity) { + this.world = world; + this.pos = pos; + this.state = state; + this.blockEntity = blockEntity; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntityTicker.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntityTicker.java new file mode 100644 index 000000000..5c3705bb0 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntityTicker.java @@ -0,0 +1,17 @@ +package ml.pkom.mcpitanlibarch.api.tile; + +import ml.pkom.mcpitanlibarch.api.event.tile.TileTickEvent; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface ExtendBlockEntityTicker extends BlockEntityTicker { + @Override + default void tick(World world, BlockPos pos, BlockState state, BlockEntity blockEntity) { + tick(new TileTickEvent(world, pos, state, blockEntity)); + } + + void tick(TileTickEvent event); +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index f80a716f0..70a49f49e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -1,8 +1,14 @@ package ml.pkom.mcpitanlibarch.api.util; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.ExperienceOrbEntity; +import net.minecraft.entity.ItemEntity; import net.minecraft.fluid.Fluid; +import net.minecraft.item.ItemStack; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; public class WorldUtil { @@ -46,4 +52,22 @@ public static boolean isServer(World world) { return !isClient(world); } + public static void spawnStack(World world, BlockPos pos, ItemStack stack) { + spawnEntity(world, new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), stack)); + } + + public static void spawnExperienceOrb(World world, Vec3d pos, int amount) { + if (world instanceof ServerWorld) + ExperienceOrbEntity.spawn((ServerWorld) world, pos, amount); + } + + public static void spawnExperienceOrb(World world, BlockPos pos, int amount) { + spawnExperienceOrb(world, pos.toCenterPos(), amount); + } + + + public static void spawnEntity(World world, Entity entity) { + world.spawnEntity(entity); + } + } From 4a9d22cf00ec79ffe0ca4e4e7e3cecad1930ea2f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 5 Feb 2023 23:27:02 +0900 Subject: [PATCH 082/617] 1.19.2 --- .../main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index 70a49f49e..1ad902ea6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -62,7 +62,7 @@ public static void spawnExperienceOrb(World world, Vec3d pos, int amount) { } public static void spawnExperienceOrb(World world, BlockPos pos, int amount) { - spawnExperienceOrb(world, pos.toCenterPos(), amount); + spawnExperienceOrb(world, Vec3d.ofCenter(pos), amount); } From 94db0176bce1be8b6558ef3f8a25f390125b1d55 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 5 Feb 2023 23:34:39 +0900 Subject: [PATCH 083/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1941566ce..4830a1cb3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.3.5-1.18 +mod_version=1.3.6-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From c1ecdc4dd0ce73a23e992d0af1297070388a9661 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 10 Feb 2023 00:43:09 +0900 Subject: [PATCH 084/617] add Entity/BlockEntity Builder API --- .../api/entity/EntityTypeBuilder.java | 105 ++++++++++++++++++ .../api/entity/ExtendEntityType.java | 25 +++++ .../api/item/CreativeTabBuilder.java | 2 + .../api/tile/BlockEntityTypeBuilder.java | 58 ++++++++++ 4 files changed, 190 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/BlockEntityTypeBuilder.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java new file mode 100644 index 000000000..e4b2ca89c --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java @@ -0,0 +1,105 @@ +package ml.pkom.mcpitanlibarch.api.entity; + +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityDimensions; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnGroup; + +public class EntityTypeBuilder { + + private SpawnGroup spawnGroup; + private EntityType.EntityFactory factory; + private EntityDimensions entityDimensions; + private boolean saveable; + private boolean summonable; + private boolean fireImmune; + private boolean spawnableFarFromPlayer; + private ImmutableSet canSpawnBlocks; + private int maxTrackDistance; + private int trackTickInterval; + private Boolean alwaysUpdateVelocity = null; + + + @Deprecated + // Recommend: create() + public EntityTypeBuilder() { + setSaveable(true); + setSummonable(true); + setFireImmune(false); + setChangingDimensions(-1.0f, -1.0f); + + } + + public static EntityTypeBuilder create() { + return new EntityTypeBuilder<>(); + } + + public EntityType build() { + return new ExtendEntityType<>(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval, alwaysUpdateVelocity); + } + + public EntityTypeBuilder setSpawnGroup(SpawnGroup spawnGroup) { + this.spawnGroup = spawnGroup; + return this; + } + + public EntityTypeBuilder setEntityFactory(EntityType.EntityFactory factory) { + this.factory = factory; + return this; + } + + public EntityTypeBuilder setDimensions(EntityDimensions entityDimensions) { + this.entityDimensions = entityDimensions; + return this; + } + + public EntityTypeBuilder setFixedDimensions(float width, float height) { + return setDimensions(EntityDimensions.fixed(width, height)); + } + + public EntityTypeBuilder setChangingDimensions(float width, float height) { + return setDimensions(EntityDimensions.changing(width, height)); + } + + public EntityTypeBuilder setSaveable(boolean saveable) { + this.saveable = saveable; + return this; + } + + public EntityTypeBuilder setSummonable(boolean summonable) { + this.summonable = summonable; + return this; + } + + public EntityTypeBuilder setFireImmune(boolean fireImmune) { + this.fireImmune = fireImmune; + return this; + } + + public EntityTypeBuilder setSpawnableFarFromPlayer(boolean spawnableFarFromPlayer) { + this.spawnableFarFromPlayer = spawnableFarFromPlayer; + return this; + } + + public EntityTypeBuilder setCanSpawnBlocks(ImmutableSet canSpawnBlocks) { + this.canSpawnBlocks = canSpawnBlocks; + return this; + } + + public EntityTypeBuilder setMaxTrackDistance(int maxTrackDistance) { + this.maxTrackDistance = maxTrackDistance; + return this; + } + + public EntityTypeBuilder setTrackTickInterval(int trackTickInterval) { + this.trackTickInterval = trackTickInterval; + return this; + } + + public EntityTypeBuilder setAlwaysUpdateVelocity(Boolean alwaysUpdateVelocity) { + this.alwaysUpdateVelocity = alwaysUpdateVelocity; + return this; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java new file mode 100644 index 000000000..bb72550ad --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java @@ -0,0 +1,25 @@ +package ml.pkom.mcpitanlibarch.api.entity; + +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityDimensions; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnGroup; + +public class ExtendEntityType extends EntityType { + private final Boolean alwaysUpdateVelocity; + + public ExtendEntityType(EntityType.EntityFactory factory, SpawnGroup spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet canSpawnBlocks, EntityDimensions entityDimensions, int maxTrackDistance, int trackTickInterval, Boolean alwaysUpdateVelocity) { + super(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval); + this.alwaysUpdateVelocity = alwaysUpdateVelocity; + } + + @Override + public boolean alwaysUpdateVelocity() { + if (alwaysUpdateVelocity != null) + return alwaysUpdateVelocity; + + return super.alwaysUpdateVelocity(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java index a5b7f6ee3..07b22497f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java @@ -19,6 +19,8 @@ public class CreativeTabBuilder { private boolean special = false; private String texture; + @Deprecated + // Recommend: create(identifier) public CreativeTabBuilder(Identifier identifier) { this.identifier = identifier; } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/BlockEntityTypeBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/BlockEntityTypeBuilder.java new file mode 100644 index 000000000..7df27746e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/BlockEntityTypeBuilder.java @@ -0,0 +1,58 @@ +package ml.pkom.mcpitanlibarch.api.tile; + +import com.mojang.datafixers.types.Type; +import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.BlockPos; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class BlockEntityTypeBuilder { + private final Factory factory; + private final List blocks; + + public BlockEntityTypeBuilder(Factory factory, List blocks) { + this.factory = factory; + this.blocks = blocks; + } + + public static BlockEntityTypeBuilder create(Factory factory, Block... blocks) { + List blocksList = new ArrayList<>(blocks.length); + Collections.addAll(blocksList, blocks); + + return new BlockEntityTypeBuilder<>(factory, blocksList); + } + + public BlockEntityTypeBuilder addBlock(Block block) { + this.blocks.add(block); + return this; + } + + public BlockEntityTypeBuilder addBlocks(Block... blocks) { + Collections.addAll(this.blocks, blocks); + return this; + } + + public BlockEntityType build() { + return build(null); + } + + public BlockEntityType build(Type type) { + return BlockEntityType.Builder.create(factory::create, blocks.toArray(new Block[0])).build(type); + } + + @FunctionalInterface + public interface Factory { + T create(TileCreateEvent event); + + @Deprecated + default T create(BlockPos pos, BlockState state) { + return create(new TileCreateEvent(pos, state)); + } + } +} From 719ca95d337a33e0ab49ec37c5f18f7b3149bffd Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 10 Feb 2023 00:43:23 +0900 Subject: [PATCH 085/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4830a1cb3..7fbd4fafe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.3.6-1.18 +mod_version=1.3.7-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From f22dfca21e22f8efa2c6683d2f1476e99743406c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 10 Feb 2023 00:52:53 +0900 Subject: [PATCH 086/617] fix --- .../api/entity/EntityTypeBuilder.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java index e4b2ca89c..ef6c3f6ca 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java @@ -29,13 +29,34 @@ public EntityTypeBuilder() { setSummonable(true); setFireImmune(false); setChangingDimensions(-1.0f, -1.0f); + spawnableFarFromPlayer = false; + maxTrackDistance = 5; + trackTickInterval = 3; + canSpawnBlocks = ImmutableSet.of(); + } + @Deprecated + public EntityTypeBuilder(SpawnGroup spawnGroup, EntityType.EntityFactory factory) { + setSaveable(true); + setSummonable(true); + setFireImmune(false); + setChangingDimensions(-1.0f, -1.0f); + spawnableFarFromPlayer = false; + maxTrackDistance = 5; + trackTickInterval = 3; + canSpawnBlocks = ImmutableSet.of(); + this.spawnGroup = spawnGroup; + this.factory = factory; } public static EntityTypeBuilder create() { return new EntityTypeBuilder<>(); } + public static EntityTypeBuilder create(SpawnGroup spawnGroup, EntityType.EntityFactory factory) { + return new EntityTypeBuilder<>(spawnGroup, factory); + } + public EntityType build() { return new ExtendEntityType<>(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval, alwaysUpdateVelocity); } From b673f0456c7c81eeeb453718a30c184a162c364f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 10 Feb 2023 00:53:19 +0900 Subject: [PATCH 087/617] fix --- .../mcpitanlibarch/api/entity/EntityTypeBuilder.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java index ef6c3f6ca..9d22e56d4 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java @@ -37,14 +37,7 @@ public EntityTypeBuilder() { @Deprecated public EntityTypeBuilder(SpawnGroup spawnGroup, EntityType.EntityFactory factory) { - setSaveable(true); - setSummonable(true); - setFireImmune(false); - setChangingDimensions(-1.0f, -1.0f); - spawnableFarFromPlayer = false; - maxTrackDistance = 5; - trackTickInterval = 3; - canSpawnBlocks = ImmutableSet.of(); + this(); this.spawnGroup = spawnGroup; this.factory = factory; } From 28c614fea6163fd961bea0c04d7ddeb39524100f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 12 Feb 2023 11:43:18 +0900 Subject: [PATCH 088/617] Fixed ExtendedScreenHandlerType API --- .../api/gui/ExtendedScreenHandlerType.java | 15 ++++++++------- .../mcpitanlibarch/api/registry/ArchRegistry.java | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java index 56155ee99..4db122a5a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java @@ -7,18 +7,19 @@ public class ExtendedScreenHandlerType extends ScreenHandlerType { + private final Factory factory; + public ExtendedScreenHandlerType(Factory factory) { - super(factory); + super(null); this.factory = factory; } - private final Factory factory; - - public T create(int syncId, PlayerInventory playerInventory, PacketByteBuf buf) { - return this.factory.create(syncId, playerInventory, buf); + public T create(int syncId, PlayerInventory inventory, PacketByteBuf buf) { + return factory.create(syncId, inventory, buf); } - public interface Factory extends ScreenHandlerType.Factory { - T create(int syncId, PlayerInventory playerInventory, PacketByteBuf buf); + @FunctionalInterface + public interface Factory { + T create(int syncId, PlayerInventory inventory, PacketByteBuf buf); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 721a9b33d..991399008 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -69,7 +69,7 @@ public RegistryEvent> registerScreenHandlerType(Identifier return new RegistryEvent<>(SCREEN_HANDLER_TYPE.register(id, supplier)); } - public RegistryEvent> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { + public RegistryEvent> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { return registerScreenHandlerType(id, () -> MenuRegistry.ofExtended((id1, inventory, buf) -> supplier.get().create(id1, inventory, buf))); } From 83394150d54654251705b17c57c0ea06dc2cae41 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 12 Feb 2023 11:43:40 +0900 Subject: [PATCH 089/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7fbd4fafe..0b9aad3ce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.3.7-1.18 +mod_version=1.4.0-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 4d82b0b2fdddf5d854f6bc93718f7f1ce9702ad8 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 12 Feb 2023 16:38:16 +0900 Subject: [PATCH 090/617] accesswidener --- common/build.gradle | 4 ++++ common/src/main/resources/architectury.common.json | 3 +++ .../src/main/resources/mcpitanlibarch.accesswidener | 2 ++ fabric/build.gradle | 4 ++++ fabric/src/main/resources/fabric.mod.json | 1 + forge/build.gradle | 12 ++++++++++++ 6 files changed, 26 insertions(+) create mode 100644 common/src/main/resources/architectury.common.json create mode 100644 common/src/main/resources/mcpitanlibarch.accesswidener diff --git a/common/build.gradle b/common/build.gradle index 22df1ed86..93b656026 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -10,6 +10,10 @@ architectury { common() } +loom { + accessWidenerPath = file("src/main/resources/mcpitanlibarch.accesswidener") +} + publishing { publications { mavenCommon(MavenPublication) { diff --git a/common/src/main/resources/architectury.common.json b/common/src/main/resources/architectury.common.json new file mode 100644 index 000000000..3c2b8ca8e --- /dev/null +++ b/common/src/main/resources/architectury.common.json @@ -0,0 +1,3 @@ +{ + "accessWidener": "mcpitanlibarch.accesswidener" +} \ No newline at end of file diff --git a/common/src/main/resources/mcpitanlibarch.accesswidener b/common/src/main/resources/mcpitanlibarch.accesswidener new file mode 100644 index 000000000..e12f5a243 --- /dev/null +++ b/common/src/main/resources/mcpitanlibarch.accesswidener @@ -0,0 +1,2 @@ +accessWidener v2 named +accessible method net/minecraft/screen/ScreenHandlerType (Lnet/minecraft/screen/ScreenHandlerType$Factory;)V \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 688b6acb7..a7965f4f8 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -7,6 +7,10 @@ architectury { fabric() } +loom { + accessWidenerPath = project(":common").loom.accessWidenerPath +} + configurations { common shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 8f4748078..623a19b3c 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -29,6 +29,7 @@ "mcpitanlibarch.mixins.json", "mcpitanlibarch-common.mixins.json" ], + "accessWidener" : "mcpitanlibarch.accesswidener", "depends": { "fabricloader": "*", "minecraft": ">=1.18" diff --git a/forge/build.gradle b/forge/build.gradle index 0b890cefa..f8fbc40af 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -6,6 +6,18 @@ architectury { forge() } +loom { + accessWidenerPath = project(":common").loom.accessWidenerPath + + forge { + convertAccessWideners = true + extraAccessWideners.add loom.accessWidenerPath.get().asFile.name + + mixinConfig "mcpitanlibarch-common.mixins.json" + mixinConfig "mcpitanlibarch.mixins.json" + } +} + configurations { common shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. From 8bf5b57827a8ffa221090dc2ae22b19507f656e5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 12 Feb 2023 16:47:15 +0900 Subject: [PATCH 091/617] fix --- common/src/main/resources/mcpitanlibarch.accesswidener | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/resources/mcpitanlibarch.accesswidener b/common/src/main/resources/mcpitanlibarch.accesswidener index e12f5a243..c238c5a7e 100644 --- a/common/src/main/resources/mcpitanlibarch.accesswidener +++ b/common/src/main/resources/mcpitanlibarch.accesswidener @@ -1,2 +1 @@ -accessWidener v2 named -accessible method net/minecraft/screen/ScreenHandlerType (Lnet/minecraft/screen/ScreenHandlerType$Factory;)V \ No newline at end of file +accessWidener v2 named \ No newline at end of file From a453481a1bb86da3e32e5fe098bf6a86b4cd077b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 12 Feb 2023 17:23:01 +0900 Subject: [PATCH 092/617] add Network API --- .../api/network/ClientNetwork.java | 24 ++++++++++++++ .../api/network/ServerNetworking.java | 33 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetwork.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ServerNetworking.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetwork.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetwork.java new file mode 100644 index 000000000..b11002271 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetwork.java @@ -0,0 +1,24 @@ +package ml.pkom.mcpitanlibarch.api.network; + +import dev.architectury.networking.NetworkManager; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.util.Identifier; + +import static dev.architectury.networking.NetworkManager.Side.S2C; + +public class ClientNetwork { + public static void send(Identifier identifier, PacketByteBuf buf) { + NetworkManager.sendToServer(identifier, buf); + } + + public static void registerReceiver(Identifier identifier, ClientNetworkHandler handler) { + NetworkManager.registerReceiver(S2C, identifier, ((buf, context) -> handler.receive(MinecraftClient.getInstance(), MinecraftClient.getInstance().player, buf))); + } + + @FunctionalInterface + public interface ClientNetworkHandler { + void receive(MinecraftClient client, ClientPlayerEntity player, PacketByteBuf buf); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ServerNetworking.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ServerNetworking.java new file mode 100644 index 000000000..1f1ec4106 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ServerNetworking.java @@ -0,0 +1,33 @@ +package ml.pkom.mcpitanlibarch.api.network; + +import dev.architectury.networking.NetworkManager; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.Identifier; + +import static dev.architectury.networking.NetworkManager.Side.C2S; + +public class ServerNetworking { + public static void send(ServerPlayerEntity player, Identifier identifier, PacketByteBuf buf) { + NetworkManager.sendToPlayer(player, identifier, buf); + } + + public static void send(Iterable players, Identifier identifier, PacketByteBuf buf) { + NetworkManager.sendToPlayers(players, identifier, buf); + } + + + public static void sendAll(MinecraftServer server, Identifier identifier, PacketByteBuf buf) { + send(server.getPlayerManager().getPlayerList(), identifier, buf); + } + + public static void registerReceiver(Identifier identifier, ServerNetworkHandler handler) { + NetworkManager.registerReceiver(C2S, identifier, ((buf, context) -> handler.receive(context.getPlayer().getServer(), (ServerPlayerEntity) context.getPlayer(), buf))); + } + + @FunctionalInterface + public interface ServerNetworkHandler { + void receive(MinecraftServer server, ServerPlayerEntity player, PacketByteBuf buf); + } +} From 8ad2bee7c52db51bd92062747d7cf7543e1bb82d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 12 Feb 2023 17:24:54 +0900 Subject: [PATCH 093/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0b9aad3ce..67dd1c34d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.0-1.18 +mod_version=1.4.1-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 9aaaadae06e088b2179d272ba50f7ca5cb3e3aa9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 15:31:39 +0900 Subject: [PATCH 094/617] fix config --- .../pkom/mcpitanlibarch/MCPitanLibarch.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java index a1a402bd2..ddbd67709 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java @@ -13,7 +13,7 @@ public class MCPitanLibarch { public static final String MOD_ID = "mcpitanlibarch"; - private static File configFile = new File(PlatformUtil.getConfigFolder().toFile(), MOD_ID + "/blacklist.yml"); + private static final File configFile = new File(PlatformUtil.getConfigFolder().toFile(), MOD_ID + "/blacklist.yml"); public static Config config = new YamlConfig(); private static boolean configLoaded = false; @@ -29,24 +29,28 @@ public static void init() { } public static void configInit() { - if (configLoaded) return; - configLoaded = true; - if (!configFile.getParentFile().exists()) - configFile.mkdirs(); + try { + if (configLoaded) return; + configLoaded = true; + if (!configFile.getParentFile().exists()) + if (!configFile.getParentFile().mkdirs()) + return; - config.setString("item", "examplemod:hogehoge_item,examplemod:fuga_item"); - config.setString("block", "examplemod:hogehoge_block,examplemod:fuga_block"); + config.setString("item", "examplemod:hogehoge_item,examplemod:fuga_item"); + config.setString("block", "examplemod:hogehoge_block,examplemod:fuga_block"); - config.load(configFile); + config.load(configFile); - if (config.configMap.containsKey("item")) - itemBlackList.addAll(Arrays.asList(config.getString("item").split(","))); + if (config.configMap.containsKey("item")) + itemBlackList.addAll(Arrays.asList(config.getString("item").split(","))); - if (config.configMap.containsKey("block")) - blockBlackList.addAll(Arrays.asList(config.getString("block").split(","))); - - config.save(configFile); + if (config.configMap.containsKey("block")) + blockBlackList.addAll(Arrays.asList(config.getString("block").split(","))); + config.save(configFile); + } catch (Exception e) { + System.out.println("MCPitanLib: Cannot save config file"); + } } } \ No newline at end of file From 99326167691025b8b5bd68772469ec932a42500e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 15:32:04 +0900 Subject: [PATCH 095/617] rename MCPitanLibarch -> MCPitanLib --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 623a19b3c..ea2201fc3 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "id": "mcpitanlibarch", "version": "${version}", - "name": "MCPitanLibarch", + "name": "MCPitanLib", "description": "Pitan's Minecraft Mod Library", "authors": [ "Pitan" diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index d222c9899..284bff096 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -21,7 +21,7 @@ modId = "mcpitanlibarch" #mandatory # see the associated build.gradle script for how to populate this completely automatically during a build version = "${version}" #mandatory # A display name for the mod -displayName = "MCPitanLibarch" #mandatory +displayName = "MCPitanLib" #mandatory # A URL to query for updates for this mod. See the JSON update specification #updateJSONURL="http://myurl.me/" #optional # A URL for the "homepage" for this mod, displayed in the mod UI From 88c5fedffef9a7b3b1c7f80f5494f5bd06da259a Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 15:45:33 +0900 Subject: [PATCH 096/617] add ArchRegistryClient --- .../client/registry/ArchRegistryClient.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java new file mode 100644 index 000000000..e6d05a607 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java @@ -0,0 +1,19 @@ +package ml.pkom.mcpitanlibarch.api.client.registry; + +import dev.architectury.registry.menu.MenuRegistry; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.text.Text; + +public class ArchRegistryClient { + public > void registerScreen(ScreenHandlerType type, ScreenFactory factory) { + MenuRegistry.registerScreenFactory(type, factory::create); + } + + public interface ScreenFactory> { + S create(H handler, PlayerInventory inventory, Text text); + } +} From f7f5f031e4b18e291af5e56b4ff582113dea2e0e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 16:13:26 +0900 Subject: [PATCH 097/617] fix add APIs --- .../api/event/v0/EventRegistry.java | 75 +++++++++++++++++++ ...ientNetwork.java => ClientNetworking.java} | 2 +- .../api/network/PacketByteUtil.java | 15 ++++ .../api/registry/ArchRegistry.java | 1 - 4 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java rename common/src/main/java/ml/pkom/mcpitanlibarch/api/network/{ClientNetwork.java => ClientNetworking.java} (96%) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java new file mode 100644 index 000000000..df8cc7fbd --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java @@ -0,0 +1,75 @@ +package ml.pkom.mcpitanlibarch.api.event.v0; + +import me.shedaniel.architectury.event.events.LifecycleEvent; +import me.shedaniel.architectury.event.events.PlayerEvent; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; + +public class EventRegistry { + + public static class ServerConnection { + // Architectury: PlayerEvent + public static void join(PlayerJoin state) { + PlayerEvent.PLAYER_JOIN.register(state::join); + } + + public static void quit(PlayerQuit state) { + PlayerEvent.PLAYER_QUIT.register(state::quit); + } + + interface PlayerJoin { + void join(ServerPlayerEntity player); + } + + interface PlayerQuit { + void quit(ServerPlayerEntity player); + } + } + + public static class ServerLifecycle { + // Architectury: LifecycleEvent + public static void serverStarted(ServerState state) { + LifecycleEvent.SERVER_STARTED.register(state::stateChanged); + } + + public static void serverStarting(ServerState state) { + LifecycleEvent.SERVER_STARTING.register(state::stateChanged); + } + + public static void serverStopped(ServerState state) { + LifecycleEvent.SERVER_STOPPED.register(state::stateChanged); + } + + public static void serverStopping(ServerState state) { + LifecycleEvent.SERVER_STOPPING.register(state::stateChanged); + } + + public static void serverWorldLoad(ServerWorldState state) { + LifecycleEvent.SERVER_WORLD_LOAD.register(state::act); + } + + public static void serverWorldSave(ServerWorldState state) { + LifecycleEvent.SERVER_WORLD_SAVE.register(state::act); + } + + public static void serverWorldUnload(ServerWorldState state) { + LifecycleEvent.SERVER_WORLD_UNLOAD.register(state::act); + } + + interface ServerState extends InstanceState { + } + + interface InstanceState { + void stateChanged(T instance); + } + + interface WorldState { + void act(T world); + } + + interface ServerWorldState extends WorldState { + } + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetwork.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetworking.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetwork.java rename to common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetworking.java index b11002271..99676c043 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetwork.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetworking.java @@ -8,7 +8,7 @@ import static dev.architectury.networking.NetworkManager.Side.S2C; -public class ClientNetwork { +public class ClientNetworking { public static void send(Identifier identifier, PacketByteBuf buf) { NetworkManager.sendToServer(identifier, buf); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java new file mode 100644 index 000000000..963404a2e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java @@ -0,0 +1,15 @@ +package ml.pkom.mcpitanlibarch.api.network; + +import io.netty.buffer.Unpooled; +import net.minecraft.network.PacketByteBuf; + +public class PacketByteUtil { + public static PacketByteBuf create() { + return new PacketByteBuf(Unpooled.buffer()); + } + + + public static PacketByteBuf empty() { + return new PacketByteBuf(Unpooled.EMPTY_BUFFER); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 991399008..5746c29be 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -7,7 +7,6 @@ import dev.architectury.registry.registries.RegistrySupplier; import ml.pkom.mcpitanlibarch.MCPitanLibarch; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; -import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandler; import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerType; import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; import ml.pkom.mcpitanlibarch.api.item.ExtendSettings; From 032a3fcfcc264ccadb596a06adf4ecebb8f07247 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 16:33:04 +0900 Subject: [PATCH 098/617] fix extendScreen --- ...Type.java => ExtendedScreenHandlerTypeBuilder.java} | 10 +++++----- .../pkom/mcpitanlibarch/api/registry/ArchRegistry.java | 7 ++++--- 2 files changed, 9 insertions(+), 8 deletions(-) rename common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/{ExtendedScreenHandlerType.java => ExtendedScreenHandlerTypeBuilder.java} (60%) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java similarity index 60% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java rename to common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java index 4db122a5a..ba608534f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerType.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java @@ -1,21 +1,21 @@ package ml.pkom.mcpitanlibarch.api.gui; +import me.shedaniel.architectury.registry.MenuRegistry; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; -public class ExtendedScreenHandlerType extends ScreenHandlerType { +public class ExtendedScreenHandlerTypeBuilder { private final Factory factory; - public ExtendedScreenHandlerType(Factory factory) { - super(null); + public ExtendedScreenHandlerTypeBuilder(Factory factory) { this.factory = factory; } - public T create(int syncId, PlayerInventory inventory, PacketByteBuf buf) { - return factory.create(syncId, inventory, buf); + public ScreenHandlerType build() { + return MenuRegistry.ofExtended(factory::create); } @FunctionalInterface diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 5746c29be..594a3f147 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -7,7 +7,7 @@ import dev.architectury.registry.registries.RegistrySupplier; import ml.pkom.mcpitanlibarch.MCPitanLibarch; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; -import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerType; +import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; import ml.pkom.mcpitanlibarch.api.item.ExtendSettings; import net.minecraft.block.AbstractBlock; @@ -68,8 +68,9 @@ public RegistryEvent> registerScreenHandlerType(Identifier return new RegistryEvent<>(SCREEN_HANDLER_TYPE.register(id, supplier)); } - public RegistryEvent> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { - return registerScreenHandlerType(id, () -> MenuRegistry.ofExtended((id1, inventory, buf) -> supplier.get().create(id1, inventory, buf))); + @Deprecated + public RegistryEvent> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { + return registerScreenHandlerType(id, () -> supplier.get().build()); } public RegistryEvent> registerMenu(Identifier id, Supplier> supplier) { From 768b297d8d0d6cad9cb21a31abbe962c576e212b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 16:41:48 +0900 Subject: [PATCH 099/617] EventRegistry --- .../mcpitanlibarch/api/event/v0/EventRegistry.java | 10 +++++----- .../api/gui/ExtendedScreenHandlerTypeBuilder.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java index df8cc7fbd..2f2c0c606 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java @@ -1,7 +1,7 @@ package ml.pkom.mcpitanlibarch.api.event.v0; -import me.shedaniel.architectury.event.events.LifecycleEvent; -import me.shedaniel.architectury.event.events.PlayerEvent; +import dev.architectury.event.events.common.LifecycleEvent; +import dev.architectury.event.events.common.PlayerEvent; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; @@ -47,15 +47,15 @@ public static void serverStopping(ServerState state) { } public static void serverWorldLoad(ServerWorldState state) { - LifecycleEvent.SERVER_WORLD_LOAD.register(state::act); + LifecycleEvent.SERVER_LEVEL_LOAD.register(state::act); } public static void serverWorldSave(ServerWorldState state) { - LifecycleEvent.SERVER_WORLD_SAVE.register(state::act); + LifecycleEvent.SERVER_LEVEL_SAVE.register(state::act); } public static void serverWorldUnload(ServerWorldState state) { - LifecycleEvent.SERVER_WORLD_UNLOAD.register(state::act); + LifecycleEvent.SERVER_LEVEL_UNLOAD.register(state::act); } interface ServerState extends InstanceState { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java index ba608534f..189408749 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java @@ -1,6 +1,6 @@ package ml.pkom.mcpitanlibarch.api.gui; -import me.shedaniel.architectury.registry.MenuRegistry; +import dev.architectury.registry.menu.MenuRegistry; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.ScreenHandler; From 3c2a7cdb8a138a9a4a7b62d702c6bc2a462bb328 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 16:44:11 +0900 Subject: [PATCH 100/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 67dd1c34d..2c09a1fab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.1-1.18 +mod_version=1.4.2-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From e3b4f9e4cea514fe7f00481fc5e0ad891b1456ee Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 17:20:16 +0900 Subject: [PATCH 101/617] fix --- .../api/client/registry/ArchRegistryClient.java | 2 +- .../mcpitanlibarch/api/event/v0/EventRegistry.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java index e6d05a607..431d34779 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java @@ -9,7 +9,7 @@ import net.minecraft.text.Text; public class ArchRegistryClient { - public > void registerScreen(ScreenHandlerType type, ScreenFactory factory) { + public static > void registerScreen(ScreenHandlerType type, ScreenFactory factory) { MenuRegistry.registerScreenFactory(type, factory::create); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java index 2f2c0c606..704ac494f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java @@ -19,11 +19,11 @@ public static void quit(PlayerQuit state) { PlayerEvent.PLAYER_QUIT.register(state::quit); } - interface PlayerJoin { + public interface PlayerJoin { void join(ServerPlayerEntity player); } - interface PlayerQuit { + public interface PlayerQuit { void quit(ServerPlayerEntity player); } } @@ -58,18 +58,18 @@ public static void serverWorldUnload(ServerWorldState state) { LifecycleEvent.SERVER_LEVEL_UNLOAD.register(state::act); } - interface ServerState extends InstanceState { + public interface ServerState extends InstanceState { } - interface InstanceState { + public interface InstanceState { void stateChanged(T instance); } - interface WorldState { + public interface WorldState { void act(T world); } - interface ServerWorldState extends WorldState { + public interface ServerWorldState extends WorldState { } } } From bc57a5073d3d8c73aaf14718829e711826516f9f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 16 Feb 2023 17:20:25 +0900 Subject: [PATCH 102/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2c09a1fab..78bb27f92 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.2-1.18 +mod_version=1.4.3-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 79ef67326327aee69439d91db323c8470f7d0316 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 25 Feb 2023 21:46:02 +0900 Subject: [PATCH 103/617] Add onSlotClick --- .../mcpitanlibarch/api/gui/SimpleScreenHandler.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java index fb0e95bf1..30d563ea5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java @@ -8,6 +8,7 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -207,4 +208,14 @@ public Slot getSlot(int index) { public Slot callGetSlot(int index) { return getSlot(index); } + + @Deprecated + @Override + public void onSlotClick(int slotIndex, int button, SlotActionType actionType, PlayerEntity player) { + overrideOnSlotClick(slotIndex, button, actionType, new Player(player)); + } + + public void overrideOnSlotClick(int slotIndex, int button, SlotActionType actionType, Player player) { + super.onSlotClick(slotIndex, button, actionType, player.getPlayerEntity()); + } } From 219e4b556e769894208bbaf555ace0bde68208ec Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 25 Feb 2023 21:46:12 +0900 Subject: [PATCH 104/617] gradle --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 78bb27f92..3fb1467b8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.3-1.18 +mod_version=1.4.4-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From f7cb58268b708aa855efceeffec5410ea840c499 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 3 Mar 2023 02:07:56 +0900 Subject: [PATCH 105/617] delete architectury.common.json --- common/src/main/resources/architectury.common.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 common/src/main/resources/architectury.common.json diff --git a/common/src/main/resources/architectury.common.json b/common/src/main/resources/architectury.common.json deleted file mode 100644 index 3c2b8ca8e..000000000 --- a/common/src/main/resources/architectury.common.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "accessWidener": "mcpitanlibarch.accesswidener" -} \ No newline at end of file From b799d4d8dd5bcdf2a2cb7e523b869076fde82fb2 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 3 Mar 2023 02:10:33 +0900 Subject: [PATCH 106/617] gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 3fb1467b8..177b23c18 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.4-1.18 +mod_version=1.4.5-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 449cdce0e6992aa7cd77851d49eefdcc38c18b33 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 3 Mar 2023 17:54:29 +0900 Subject: [PATCH 107/617] add ExtendedNamedScreenHandlerFactory --- .../ExtendedNamedScreenHandlerFactory.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedNamedScreenHandlerFactory.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedNamedScreenHandlerFactory.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedNamedScreenHandlerFactory.java new file mode 100644 index 000000000..2a97c5b82 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedNamedScreenHandlerFactory.java @@ -0,0 +1,45 @@ +package ml.pkom.mcpitanlibarch.api.gui; + +import dev.architectury.registry.menu.ExtendedMenuProvider; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerFactory; +import net.minecraft.text.Text; +import org.jetbrains.annotations.Nullable; + +public class ExtendedNamedScreenHandlerFactory implements ExtendedMenuProvider { + + private final Text name; + private final ScreenHandlerFactory baseFactory; + private final PacketByteBufFactory bufFactory; + + public ExtendedNamedScreenHandlerFactory(Text name, ScreenHandlerFactory baseFactory, PacketByteBufFactory bufFactory) { + this.name = name; + this.baseFactory = baseFactory; + this.bufFactory = bufFactory; + } + + @Override + public void saveExtraData(PacketByteBuf buf) { + bufFactory.saveExtraData(buf); + } + + @Override + public Text getDisplayName() { + return name; + } + + @Nullable + @Override + public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) { + return baseFactory.createMenu(syncId, inv, player); + + } + + @FunctionalInterface + public interface PacketByteBufFactory { + void saveExtraData(PacketByteBuf buf); + } +} From b9f9036fcbc9289535b6df676b295be4f819e504 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 3 Mar 2023 17:59:49 +0900 Subject: [PATCH 108/617] gradle --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 177b23c18..88ade337a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.5-1.18 +mod_version=1.4.6-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 3d32a7dd579aa094805f296a3b627bcd203af70b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 4 Mar 2023 23:04:38 +0900 Subject: [PATCH 109/617] ScreenUtil api --- .../RedrawableTexturedButtonWidget.java | 68 +++++++++++++++++++ .../api/util/client/RenderUtil.java | 23 +++++++ .../api/util/client/ScreenUtil.java | 52 ++++++++++++-- 3 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java new file mode 100644 index 000000000..e03f27473 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java @@ -0,0 +1,68 @@ +package ml.pkom.mcpitanlibarch.api.client.gui.widget; + +import ml.pkom.mcpitanlibarch.api.util.client.RenderUtil; +import net.minecraft.client.gui.widget.TexturedButtonWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +public class RedrawableTexturedButtonWidget extends TexturedButtonWidget { + public Identifier texture; + public int u; + public int v; + public int hoveredVOffset; + public int textureWidth; + public int textureHeight; + + public RedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, PressAction pressAction, Text message) { + super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, message); + this.textureWidth = textureWidth; + this.textureHeight = textureHeight; + this.u = u; + this.v = v; + this.hoveredVOffset = hoveredVOffset; + this.texture = texture; + } + + public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) { + RenderUtil.setShaderToPositionTexProgram(); + RenderUtil.setShaderTexture(0, this.texture); + int i = this.v; + if (!this.isNarratable()) { + i += this.hoveredVOffset * 2; + } else if (this.isHovered()) { + i += this.hoveredVOffset; + } + + RenderUtil.enableDepthTest(); + drawTexture(matrices, this.x, this.y, (float)this.u, (float)i, this.width, this.height, this.textureWidth, this.textureHeight); + + if (this.hovered) { + this.renderTooltip(matrices, mouseX, mouseY); + } + } + + public void setTexture(Identifier texture) { + this.texture = texture; + } + + public void setU(int u) { + this.u = u; + } + + public void setV(int v) { + this.v = v; + } + + public void setHoveredVOffset(int hoveredVOffset) { + this.hoveredVOffset = hoveredVOffset; + } + + public void setTextureWidth(int textureWidth) { + this.textureWidth = textureWidth; + } + + public void setTextureHeight(int textureHeight) { + this.textureHeight = textureHeight; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java new file mode 100644 index 000000000..21db8119e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java @@ -0,0 +1,23 @@ +package ml.pkom.mcpitanlibarch.api.util.client; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.util.Identifier; + +public class RenderUtil { + public static void setShaderToPositionTexProgram() { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + } + + public static void setShaderColor(float red, float green, float blue, float alpha) { + RenderSystem.setShaderColor(red, green, blue, alpha); + } + + public static void setShaderTexture(int texture, Identifier id) { + RenderSystem.setShaderTexture(texture, id); + } + + public static void enableDepthTest() { + RenderSystem.enableDepthTest(); + } +} \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index 35ee90df7..9e44599bf 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -1,21 +1,21 @@ package ml.pkom.mcpitanlibarch.api.util.client; -import com.mojang.blaze3d.systems.RenderSystem; +import ml.pkom.mcpitanlibarch.api.client.gui.widget.RedrawableTexturedButtonWidget; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.gui.widget.TexturedButtonWidget; +import net.minecraft.screen.ScreenTexts; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @Environment(EnvType.CLIENT) public class ScreenUtil { public static void setBackground(Identifier GUI, float f, float g, float h, float i) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderColor(f, g, h, i); - RenderSystem.setShaderTexture(0, GUI); + RenderUtil.setShaderToPositionTexProgram(); + RenderUtil.setShaderColor(f, g, h, i); + RenderUtil.setShaderTexture(0, GUI); // GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); // MinecraftClient.getInstance().getTextureManager().bindTexture(GUI); @@ -37,4 +37,44 @@ public static ButtonWidget createButtonWidget(int x, int y, int width, int heigh public static ButtonWidget createButtonWidget(int x, int y, int width, int height, Text message, ButtonWidget.PressAction onPress, ButtonWidget.TooltipSupplier tooltipSupplier) { return new ButtonWidget(x, y, width , height, message, onPress, tooltipSupplier); } + + public static TexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, ButtonWidget.PressAction pressAction) { + return createTexturedButtonWidget(x, y, width, height, u, v, height, texture, pressAction); + } + + public static TexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, ButtonWidget.PressAction pressAction) { + return createTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, 256, 256, pressAction); + } + + public static TexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction) { + return createTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, Texts.empty()); + } + + public static TexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text message) { + return new TexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, message); + } + + public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, ButtonWidget.PressAction pressAction) { + return createRedrawableTexturedButtonWidget(x, y, width, height, u, v, height, texture, pressAction); + } + + public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, ButtonWidget.PressAction pressAction) { + return createRedrawableTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, 256, 256, pressAction); + } + + public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction) { + return createRedrawableTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, Texts.empty()); + } + + public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text message) { + return new RedrawableTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, message); + } + + + + public static class Texts { + public static Text empty() { + return ScreenTexts.EMPTY; + } + } } From 3f0565efe47aa2d69bac33740cf819d0fe601287 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 4 Mar 2023 23:05:30 +0900 Subject: [PATCH 110/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 88ade337a..4d4bf57a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.6-1.18 +mod_version=1.4.7-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From b5b4c37843c8680a266870c5cecca24ce381bde3 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 4 Mar 2023 23:07:44 +0900 Subject: [PATCH 111/617] fix api --- .../ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index 9e44599bf..e7faf6bb0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -1,12 +1,12 @@ package ml.pkom.mcpitanlibarch.api.util.client; import ml.pkom.mcpitanlibarch.api.client.gui.widget.RedrawableTexturedButtonWidget; +import ml.pkom.mcpitanlibarch.api.util.TextUtil; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; -import net.minecraft.screen.ScreenTexts; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -74,7 +74,7 @@ public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidge public static class Texts { public static Text empty() { - return ScreenTexts.EMPTY; + return TextUtil.empty(); } } } From d6d0af39904aff12fe552d9b05dde40e2a78f03f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 7 Mar 2023 15:41:44 +0900 Subject: [PATCH 112/617] add player pos --- .../java/ml/pkom/mcpitanlibarch/api/entity/Player.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index c759e6377..c851f91c0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -12,6 +12,7 @@ import net.minecraft.text.Text; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import java.util.OptionalInt; @@ -185,4 +186,12 @@ public void dropStack(ItemStack stack, boolean retainOwnership) { public void dropStack(ItemStack stack) { dropStack(stack, false, false); } + + public BlockPos getBlockPos() { + return getEntity().getBlockPos(); + } + + public Vec3d getPos() { + return getEntity().getPos(); + } } \ No newline at end of file From a649ef6b3eec2eca8707ac04bba6f100864ccbb4 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 7 Mar 2023 18:26:55 +0900 Subject: [PATCH 113/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4d4bf57a5..488e40779 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.7-1.18 +mod_version=1.4.8-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 8475de605435608845373a774cfe3f38ee8bcdd9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 8 Mar 2023 14:24:42 +0900 Subject: [PATCH 114/617] add API --- .../pkom/mcpitanlibarch/MCPitanLibarch.java | 6 +++-- .../gui/SimpleScreenHandlerTypeBuilder.java | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandlerTypeBuilder.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java index ddbd67709..88896b8db 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java @@ -3,7 +3,6 @@ import ml.pkom.easyapi.config.Config; import ml.pkom.easyapi.config.YamlConfig; import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; -import ml.pkom.mcpitanlibarch.test.ExampleMod; import java.io.File; import java.util.ArrayList; @@ -23,9 +22,11 @@ public class MCPitanLibarch { public static void init() { configInit(); + /* if (PlatformUtil.isDevelopmentEnvironment()) { ExampleMod.init(); } + */ } public static void configInit() { @@ -39,7 +40,8 @@ public static void configInit() { config.setString("item", "examplemod:hogehoge_item,examplemod:fuga_item"); config.setString("block", "examplemod:hogehoge_block,examplemod:fuga_block"); - config.load(configFile); + if (configFile.exists()) + config.load(configFile); if (config.configMap.containsKey("item")) itemBlackList.addAll(Arrays.asList(config.getString("item").split(","))); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandlerTypeBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandlerTypeBuilder.java new file mode 100644 index 000000000..d95902f28 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandlerTypeBuilder.java @@ -0,0 +1,23 @@ +package ml.pkom.mcpitanlibarch.api.gui; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; + +public class SimpleScreenHandlerTypeBuilder { + + private final Factory factory; + + public SimpleScreenHandlerTypeBuilder(Factory factory) { + this.factory = factory; + } + + public ScreenHandlerType build() { + return new ScreenHandlerType<>(factory::create); + } + + @FunctionalInterface + public interface Factory { + T create(int syncId, PlayerInventory inventory); + } +} From af6677459d533122c315c26a3090c7c138ebc822 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 8 Mar 2023 14:27:39 +0900 Subject: [PATCH 115/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 488e40779..8e74009ab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.8-1.18 +mod_version=1.4.9-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 5f89533da2fc8058fc34ffee5b1b6978ed2a061b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 14 Mar 2023 12:43:07 +0900 Subject: [PATCH 116/617] add quilt --- gradle.properties | 8 ++ quilt/build.gradle | 91 +++++++++++++++++++ .../quilt/MCPitanLibarchQuilt.java | 13 +++ .../quilt/mixin/RecipeMixin.java | 28 ++++++ .../main/resources/mcpitanlibarch.mixins.json | 14 +++ quilt/src/main/resources/quilt.mod.json | 55 +++++++++++ settings.gradle | 8 +- 7 files changed, 215 insertions(+), 2 deletions(-) create mode 100644 quilt/build.gradle create mode 100644 quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/MCPitanLibarchQuilt.java create mode 100644 quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/mixin/RecipeMixin.java create mode 100644 quilt/src/main/resources/mcpitanlibarch.mixins.json create mode 100644 quilt/src/main/resources/quilt.mod.json diff --git a/gradle.properties b/gradle.properties index 8e74009ab..3d8065db7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,3 +15,11 @@ fabric_api_version=0.58.0+1.18.2 # https://files.minecraftforge.net/net/minecraftforge/forge/ forge_version=1.18.2-40.1.80 + +# https://lambdaurora.dev/tools/import_quilt.html +quilt_loader_version=0.18.4-pre.3 +quilt_fabric_api_version=1.0.0-beta.28+0.67.0 + +fabricEnabled=true +forgeEnabled=true +quiltEnabled=false \ No newline at end of file diff --git a/quilt/build.gradle b/quilt/build.gradle new file mode 100644 index 000000000..9f82c2a25 --- /dev/null +++ b/quilt/build.gradle @@ -0,0 +1,91 @@ +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" +} + +architectury { + platformSetupLoomIde() + loader("quilt") +} + +repositories { + maven { url "https://maven.quiltmc.org/repository/release/" } +} + +loom { + accessWidenerPath = project(":common").loom.accessWidenerPath +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentFabric.extendsFrom common +} + +dependencies { + modImplementation "org.quiltmc:quilt-loader:${rootProject.quilt_loader_version}" + modApi "org.quiltmc.quilted-fabric-api:quilted-fabric-api:${rootProject.quilt_fabric_api_version}-${minecraft_version}" + // Remove the next line if you don't want to depend on the API + modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionQuilt")) { transitive false } + + shadowCommon 'org.yaml:snakeyaml:1.33' + +} + +processResources { + inputs.property "version", project.version + + filesMatching("quilt.mod.json") { + expand "version": project.version + } + + project.version = project.version + "-quilt" +} + +shadowJar { + exclude "architectury.common.json" + + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" +} + +remapJar { + injectAccessWidener = true + inputFile.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + +jar { + classifier "dev" +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} \ No newline at end of file diff --git a/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/MCPitanLibarchQuilt.java b/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/MCPitanLibarchQuilt.java new file mode 100644 index 000000000..6d40e85c6 --- /dev/null +++ b/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/MCPitanLibarchQuilt.java @@ -0,0 +1,13 @@ +package ml.pkom.mcpitanlibarch.quilt; + +import ml.pkom.mcpitanlibarch.MCPitanLibarch; +import org.quiltmc.loader.api.ModContainer; +import org.quiltmc.qsl.base.api.entrypoint.ModInitializer; + +public class MCPitanLibarchQuilt implements ModInitializer { + + @Override + public void onInitialize(ModContainer mod) { + MCPitanLibarch.init(); + } +} \ No newline at end of file diff --git a/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/mixin/RecipeMixin.java b/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/mixin/RecipeMixin.java new file mode 100644 index 000000000..dd7f6e646 --- /dev/null +++ b/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/mixin/RecipeMixin.java @@ -0,0 +1,28 @@ +package ml.pkom.mcpitanlibarch.fabric.mixin; + +import ml.pkom.mcpitanlibarch.api.item.FixedRecipeRemainderItem; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Recipe; +import net.minecraft.util.collection.DefaultedList; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Recipe.class) +public interface RecipeMixin { + @Inject(method = "getRemainder", at = @At("RETURN")) + default void injectGetRemainder(C inventory, CallbackInfoReturnable> cir) { + DefaultedList defaultedList = cir.getReturnValue(); + + int i = 0; + for(ItemStack stack : defaultedList) { + if (stack.getItem() instanceof FixedRecipeRemainderItem) { + FixedRecipeRemainderItem remainder = (FixedRecipeRemainderItem) stack.getItem(); + defaultedList.set(i, remainder.getFixedRecipeRemainder(stack.copy())); + } + i++; + } + } +} diff --git a/quilt/src/main/resources/mcpitanlibarch.mixins.json b/quilt/src/main/resources/mcpitanlibarch.mixins.json new file mode 100644 index 000000000..864f03833 --- /dev/null +++ b/quilt/src/main/resources/mcpitanlibarch.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "ml.pkom.mcpitanlibarch.fabric.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "RecipeMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/quilt/src/main/resources/quilt.mod.json b/quilt/src/main/resources/quilt.mod.json new file mode 100644 index 000000000..f2710a830 --- /dev/null +++ b/quilt/src/main/resources/quilt.mod.json @@ -0,0 +1,55 @@ +{ + "schemaVersion": 1, + "quilt_loader" : { + "group": "ml.pkom", + "id": "mcpitanlibarch", + "version": "${version}", + "metadata" : { + "name": "MCPitanLib", + "description": "Pitan's Minecraft Mod Library", + "authors": [ + "Pitan" + ], + "contact": { + "homepage": "https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch", + "sources": "https://github.com/Pitan76/mcpitanlibarch", + "issues": "https://github.com/Pitan76/mcpitanlibarch/issue" + }, + "license": "MIT", + "icon": "icon.png" + }, + "intermediate_mappings": "net.fabricmc:intermediary", + "environment": "*", + "entrypoints": { + "init": [ + "ml.pkom.mcpitanlibarch.quilt.MCPitanLibarchQuilt" + ] + }, + "custom": { + "modmenu": { + "badges": [ + "library" + ] + } + }, + "depends": [ + { + "id": "minecraft", + "version": ">=1.19" + }, + { + "id": "quilt_loader", + "version": "*" + }, + { + "id": "architectury", + "version": "*" + } + ] + }, + "accessWidener": "mcpitanlibarch.accesswidener", + "mixins": [ + "mcpitanlibarch.mixins.json", + "mcpitanlibarch-common.mixins.json" + ] +} diff --git a/settings.gradle b/settings.gradle index 06a89e44e..942e06022 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,5 +8,9 @@ pluginManagement { } include("common") -include("fabric") -include("forge") \ No newline at end of file +if (fabricEnabled.toBoolean()) + include("fabric") +if (forgeEnabled.toBoolean()) + include("forge") +if (quiltEnabled.toBoolean()) + include("quilt") \ No newline at end of file From 3b28e46a17ffbe2bb0c148fdf26b087a3d294721 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 14 Mar 2023 12:43:28 +0900 Subject: [PATCH 117/617] fix gradle etc --- fabric/build.gradle | 5 ++++- .../ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java | 6 +++--- forge/build.gradle | 2 +- .../ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java | 5 +++-- .../forge/client/MCPitanLibarchForgeClient.java | 6 ++---- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index a7965f4f8..4d019730d 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -42,12 +42,15 @@ processResources { } shadowJar { + exclude "architectury.common.json" + configurations = [project.configurations.shadowCommon] classifier "dev-shadow" } remapJar { - input.set shadowJar.archiveFile + injectAccessWidener = true + inputFile.set shadowJar.archiveFile dependsOn shadowJar classifier null } diff --git a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java b/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java index 43c91610b..7351eef18 100644 --- a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java +++ b/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java @@ -1,17 +1,17 @@ package ml.pkom.mcpitanlibarch.fabric; import ml.pkom.mcpitanlibarch.MCPitanLibarch; -import ml.pkom.mcpitanlibarch.test.ExampleModClient; -import net.fabricmc.api.EnvType; import net.fabricmc.api.ModInitializer; -import net.fabricmc.loader.api.FabricLoader; public class MCPitanLibarchFabric implements ModInitializer { @Override public void onInitialize() { MCPitanLibarch.init(); + /* if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) if (FabricLoader.getInstance().isDevelopmentEnvironment()) ExampleModClient.init(); + + */ } } \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index f8fbc40af..1c0cfa0b4 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -55,7 +55,7 @@ shadowJar { } remapJar { - input.set shadowJar.archiveFile + inputFile.set shadowJar.archiveFile dependsOn shadowJar classifier null } diff --git a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java index bcc7e2447..30d38550d 100644 --- a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java +++ b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java @@ -1,10 +1,8 @@ package ml.pkom.mcpitanlibarch.forge; -import dev.architectury.platform.Platform; import dev.architectury.platform.forge.EventBuses; import ml.pkom.mcpitanlibarch.MCPitanLibarch; import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; -import ml.pkom.mcpitanlibarch.forge.client.MCPitanLibarchForgeClient; import ml.pkom.mcpitanlibarch.test.ExampleMod; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @@ -19,7 +17,10 @@ public MCPitanLibarchForge() { MCPitanLibarch.init(); + /* if (Platform.getEnv().isClient()) FMLJavaModLoadingContext.get().getModEventBus().addListener(MCPitanLibarchForgeClient::clientInit); + + */ } } \ No newline at end of file diff --git a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java index 547a4b49c..7d550a485 100644 --- a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java +++ b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java @@ -1,12 +1,10 @@ package ml.pkom.mcpitanlibarch.forge.client; -import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; -import ml.pkom.mcpitanlibarch.test.ExampleModClient; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; public class MCPitanLibarchForgeClient { public static void clientInit(FMLClientSetupEvent event) { - if (PlatformUtil.isDevelopmentEnvironment()) - ExampleModClient.init(); + //if (PlatformUtil.isDevelopmentEnvironment()) + // ExampleModClient.init(); } } From 013c92f0ac611aea95720fcab2083a710b998cda Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 14 Mar 2023 12:54:01 +0900 Subject: [PATCH 118/617] quilt.mod.json --- quilt/src/main/resources/quilt.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quilt/src/main/resources/quilt.mod.json b/quilt/src/main/resources/quilt.mod.json index f2710a830..52ae411c9 100644 --- a/quilt/src/main/resources/quilt.mod.json +++ b/quilt/src/main/resources/quilt.mod.json @@ -35,7 +35,7 @@ "depends": [ { "id": "minecraft", - "version": ">=1.19" + "version": ">=1.18" }, { "id": "quilt_loader", From f2fcf22e4bcad3821fa9a1b50262a6ba80272e23 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 17:26:38 +0900 Subject: [PATCH 119/617] add API --- .../mcpitanlibarch/api/util/client/RenderUtil.java | 8 ++++++++ .../pkom/mcpitanlibarch/api/util/math/PosUtil.java | 14 ++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java index 21db8119e..64a699fbc 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java @@ -20,4 +20,12 @@ public static void setShaderTexture(int texture, Identifier id) { public static void enableDepthTest() { RenderSystem.enableDepthTest(); } + + public static void enableTexture() { + // ~1.19.2 + } + + public static void disableTexture() { + // ~1.19.2 + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java new file mode 100644 index 000000000..f01f1f046 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java @@ -0,0 +1,14 @@ +package ml.pkom.mcpitanlibarch.api.util.math; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Position; + +public class PosUtil { + public BlockPos flooredBlockPos(double x, double y, double z) { + return BlockPos.ofFloored(x, y, z); + } + + public BlockPos flooredBlockPos(Position pos) { + return BlockPos.ofFloored(pos); + } +} From cc1ca62af594c4f63314cc8c8612c03ac292ed41 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 17:30:48 +0900 Subject: [PATCH 120/617] fix api --- .../ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java | 4 ++-- .../java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java index 64a699fbc..13a6a9b7a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java @@ -22,10 +22,10 @@ public static void enableDepthTest() { } public static void enableTexture() { - // ~1.19.2 + RenderSystem.enableTexture(); } public static void disableTexture() { - // ~1.19.2 + RenderSystem.disableTexture(); } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java index f01f1f046..5ee8d96ed 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java @@ -5,10 +5,10 @@ public class PosUtil { public BlockPos flooredBlockPos(double x, double y, double z) { - return BlockPos.ofFloored(x, y, z); + return new BlockPos(x, y, z); } public BlockPos flooredBlockPos(Position pos) { - return BlockPos.ofFloored(pos); + return new BlockPos(pos); } } From a6a8c9c3f7ba2173da7abfa075ccf2a9a27f6ec9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 17:33:26 +0900 Subject: [PATCH 121/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 3d8065db7..ba8e80169 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.4.9-1.18 +mod_version=1.5.0-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 8c071ed4316a424f084c3e53fc7bfe6849578fa1 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 19:57:29 +0900 Subject: [PATCH 122/617] fix --- .../mcpitanlibarch/api/util/RecipeUtil.java | 13 +++++++++++++ .../api/util/client/ScreenUtil.java | 7 +++++++ fabric/src/main/resources/icon.png | Bin 0 -> 31357 bytes forge/src/main/resources/icon.png | Bin 0 -> 31357 bytes 4 files changed, 20 insertions(+) create mode 100644 fabric/src/main/resources/icon.png create mode 100644 forge/src/main/resources/icon.png diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java index 828a77585..116c45205 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java @@ -1,10 +1,14 @@ package ml.pkom.mcpitanlibarch.api.util; +import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; +import net.minecraft.recipe.Recipe; import net.minecraft.recipe.ShapelessRecipe; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.world.World; public class RecipeUtil { public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { @@ -15,6 +19,15 @@ public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, return new ShapelessRecipe(id, group, output, input); } + public static ItemStack craft(Recipe recipe, Inventory inventory, World world) { + return recipe.craft(inventory, world.getRegistryManager()); + } + + + public static ItemStack getOutput(Recipe recipe, World world) { + return recipe.getOutput(world.getRegistryManager()); + } + public enum CompatibilityCraftingRecipeCategory { BUILDING, REDSTONE, diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index e7faf6bb0..6422163aa 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -6,6 +6,7 @@ import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -77,4 +78,10 @@ public static Text empty() { return TextUtil.empty(); } } + + public static class TextFieldUtil { + public static void setFocused(TextFieldWidget widget, boolean focused) { + widget.setFocused(focused); + } + } } diff --git a/fabric/src/main/resources/icon.png b/fabric/src/main/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ee30da76cfb8f1e8b1d336ca50b7011afa1ac8 GIT binary patch literal 31357 zcmXuJby(Ej^FI9A0G4KHq?Rrz=}t-Mlr9xT8l+)qkX8iVf-WgYqew_MDybmd-JQGa zK7PK>_50&obN)LsXU;uyU-y|rLw!wBqI*OD0FY{HsT%_T=-(Cu!0`VW8=tbL{|up* z)?;4)keK-20@*#;fB^sk&{kJ54b0nb3mFrfF=M^7b_+lqwOoySh~MNIc8$UBgvEk3nu3{~%Z}rJlpqos(jxVB8*dh`sUUC38IQIlH61YR9;6w4w zep}V`x~+t1n}ma#i<6e#hCt@=>!Z4cz?x?Fo4_k%4+WC)_n{7~|4<_K+_wbD2W6F$ zN8u(%-gT-FL!WE1-?6M-AuisTbha6Bgh59PMeGfI&f{0po9Kg0YwBW zdwN8xOs|8rb-Vp-7%#orZJo1k)19ex@XKViBUL8kMhs$6iv8JV_x%8@&}m3=+W=)I ztUtBCYXPQA$d~;ZW1^+>>B?XRoJASMmC!LvYbYx@nZ+{qH;a{3F6+qPn_#TWTR+Ca z(t%BOoDkGu*HV4+JY-}ATN1tj`{;8P7#6BgPFw8WS*rxsaXCO$e)Btn_TZrNGYKM5x{IKN*ev|p% zPeruSJ`r{qgVP&JoR?@;bUW6<7qc2maiy2K9a}5{T@#%A-k8tM&Eg{2YX;17vA|HX zqG!@zqk6D5E*qxO-a&oR*!75A1O?oGh#`sm_Ow!|5zid3eUdJ;{`yDz7gZq};ydu} zuNo9L@bBGx7Ce}nZ;){wPJ5TSbx`8$?B1gM{6UJ|raO}o4&^gd@BT7^>~z36{sH)t zI)d3c@ht5Q)uKdq(ik?!pzgo|n#Q{kV_!xYZr}Z7P`LccB1hoj|Al#{5gu(z*r{j} zK`2V^#whn}|5~v&1}N@m)Q0%ZZem#EvV527+;p{+E{94IIx>Nw<$1<6hG;=`2RV>d z)3rmy&Zl^_+sf$9Tba%!s8B1&YwJ@pnqD-)`GYPDiETZfrDWgQD%tYgGtjyYOW6*64q`ZWt6*Uf$b*2IG(zca6?-`K`-0&`(0kIfGZ}1lSGE9UQ$|#lEkq!yIB@$yCUac}3$wBQwMvFBN7lEnhe?`TG~7Rhbon4of+8j3}s`^TMx`KS$n zJsk-rFmefMF%V*YSeT*M5;O1X4w8FW4qm3MZzJo#I=h}x&WCx%%7r^gv8VqZrn1A+ zz70pd*>1{&WpbmL)(JLuj!GInSH%=N<9CQ=FHcW5z~j#I+>eCYJXm{2kFw>R-vY(3 zFJog;Ga3qiPq_$Q)D(p6PLIerRpP3W%Iu`c19s#SI6ws}ZLrG@JIHm@LS;Mo@;BxR z^FLbcrPnpz<9_Ou*&Ioppki*_kn^*lQ^Gi+d8#G9r-aBdJ#Jy50jRK~=xR6y$~d5A zebRJ^hT>7ZJF2<2E!kDk3Gb-@#yn8U4o?G5yjJ8x!dv4yy>0$g!PMdsOJv~a`MeC& zfpPrToKIMXx>xCJfQ%Fanj18oeP#fUIb?|0UE^7H6a0&M1(NMa2@j>N(KZiu_9)~4Os^=FQ>T5U!+%#F8|Kmb>cMG5h1_chE(>vcyAhD!qRF}E=-7CpiRoLotg**_pD&zk#061@|c zPKl%}6x_g={8n3J!@vGMFixO9CU2&~QtqC&<>7euoxA|M{?==cKq^D#EjPX- zDTj-^=#EqQ_oX9voaW->IMMZfQd6mqP`0=CndlCmpntObl*;!b*5NU6)p2_hl z1L{-!(Fdp3hco!*ZbVQ{>Mc#T)##0#*p}oIbkWMSx*b&l@sJ}w-cY>fVLESx0M}>P zhzhr|nh1VNVSK0sZ{wZx=dRmvntFCuf0}&z4@}1g_-s+WWSg6=AjR2g{9;_=w+(d3 z5{LWZlATi^KLtXfP(SJJE+dqkRJ5sT&pmOij5sduc8gpkkFm5 zFDJ@upoS@&YSy&{1IeRZyKAHQVZ;8{Qd&vW6tefy z5FN5nEQIG}u`I-X8*Ez!-{WsJ^_N+jg)vs~2Q)sejWQu%~ zWA_HOc@K2f5O{=PFmbxG8CMFwl6j1L&gn3lrK+?2begEVO6w!$iX4LV2VcoYdV+%W z3%0DbiPDKF(-$H71WvaV%+y3aG-GzN>gQ^oL361zNHR+}HdQ5&WAq*VKTf2*ZZLPY zwj;B1bgpFBPR7d-P9|fN7-;ndX3SfL{|AcT03SRH+7?Bm5h}+A{MTlz@^FZ3`K{rT zWv>{Akt6VNvhRreIxM#W+WaltV%>mn$dc0$)6i^PqYmi2f;qIviKvE;x=*E)5vy@5 z(}vmcNvGO_&Ng4E`mQ~=o)1Hu0#Jvfpqvdn`agF85*V)K4H^nqI*0quFx~H%>Op(T zn}LaF7#F8rv;QoLdXpkjR5U{8O1R#vC;`=gHwP>orxz(WXV|A8Sg`B(<;3LRVB(_c zP8hljQ0jH8$f-oR0{zhML^d`asvp72 zhw%KvEIsr%nhUy2F^KZLHn#rJna%F&p?v>?$%~{xB~4i^Lc8#=-wnJJ37%$ven0E2 z4n8}D9EF@$7}Q6itX!q~Fx`F@e~(V-X=w{ls2__hl=ETXEO^fV*jfriPa-RanFF5> z%7OWeL270W_qDgjULi%Jm#CxCJ`hOtLnWyIE9xFUDfwXxh z(v~KDF0%Y*x-|O(ig1%9Ns)4RC#Wk2?OQ?IdE$l+a3j~3Gs2=8`w~CwbvjQ`cXm)J zK9gPX^mEp=?ab4{%zbyS&SC}M={jD8uNWN7Df%Xar_Zk-aqcxp%RDj;^Rrvvf)}=XFK&o zC_)YgrGxxgYlG>_j-op*<=>~>J(^;Eey`rbUiG5WSvibFI@rsk@>v`@%d@%dh%dV4 zy1FC2-@-LiVK3B3mDm|d)W22}Mns_;yYe|?4xp~{c}pqlq()H-sDrusbcN;TKIksC zTN4y3Kbb=Ai_^rp(P(<4yk>0j#9g-a*DT@g(2Sr)ZIEvY(w8%`S)-HpCK(<-qtWT- zjQ?RGAPY!{Qq!q1m8>m?OV{L!_tdJ1pF8hSOkbe+zG$j;eq#&pXZ1S2m;ar$O!yu_ z&B$C3Av;=tRpYDxN1Tx1KN;i@MtVRz1y~fwUa1?cD-oMt|MPy1Xz%H_3mY{TRRO5k zTbRLLfwBi`dTp5BkFRyanKfU{#!YNgJz#4?jk-mja`7glw znak>cn9pfc1uIHs&kj@m50?CozF6Ldw$~3JR?UD5K}a@+W(|(!3(vo6>T}Mm_1o+xx#ib`0AK+-v?w z2v#Ll3pDFbv8G#QjPj)41^KTqt99M?`o>nq_|aAb_0DQqI`&c zPa{5owQdUp|2{rtP*{x%Gw<8gN!n~Dy7%+%HAkFjOt2v1!$_kg@_LH{7V=i+z~w4) zgt+FhsLN6$Z17^M7JJ94n~pQ8T)eD8Qhb+k8G|DB&*sx2KVgDS4RgX(*PC-go8=F>}H5k%=H4=UgCi2VB^FMoVw zIqngsCqe&*<5DC>l9jMBW^(x60esm_?SX&HMKjSw>?pw)cxvg{m9+x&S{W!`(_0sY zH;b;P3Rn5r6LzCu@4N#awjUpybvEcG-7F@5~MHmQOw7!*fz1Sum=VEExI9h&_UWDPd5# zCGIfI`I{_3_<7Z{Zt_v~r#ZPvxn#|H9pZGL z`Fc+Nv4`HFjex%2ZDjc{({2Zo8=BmjjlU$9krUk>NlE+R&KjR*=$UmNZ!?|ASMLDb*QFxajK zrl&$1*h#K?cK__HNU{uDj3B8N_!kL-fHQ$9T_k}LtJgsOEt9$Z`GIA}R!8(=E4a+z zZjrTXHwk-hTf&nCm(WPaeo8*?$$?NsuwP5Ire(?gQp!;#aZRA6^JVBXs$nEgSF+wwMQP9<*ZdZA9q>LaedD!1Sl_uWc`(;xo9$-lsVFXu^= zgSR_8S!z^Yv)`z$Z7`O!p-KN5E0}L|kmQ@2QYJ#3zsv_a$|Z8@_!1OuGbWJ$3sDPB zGrc!Bx7mc*gn|#$pguVv3xAdKMfn_3UA(Y-4tL(m^Ly?Q6Ccy99)S`V2tJ38QAmx@ z5=G$S##yH%>f0z^VB#Atl0;assW2r~sOeuh{&U`xw~s?-0siIGXvs6Puph*lRUNYRP_SAaYo!~mn)CzD;#nf8W-(%HIZ;U zu_TAj->=JIM8U<&JV-3UeYxd+GS8R2#AF8WTH_kM@7_o&J%!G{3jb|R19y1D&I^A{ z>X*hJxM zuhVcHEqayz9ZxCkDVjdI{Sldw-MtweB$S}CZQ?0t`Hj>8Z} z^7tZi&O5sdwdm&)(DtH0qM3>+!tr0(AVYvMr7<~1Uaae*q`@YKolKv7c^BN~{5gyP zPei|Dq649(UX4Ib)Fk{b9rOD$row?$O>JqMCDK5ao?8t|zabTe@$Jv{@VV{NVU>3Z z-P*G0g~Y>N%z)(obXPh^1kBSy^7?F z{IIOPE!LaoU_-03c|L;VzkYni{C1-vnbcpwRG5tDiDWCGs5Pqyb%s*{u!@M#k{#rI zrv#r0woY{D9U#e>Z6ST1o$`2VJFdN_AM+!;I1=+;XarQpCz0%!K>s znjyO{UPBVG3;C*=>;$RluZOu9m4knv;By{(E;duTn(oPjsBK6f^E}^R; z61We-&!IM@%7>PM2Z-RLg{_VaM9OBhhY&CJF$w>xgadq9HL!m26iIEcB}_Co$*4?D zX_h5W=g~*v9Vz`jblnnq_Mdd96gz+N_~t~EcLsP+Y%o_o{xY-deqY8Kg zdsVomGK`09d$zNF!P4&%bdc<`2y#Sl8%^uFoI#UkfQA&eWW(0qDkKa7?~Qi&eB7Py zD16w4)Ry1Lt>X`^vXVxSd^=u>YE)A*XB%s|(<;_w`J(tH2p(l-s6Ad!BGW6I2Jg~& zg=9MUb9T1fSt5y?u(e!Wb*AjjarAnvoa_}rk>UdJP&?vy z*8=+Rgu0LtigZ@!^1Pc0-AC21i?C(uh?q~iqnpBzY^;aVB`Rf^I+VIuO1Cj-_x#I3gYwka5TDZDYX(5m8*8@dZsBfy!~N z5?UAph;s-heo+39xIxMUO>R^;<>UTMd;xt+s3@c`Bm!QcvC$sG5iaK5-DGGkjx8)n zQ5VC0(Yi=+cDC1fnpaVeNC1S2d!86xCc@Obmr(HysLdOjsG?h_1nN;ZP9|UJ7;?r5 za$vd{FoiOzKbB2!FHz1{A@C2h(;)d-&}rhXoAB^EDYvCEHqgVLL>^P()wl@5uGbW- zycG&Foy)GnzQsWf3mS`px6f2W%>ta8z4fCa8xRq$b6F`@-_IIL&ohw6tG8_Gg|GJ3 zVS-ZtgkL=DBy~AKW!>?cv`bb)4+T2)UDRYdsA9I8$N9IhkY(=;opkv7Wh!TosTx<& z{#n9Mq%Wd)leG!ppU*;4 zym5(TT`$NAAF*HB@FBLQVR}13bRWSV(6W`)7_wPLR`uK=9o&xyyk@N9L=9T!_+}uU zHPV&k^jQb90mn7kzFmPPy=E`SMmDGn9d@=UBVK*jyY>f3BjL5Hhoh~_&vRb}u@h>9 znC#KJh$?X&KfsKP%hkfSMqwHXv7feDl&5DBR`I3XcqptuO*Hj90~E9g7KUrjw#3Io z3uI#$>o{jeX>h*PN_{(j&UChtKf|2ydkaY&9uZk~-)O?g+DP-)u+#E2?J)UUGSewk zObdq56;q|}_veDEQt5Q9j0OGXV*;?96ejIAj^xT!xeUpL9`~@ert0!Ul?uzY`nlmp z-A8tuPlzhsVee(L1QCSWE~ZKnW?sQh`jTBr!8B2mEC_<*c~fireC3U>u?Qpa!;JHU zQT}CWu|H>jVzkIfLSx_$sy!aZ5ShiMzwaH3c~40U{S-Y##mj(Sn%)t!?K{_ixZG}@ zG1n(p)FA1Hb(>lfiT$J+AL13aOgIusBgw(WYnO)K7PR zN+v!f#+;?i&wD?8)RTr;Aq6^@Zbz}y)r<1vggN*ih2T@hEum zn@ZQeTR=Jwe$nHiZz0!wDRu0zfU}FBK4$ZE@nU9pQ1cO3HeA5ahx$_8Bl5~`o+alO zoNWefKFEdKT)T@ny-50_iABU3$uLAPS>^aWcqk72`hdhYAwekG=J~GfYrJ0=wq=JO z>M~QPBBJ$Pwpe59mrMN%joKs(qSDM94jH`XtW_J-8-%^FVB^Q<(hNzICS z(sydnmRzR0Uvk-N5S4U1H=;c{_eQkInsb@Di=Kms%MfphJhD9LN0_Q6-*!&s0!Kns z@ZIAqn}-NY|0_{zvmAkjR~rF3|04A!z|X9Ho2y`*&fm3OZ|!5 zx`)~HIQgy)uBD`qggv*9bFj{x2_P;se zoEN28PVQ7`1GuVDtV?t^V(ZLamxQ{wiJ;aLT@UwMHQpQ(jAlv_1d>58R;FCU=IMNr z%61yy4*$Iu2)!XT{_$8Gyr@4-7kQ)&?YR}=S(BHKG3%YY6vP5 zlm60v{OEF)%AC9v&y=}a zJd($_+3y5-wSqAzjCgU(IDSQNN7C_2qf_SgPEs`k$I>cJ1$)7sE|>N<*TCjZFR%4{ z&a!Rg!!mKrLTkV+uHOvkcy?8BD8PYZ+Sz28j}AjksMg!g(G29g zlprETv2vbv+Kbq!s{xmki+CI%W>Sfts$}F-dN_2Xfp9gm9I#f6wBPYEz>@|b($pUN ze;VS0>vr&_OPx(1%&qm;tMtnpO;cf{+kN)kx2LRr3~a-i5k#|C8Pl||E|Mr?X~m*Z zyAdS37O$-Dsq7)&AMU6qRWhUr$g_G^6hx#+qFm?WMj?Ylz6QagMCJndlkp*hu+`|Y zpEIH>j@!o?O9x@_Vqb~({6A=QeiUWD8he3v4OtIfKNGnElD}!m@?QSGS%4Dsj*Rb| zajN}yy4nTHL3v|pKfVoywT7FXKXf!CUf@`ZP6aGY*>2LYa2wq{zq8A=4nQUd6nI); zSY;kptL~NRUUdbqFRDHZg9r=4kaXni_$Gr_0q=G&k!Kph!Hk5J6~r;3tZdl8KcNEWqeaEN`zJPWkTNmPk`z#F;08osncz_D{*d*~W*ccRlH=V^2VCegh^|xg0vFz`fTmAzIDcXsl ztI}EH6Ap!sl+dSnt=D2>{aJ&uvcb^x8UQ+`6!`R5RrqfV>+P5L;}NNkN3-FpJyORg z%q)+0&_cwtxCKsb@k|>tc4WV_0}1b0y3@|Prty&2di6cr;@HJ)Q{k$B&YgzYv_WSi zvfHLnMURx<{iLM><00+tUGFuFZ$OepR138=k0>6dC_SbS@H z1i(~Isa@mV;X_mlD8A{a_6B17YospZJ`0arTm}ptJJ2>cle0(W!pVmD3p~IpP3?(4 zt4^qv?k=ora=~|U5d-OB3xx`f)^mBo=pPLy%K0*@chp-;O_~pO%PQzp`>G{h~kysmDXJ+)st?mxRuCU}8qQNpn+1|QUBp{Y8$zdv4Cckv%X>ql}&Y32I0+s5~JHf4+@z7q!xKr zHL>Cz!`9Xi@vhbd^#yiFbDewC7DaC7aS|PI%Qo>S@Jvl2{Kk!?r{n5Oc(qNK#Ur-B zdRXS4PM0e1T?fymZmpS9NT74b&6}Ib4#7o5I<7>r;rwbS%?)D?!g~LBe9D zav*u8F(DI3FV#yU&Awd<`L+6tj&)|O*+AN>r2!Me2jK6#p#Q%cww`U-_YVK%9$njF z3O^K9h^q2RB^jv|MhaibO?RLhUb2P@P|= z^v;zm;Mg5h1l0a~dOSS;%s4Oa|ezpm)GrVPKJ;z^K3nPW$GIOP)`%5|cN6hg6`E$h6TF z-H6?w(DnCyF03-$X_%S#6I;|7(fa z@1*$5s{r-&@&;|hEe~p-Mt4*0{jA`&ktT-Wd%~>MV!aE&JIL&!D*Mdo zT!e{5q|vz=sq`E_AO4zi$7IQ=q^g0z$ze%^ATp9#QbU`{_hsHnmQ z-xNgEbEMu^DkN2VMXNC%d-aLMq+ze1;g#^svL0XGsTjB5MPYq5$K~=K5d~?A-_D8O zuawx6*19vEh8KGeOY{$Qp>IlRe6BsQ!xEvGxB>F888@$W7%Dg-)*kzQ;5Y?$m2~~i zpzbf7yP70U; zK7^Fo-J;Hn@K%bPyeAjqr<^a1qHga9k%+%kwK%OyK{e_h-mIybdAgtGgobipYD4l5 zulpjlj6%H=mT(gR5lj(2f6D$!VLQ{--rIBrhrN_pb=0biYP1bjYF|6WA>+M2w~VIQ zV(?qhT>+~fEU*TlzcvCO09F&%cilfcsiL#sy&@6B>S#MNZnRZo_blMiq-Dqw=OG0&Ct6RGF1G81oXDEZiZ}r z{)xZieDewNDn@hZc*iw%EDHZuGI{cU;QWI8Y-^JPE9v^cBTwvoCq+fK2pd~USB~w? zSa3S`ymd(7e>L99>DtfBRPY?*8^eEC6g~g&1YZakFgIA<-iDgagba1j8h(mFUO3BE zdlXjdAOBgp@lX2La*`a-<`!g&R8c_6k?5HeJ$K8iv|xlTOO3RV9=%wK#jWl}q#3M{ z{|ox(B&xIdg3zwq{?Ag+RMYRj6a;ydZsI(1@ss6nK)@+7=mj$8Iym8B>cpJ;qx;;% z9)oP#wNL4j>F!;L>LD!g;L_r`VNPUlL+B0&h+OeqTO1^=?jsN4>_Vce@8{rC4yJ@Q-aF-BPpUU(=kvI-h$`+ z|CFo`9_p`%;H|n7w)mBQl)2nl2Rg{_FJCraFU64!4A%&(V}La91%r>*lC z&D0Pg^hoLG+Rs_V5o>#l;QSk3%Nh%|*-_a?W7S7WL5Bh-be>qs#UWNG5W17H)Jw2X z`sym=UiNZ@GX>Q11*$70SD5_c9i`Cf)bXZDu3(p5By6b1RSgSqP})~~Pfwa8vtOA% zN%0tjgmc0Gn;CUeE&&=Tu^OeUg)#U@smw#IPLL&4Pe`{Fe?5z$q%u|G zjEz?>W%*?91GzItqVa)Ff?~E5e{A8rXAJC}_k~BSuipJzCW9(;0dcT_hLvCHGW%xyqF#{ywV@y3A=4w8l<(?YzZ`R~i$4}jCuR;P z#-zBIJeejoUe}*%(1IkD{t_$QNmF_l$nkN2LrUp2F^{kZ(;qF^rOJ>AK8+Cin*e=M z+wfneS73{5(F79+i$nj2Q;fs%*tf)9K3=`1%T@QsD=!vyZ%tPfy6(#L3on(f1qE$@l0-nrm{<6wzx3TOTid{PDu5Vf@R1 zl#F}^TSHWcnq9g>6U|y-C52|0>7%JFyR^$Zlefm2Z^E=EDnzx&gQy92&Hw$!Ja*TM z)(Qv=j9_~JF8XnjiTIs-G8`#mybD!nQoFbIA@*Gd=(pG#{rxXhY5Pqk3bL@;{In4+ zzcmh?{8>&gTO4J9zlWk&YJx-{{nO9NqKycToI0cyp)p5sMRbsF+|&ELki_L>e&xl6 zVUdKnYMI5yImwvCPvqRfK|d*`y}L<&TeU|VdQMU5ZT1#^d|mfg>ZN1Kcr}fKlv*b2 zoxQ~(Z`|>U_T6)81A`F@yb_k!P^KHV|9%eS5Qk_X$Ei5FX|n;A>OBMu%FSr-AT|1_ zvj-LKE$^U32~j$j&0Ci(e25TLR~pl8@aX--q!h);1UuHpkQw34qQ4Z7j!-X1b)Zb7 zuOVG6r4Y0-Nzeb)=YZ#8+wj{Y-C??72I^35G2jhfCFhO1B;d%8lTQ#Y=1jzXg%(rT zce-4$Q`OjB+HsZXe|69#1VmJY5w&;?Ju-i~3gZ*qY2I>DdQs_zdH=3k(?(ak25i

ha19heJuj4CLbWrG1cdj3NRxZyvKp*M~gzqF&FLXD$wD8oO1Ry2h zYu771$(N~3KaBA6V_k0`l+4Uxxk|qdYlqG zr4d@$xYwm|_lSP{Z5tJw8=>eR93Wl(M>amc1&h`c%)MFaTyX*#*zPi!0l8^lwxvnO zQ!lD?x8hp)?D*gG^{`kSF_CE#G*O>6BmFU(A|d(6mMfj!v-YF1F9}f5dMB?nI1@ zeR{{^qln!qr&4Jo$Yr!3rogpu#P3xBJpq7JH(~~7H?ReV+r1ig0w2%obw%9GSsYK+ zDD_{MUxvq{PJ5rJW{zno*s#mCc!u9Ujm}jxrPX+x7m74Eu5C#a_|nZPLB66Og#v)u z`r~TwKtyY4uFO^yH{r73zm;orH-XN?2eIcgCWEgyiSO^rv>ZDB)V= zYU?k&Wr2I|c%%{v#X*fzVSVIs4loMvD^(J}sEn3cBGGt^~VauFSAIF)4NhnK+8RlC4-`<3lX z;~s!Kx^;_SY+Q#;{iPeH%wI{7HM-7P20y&YsNh|;>U%xqaC%)-aRf1~We1_3HrQ^F z3bzxmMr@w}@`TRwYhv-RhZXgdoooWt_sz(v=7I0L4+`_wjA3-7g&bc6!xWf*=Wb{8 zE_{^;>1W~%X4c5JkII#enKYD&DpW~}7DPavikfv6)U0i#!2B+wMjEtvZ}8;&kw0F) zM)vS`(MDAir0Y~lQIy2AevB+v9b`CJgb>guYdwL&ymnr6iJFEyDwI>c2LK6KyM&gc zAj)6x6DJK**4NtoclQXqAmQjKg+yz?74zKtlYPo+{iRmrLq1H&FG*Ew2s4zh49Mcum44w)4%!Yq+oiFkpqs$r+$JN z_{f|*>EVHcJ;-qseE|pZf~D*8iN+QG!s!X{^hNwW^vTEnbd9!%%O>(f|L#cme?N)k9~hHuR>pv zxcfEyn%XHvJs$r)%V9`IfYFlgbS@D3^5PZKH&my@yeFwkzZvV(R(;r_c*pq%wZ=yIBceR3TCytItx zTNy)Fs*aZvyU{|_D07e=Bax3hM!c1>ICH9MmMcqZk_zysFY3(ZS5qAzvT}in<;&c% zS~Iuu{zv5N1&P&BOd0a!z&FZ}vFea8UEOKEQx4^ceQU@p?G`{}%S$LvEOBtc zr%cs#7p#KhKA#NB0bvLg5@eLtWORCd!Em6)FDq5t)@^wDjwAu8sR8?{x{4!8(c8tltWTse(BP zB#X$!PMSiflin%LZJHlc&dtULk3LLoBk`6b6c6-3M!MHu=S9AV(KE0hlO42^PoETt zZX^7stvqTyNuYo0(LnLmt{^ECG8Sg@9ITm`>AR$l!WWU`mPCup$Rupch7hYapV0)k z6&Gt1{pQ&H=$5Wy&-L9`ZSj-TTm4ne*z9uZt|}#=+wakwV;dW99bVt|AHO7TJWEMW%R;sQt*RR)b1VoLrphR!VYW=hnZT1Cx(=0&e#_Ytert8#=s7-}zEU%X z$jp5U{ zB$&S(e0YkWj}44*px5WK4qU7jP}%ST!0C_sdx|BPC4<3*i%j~j@f{x0F;Uv!CCE&? zZ%>{ViE^;{c~Nc&!A>B9g$w|znAW4|{5DPp53uh6{O6Mn24#fD2T)p3tkSfhL)MGZ z*{vm3N@+Hmx%`T6X%vGK_Uh>cWQ@U*sWNs1_$9tsh>1E> zpg?ZE2K~6j(?vcMM3SsT)b9>#>o_=jXwW^yd|+Y3990v)u`|q&!|zcGSZlA90(ljt zyWbKP3A9yF_QsHTv%llHe!AKd>pAZ|LHKG*U({x1+uRfRHSg8=i;-osmtQugBL;p? zo&CB9S`E(_S`Q!p**4*+K*&htNvuxD<0E*^Px95TpuL??0!@5nCKB2+246Rcij~}2 zs(biM%?PL?bDH9bq~TKF+GZ!E0z2!z{lU$BGRFN>NW~hf7rm@awUm*;AZ8GKz4mGn zLjRx5ho8$1kJ`XYP=4|2bZQ>PTwFs@cm{9(M#;o)4}+F&;Szhb$R^CY3(d8uZ|`2N z$v9J(eH6(V;rWn|#vH)#HS$nQ=1V{`jr3)9mHkQ!@1x=adF52VlQMa8YIHk|J@F0* zRNNRx&HqI52(T2)Hrp`qiQf*9 z8^5dq%#;Tar;pP$4IlFkVqe;X7v(>>9k$|RnyAj!I*h(j?m`d>aee!YM;MIeZ?T|m zqx*hA@T4`%Mi-FIG^tS=v&gy{sm+TkOY=lL1f9GbhwC1Tu9F|t;z^eoL+hr78Wh=x z|I=zEUgL>6te_dB0s)(9z8@9^ed^|J;|e-&UIv2iZp0CEJ<&te zia8Nro~OTsjK#`%S3lZu?l-W;8_NNF)0N@zOjBar{0 zX7R6}Xj1qys)wHlIO-Ax5(e^H0yJ9lu_AHC)Hl5w*%svBN^!bzp9(BlcVT%-t`-l2 z@m5MsV4NOmy~uMqqdQ}0=a@# z!(1Cq>o%XUXb@UyI@`gkSk=nUkIn-b<^qqaZBBB+vqe$krBE6-KF}vsXMU@4Jmdvz zPlx{e(B-~@Ir?cl{3y}vo49%TOYiZV+5Dm7mu~sN4M(#Zz0cnKSM~EL)IdJknF5~l zndn8oL^cUG_q88aSE0a+MS9lo+3L%>^cf1ZVLD{+!xnB+P43(ZFJ4cweC?MOE7rZ# z?so2q@d^3s2=**IU09!E+;0%q8GBsYoY*DLb*V1EdBaNBezYLHPra_-w5r~&`h?Dh z)lb_PdRJpVGeX4>U)=jC*b1zCyd(=%?SFl*(XcPmhK!&fdX?f>MSa7t4*_lV!{WS- zx+tHV*s7BdM|0q1@+E(~j}OYqZL~bj=p|Q-lbTVO`EN2s+u`Cmh4CBvWf$0JB5*Wx zQ2>usT1~xV5it7XwAt5Sbl%Kc7A6r)_K_akcAa#D(>9bvzNmwNcdZd!Vn~iTxc)|ihQhGUN#P{^x_Q5e1duULlJ&49yXGkSNZxi zWBRQj^fPG`Y3zL3aaCJXPC!y`(Rumg$!6?f@o3z1E-Nk7Fs)havmNsT~;mZmJ@-7DWwU^X7IP#7HB?A(M?D%Jp6X34G;*2erQ#K~#rZ zkDh2Gv-@})>ui)hC4Z?ABI8c+Rv?7H)$!2b^&XDv?ljC^@nqk3f&H@sayRIL!n|Ii zL@<1f4ws#uI)q>X_bN*gKQVWBQqB`Qq{kk0b}zX{o;R2KhghDQQN}7OX5lCodt?j#wn=nnEVgg*=9q$NRha)^@DQ4Ma$|U^aFg`A~h3D|?s?0rqnfly%FEpDC zHht1-U)4*mey8J*`L*xa!vC8E(5}4WyJQ;jW_#qj(go)ik3O}E{yjm~b8Nc#{{;*> z^TpoH1B(`nszGd4MP~$KO;UnIpgpO;^dvVct7yBE21d9$jz0|UDsdH0G z+;?%D1n*sN{h1i?a+^iO?~6=|p)VvBDsL5d*5B2}_H0@t_h?ZBNM> z9%8=DU?X5Mouop8bKKY@Ofs7X)m)O0Pa(!FSs4*%P0jb}hU7RY>>(5;zEMnwXwdt) zE1|YCgkYn5CUoJZg&9H~Kv*7(Y(O^V;EDqP9|xRR!lRpuo!Z)hgdpl$!jF$ZK%V+_ z70B)trJB}<_n-puKByWBj!8*_)s-fOO)V<+Ul3+KDw})n6lMfHI@e z;A$p@D#7ot(8+Bf09_zQZs03Tm_%15?Oy>UQ5PMR9o);1^AMKNDbOy}HEE+w!(*EJ zEkvR6PXd9P127j-p20RI#i${_dW3j`gaEh6j%vIQA`eg~BtU>QWQZoPfm@p@Q*w>N-t*{V@(Bytly|X3E~5 zy%$ZF5J!-HDM~HzRPI8GyE{_)Fa6O!Qa0yxJ{_e8%tUp1kyMJLP9lmzkgQ}&INs1VMSG)EeWo*sek4I zTvifp@1?n>9+m|N4YFhblbZIlSQC-OUm(2d9bWToB>+pxRo@M;Z(a9;tPOYSMo)v7 zuiqtJ#m6T;`@0Pex;W$@_+`hHg3KRlnHtHAza7ka4LM;F?gPgzJ7T5#9 zJqch|$izJugR}4f@4@bHPXf3n0lY%s^e1u`hC$1H?f2m9!aV}82b={8-oYswSUc6g z0uf&kaHl1(vmin4zcd)n%f8CNYN9JD@)j`Vwpfya3(-mi5^7&T$f4pEwk&Sj7vVf5 z5Kp$|n}j;>(2#$?xJ6lwCd-EDV(s%v#V4`?lu>CLb3kl-X&r&d&RDjbIJOx3dj2?w zq+fo#g(bMmsiYjl06E0cRBDS`tX#~4&z|3XOWh1|sR1V~K!PJZv0Qw`qDoLlw1z{2 zid$6VQI!^n6eK0cle!JbLba9jK2i4l^O>!-!^ZUl%ZMexYEMz>jHm!1HaWhN?%gEO zd4t^$La7Sp6qO2GrEt_Dmh>21-#tmRr~r5sFgzR-dRv4Ui^5|D2;M?ci2>)Ven+=- zk@WlUfHJ(wV10TklAvH%B1ui?s>C{{#eDQZ8vu2TMrv?{LDt!J*o^DX7x^e&<@=+DJs&z_n}bv#WxnVD{B9(ECq$o2=ki6dvh3|sulNCvg^}6#Me@Xu;G}Gprnfx zxvn}>GPb2~5UlA|%ncwE>ZK)fk_27VUlw3R4QhD&r{DY)sL)`=Jq2cO+%-)-jZ#J& z=!ri<<175&|N2WZ`__7D$gUu^)f-uY7m6ui9tES+Ntb+6TOuwp(cnhR4tT z=zkl+W_#k12TXOD!{NSGA&3CSc*~c66B??}q8^r!irIXy@39fJ+}cvBq&J9inem-zU!~&ST`VfZkOH+#mY6P(BN19>GvB(xbW^upRn*w0AnI? z25+n(umvhMEvVFcUQ?>1GL}pYuQj;7)(P z+ev_80M$N$KRKK^31H07GzOCrfS?bmArzGr`+&A|(o{g!Sp?!j@=6S+EkLQ(JrRZK zvm+t2XAJT4yrzr`902>R~NybM6TOTS+K~D0?!wSgi zHB{^MV5bmIwuoj}OU`>sL=p-s70sLjED|CK8>lL(G+*A8^Xb`{t}!RyzI43xgt)k7 zjT5XwO74oo!kXzfiwkfj_hue`)3_i1S1u+9mXD`xthT@=AkFbz%UyvGueO>jkpL{Vv^ZA)5&rr&etF>D z9RAP4c!&3zxmeQ7m293H3h!LXyYVPY1Os?Wg!*4MMO6pZz zwOBa?OAANdzCnkC=FT+hPu3SAtNs&^u2##pHr=?4gvN1)$IRxci;bEj0#DLO4%@_T z27#43!!0QRME0LUtqZog5};lc^N}INQ0;IX6mVz|>q+ek`>OzsKoUeCQK*|g3Fqo8 zjx5jL5SIJMUlpvXw!aVY?BF61f_Q;rg+C?y2N0-txloBHqmd)48Q6`%xIM-7w{qP* zEIR3#A;J(iD-uKj(PoZc)$BH?IB?^6Ilk$t$FqU@$r`VB>`}8|MGc4)D^?H$!lq}# z`B4TD4R4}?mgKvjGqQ7v5sDjcHH|Kx_sU68rW#wa$I= zY?Xsh(Akh6GQ&6?i*&IJ3QJ}J0#k}=KG0WMA~N@9xHhivOQdLo0a-RCt3gP%RP{{v z=~6cVISZLFPIA8luUZCo7g|EJ=c%#BdI

7KoUGA9beKtdXX^n>aq2ip z0`=A^=v|5~n8Ib;$a$UrUc_Fc^NMD9*JnQ?e&BRzbZyDr{2p)L{KwQu2Lc)d(#(Nf zLP>XV0~W7g9gPFwXz;uXqw~fyVw8)}>cBE8Ee>sA^rp`p~Y{iiOt#>9WqcX`Ru zJsRo*%tC6~%?+4KF)g*~T?MrrW> zZ|`e*Y-y6Sp2)23JM$APjr=#@pIFFZ!OYUK5F0Q8Sr`^0q!BBSELN=8dF_>vm<93* zHhjpEg=CEoBmRKr-mc7G5gB!&^5kb#oj(2E>1b7-I#F34r>dSOA|oR+BW*!liX?HJ zbUgtn>QDRUugQ`W&kZQ5@;CxmaF;^5la#T?aG*f&TR?_EizEPRM29#cW+qA*lNdm#GUJ5NGkxR$TGa#&zbj`67ZifxT=hF ztUv%3O^-c%K$$=bfFq3(x|m%tz34UDYi68 zdu&bkxW5ZqFs!3%$&v2J+uQ`Xg}%d3er!`m*9U9d>6=%13lwR>ADM%**Pu}S8hevj z0CL`4w)v>nbn=CCCQh>()j0h|z4X>E2*l98NMbeP(faV@ZWIC5>7kf40-KIiia_4q zFxuYhy*@_T#fr8|v^OKY7knV~z9bhA0Bv~+@Fv}o#H~|C%jd=eqz>wW;Ke$vCo2i~18j!?6=7xKNiRJ?QmaM5J)VZ509z)6lw*;WUJ91*Y2)F7$ z5K^TWZzN&n{^NAc?Zvb29T{E6uy3i@4pVPJ=~)holBL@Rf!Xl}3^9IleV+nMmy7)E+V2oHd|M+%9?MxwRmTCg=DK>P>!wD{uR%-GPypyi3 zo8s19n@h|*4vC0MQcp^FFdNh1Q1l{i)g8xawxBe5s!2a?c>v^btjav#Sro5zcX9$p zw&$FC#>3D#U9fzBIW5L*Sva|(*Wl9IWb zflKT222Av#oq4kTQ{KI8-=!b`7q^fKigLfVg9xwC;=cV$mVZoNnD^N94!LSG?di zSiDS=y>P!Tz!ox?=sBmdbyrTmX`vM_p0>$W-!m&4z}AeqvXg3Dr#mm8)l>%#(p@={ z!^&TzTQDcXm&HfKO9kGxz^n&5Msyw#z_P4x$4Ta(zne2YMEKMLPQVZ` z@CWANcyZTSOF%igfxOrfz?&wjQ|$60$?n(f+)yc z(%&z@x-HUE<@*;!NB&96vx?8=N+tztE75YH0yu1A&`>bz@+5UJ22ts6z zZq>Opxhl?)j6-4W7n8$Fl-`>Nrgpf9KNllQ;2c5rOC6y~>D&a~JUSu;RyZ`u~@r_^b7JrmxFWwd2Q7o}! z^!X@r9TP?T^?&04TjGvsw zCV~AtKR5HJl;vY-;)fCVMos$Np$($-~HX;^IKWjVSNMs;XnD8GN?)% zvxP(v^g4KwC>fss?&2-WvI3s*>%aQT@r!~J{9rYHaS^XRT|Wo7L3fh2e~F|f zl86Y&>N$dr!H~uX!nttVyl@ag3V{%URLI7}rRwIGL?!7w089?_0TP#%JHV?ymxEq) zW}Ckt2(h{aU*ju&!#|c($SsH-5k1MUSusW4R|P-BrSbt`^;i(_!VYf}FQZE_##cAj z6^J=V5W^7`3V0>ym$v$lh(shfNl!&`dwme#JBsi@styhjFHSxer+|p5t7!6MGQ+fW z4F*yg^|5E5{qeuh3P+(o&%H`=0OeX3uLDiBR@mKMd$s)U4Su-}NxoR)f&hn=2R#79 zVQ&#Y%6EVy%UN}dW=Oo}$;|_(S^f<4n=o&q)|`>xXzMG!AJj%Wd|=<+VnhbC0N^nN zek-$sDrkRj9c4zk;Y&3|TQhbe;6(FD5aJ5bd?=Ml(eny8?5i&_041enO1%KU*_&Yl zauYvg;czGb#PQa8!t8E?mo`LF-fxwAzqvJOe8VRRCy#52f2l< z@b?ISd21#nV`#|Vj`M7}uLATufL#^fg0>rnH0cMnPF{C7w(Xrf!d&AQ1&ii-(cuX*VL#vt(Zd7ynEU%G+*k+pHV!}yt9CMxLAMl; zW-FNTXX7q3W<>k-#OyVTe%0YFu!E)@OGV%QWby% z*yJ>S0C&kSyMEvUO`Ah*=~i~1iaRRS$zjG=pLEvz1gWYinG^O2STag+`fg{_`A9Nj z^Yk}sHNcKx@IijsQU$t|Qr$ns?qmp~LM&18P;-g2x113l85G1*(B`xEmTjclh(aP^ zdYNU^YC!Y!?eECJ`rg@a?^y+SVPO3rZ+(*Ynw^+9rOChZ^Bs}`p zI}c66HSwda20*OUQ%I^y_kGxDm-J5n5K~~$408qydK#0m5n#lj0P?Jm_TV)gU!N_@ z9r$~Zexvsnyg;^d%~qc#mx5jq+Ham6(o|Z&>sy*i3i9bF!lxj7Y4DJmoU?$0xcKeb zkOs2cs{TuAE=!3^`oN>36yK0z++CBp$I2cvZFLhMA&#dAup|t$bLt6qy?pHRa?sj> zxc|2r&|^FmP4C4;!)p~~#r9kX1X|PirKK%4 zSgV7%JfYf}OS>7cq`$KLANNgoY5}!sAnnIDW^jRTJ+F{j16ZTWRA@u2OLGdWhTJ-e zKmuv0y_bM3*ta{68FX_aGzYlV{CJ1ENI!=;*OzdQuU6qL0DHjt)x4)$dpF(X2;7o} ztZ!esw0DY4IPuhOahk`S2Qc>Z$Xxahl0^f0#T4L9Rp5#$KuvNh=2MG6swE(RWHub9 z!)ncsaB-$hofue{#Fh2{b2>je;I6ZX5S9ixy>uJ9x%V0zw8Mcv zZFVHSq-$+Ygb?LC-mmX+&Yp}10So#oJb(q?zzE>YUZmMlA@9YK&h2&REC@k(mgveF zbub2*=22P&`u*X-ES;IO?R@aX7Vs0ild<@|P=H$;;`&WG=A=O?9Ru({T;v50xLGcT zhy^miSqcmhQ)t`r{A(`r~2;4J8U#p3n)( z3jhA^gZTG;kE>$=cqGBi7po`0)$ zcz>)lCk@N>|Ni@bncw$9;XnOTY}N1>_v^K#S0;pE{oVtxu>jTef`Bn%8zX)DRRcl8 zi>eTjWpIbD@dYlXXwFbQa)IOIGt3SsN=W-Ue8F34%8X#!X6Il$7TQ$}oQrTsed$xR z=4LIAyM^qu8`S^-q?uI+sSEam3EX*7Nt*R?4LBN!M3B*(g}g%=_+{7XQ+X^pLX(Uz zA{mXdB;cNGeK%3u&0tQy>wb2zm>TfpZ$Uus?+;!Y2OvL??LDabSe-3rkL}zgRfv@q zeB~GX?fM0jMtN|hkr*>!#{$|dd_O3}a4AE_alnsV0H^Wvg7f>fU6a!FUhe*S`7-P{&i9-Y1(sXD+;%Evb#LgqJAJW?7M zwaJI+zQ=DTNb~u5ICI!LvXstYbjP~`k1V!&P$P!3LXh^{)Dy7ZC0E4pSYP(L{cKYg zc<%;xFSN4dqAax8_xXz3e^}DVwL7(TkRgs+N^~m~`p~RS_eZ(l7$@b?1W>}QsXDkL ztZ~{~NXw<|pcf{ye9HSsvGsu5Fo}N`auP#l31O}~a4Rm5GmMriRSnWHpE(>9@cdNb z-&WD8$0q@!j=Ow&3(O)R;^5duPSLeci%EuR(2lClh@qwg+ks)I{ zir<3nz6vmU;?bpay!6AL{T_T;py$e`2ZpxiUBhCj?7_v|UC0cO&+G$Sk_T``K3~A+ z$|nJ%4sey(w*FDVNIEwR?9r3e_9^WD?9LFMFW__KlYns?cNcl;_f>$>302pqOH_3# zg*wis2k_f1p9G9^;J$za>OsIWo64R*nx_ru~OvwYmJz}KGLBLW(awJMQ zseAUY=vP=EPD^a0!hT9wK0PqZW9Q;!*_|x!7F%NzKr;O7KAQDc(&hUn-4#=dz0x<3 zi!wjJ#Hh22Td^z=U*jU3bq=J3Gcf{voY7roBr?EEcstk@LrfsZ{se-HGQsBP_yU0( z*2q|v6^5uP-!9L=>(sPLd7XO@kzmub0^b83!wl8-( z85e+>{IUzSnJ5sDr2h$lion_qPM41)?Lwx zum_fqF(5=yUSbB~!PK^AN5Pp{z|RhAoM@CiJ0C;zqm6{`mR8Ibmf zA_Ui-yPze{_5k7~U21>e@+d$*k~~K6GPwUTW$|l)!BVW?sO48s*v~x9V1LA? ze99Ra0ZPk#?}74cnNh+yNJ_UM!Bl!dz>?11$g|+j!Jd~fI{)MW9nMfEe z;8;sB_*NnVm67~_E5M%z0rk3oE#c^MJb_O+EoXq&0(uL8S6F@fIa)<1lq+Wf_6|fe z7AH6h{=7P19~iJrhWRY{tO9%oqQB@;fDwYhajJWx>?2$UZF7_eWY5|@&sAvSR zkPJ;7u?=Z$g(HAylm)Cm+XG-`xEQenfZv0Rp6jrc<*1823j8A;?&vjCKs`hZNmp+L z=$$y1S`WaZb^emR^m+FAI|cC=7`IW>BEX9S+et5(Zk(m*!O6To*YuD2tgSkvVl@b}$_9=B10@}F) zC67QKmVU-~NfqFgz5<@dUdV7O^o8HBEWjIiAilsM0^kafFnqdJoxRsZ21mv>yuf*u z{so&kE}uTl=Xr@RJ4B8$L8$|1V0L61GaQ+L7(lu&G8v~{I}_ks_&ELXXTUwGpYa50 zKy6v_GuONG02H`DIpZ(am$ubh^4Y3D4g4i9V0049jx2bS!Mw~2v(^6W`jb7uhZT+q zYa~QCP*}h#gIM~@b6`Z0I03~7pN=mx1rrb%6rv1_!7_O^r}}_%_t!#1a3Qv@uXp`M z7Xl$hxxeJXP)>z~JTZnwL2?G;U_j>& zyuu;ifBn~A0>oJ8=8yY|nI{IWszZO6{`i0K7xJ8e{iiN9eN8vJ9JHKGGN^qYb@NMv zF#+lsLTRT0*IfOQs3%~hMGPf?+x=|Sphg1Ldr@mt(pkOHU6Dr+B4LHc8^1^_AibE8 zQ=efyJvo^@c>4~x0K7#Hmu4w;905mw4!Du?z(wE(08jWBF1S8}9MC0Q3-~47Rp74y ztOU~5rv+{87&Q_oS^e6z=SyunYZU;vfkxMBU~lyZECIfBj2gi6V~vo2K6v}x>T)kY zUl!n!D#S_)enT(#4ZeWldb^D)piXmi1O|ba;gTD?@Cw3$H+m5_*#&SUP)sijGo%oB^0$;E07&@&tCvxQJV!Z2I=%ygNeF;g$`d3GkjpNJc&3URfog+71lXfF z{r0;_39vPN5BxQK3*^9<3tl6FS@5?=pylGvl333JNZ;=>0aZ!?nj^UaquqvU9>G!Y z+bTg`J+S3Y3jqw7)*3QsW@HC%2G0aTtSyriXUQLsk%Y1r|F=!_WdzzpVAn?gZ;#yr zdk@$Z@Dz155*Q(b*0t1tJ?jNzy8ULK@LY+d8r6-Y&Gtl%3Ox!^fGSw*=^#{wNu=01wQ006l`JeU1=9%leNJ zMQOi=r?HO#l-6@O(jC~!Y~(-RK0^Y!u2x@|%roS>c{ zpttR+rRAcxENTn+=EtbFBb1sRagWuD@Nssv4l8$4cO$3kU!Xh^ZO?0EmEN1~GxPFMtD>9EhdqEjp@j+o#^t3XD9+LFkA#m?)QxZfJn5>A>f$dFPJ6i2Prv#OS&VV z2io8o0a6d>GvIGo`4%bE09@K%UlS4ICsr>0txi`x#jR= z>_WE1AtHGIvd-kNh5z;a)iRF~y1&M!$Oypma=9h15x`Y|zk&ox>n-s22%<+CBMaAJ z0Q$WK`kAs;N|EBZ}+jX1O2*gws001z7 zqXWH>^aa?!PEw@^D0&f1ndz+KfL(XxXGsobyFTItjBIO>fL=oj{599R1iGHSRi+2@ z9znH8qv8?VCj#}rT_!>GakXH7tnH#d!QQ8&w2qP7QLn$wC-K9iFqOra8Cp+ zFpo<9CLbYzGl@X?c3mzY02d=1;zj^5nSD;}{qiMZn@8O3s{_oC+<@d6&=tu^!@}=) zuG%GZ0G^i_)#aW=N!KEUk_T{x1g-#okF08BQ9Cx5CI-ogz)Id!*ke+ap0|*L+^&~& zc~#&D_%G^B=$*Lz6ajY9j!zzvDWWGLmwA=AVB)0eW^ugxl z1KLC|O9(SdjR;0bpjEC1{@QU$I9V7KzVD4c;NuJh{e5Op@4-24?XY z%zW$3{Uh*U`s3#Wpr1#GptRkBqNF=Z0yV2Y1OCzLXc0%v^4G{HE&CWiZjtl80WHAP zdIRR3K&{NtOu$lLumye-81xsoz|IBu5V3e{qwKOn8r*{r7Y9Tc5QLebS$LjTI7E0S z-Ga&Q!AKOR8v&$UpSt@K0FM>!BTUYz&$$J9yWRqS>3H^io(22}35;6*nnmwf`kv)4 zU2}^RvW56}euv>4;5~MqM7MRjSe*iDRA-l5r{Ar*-6t z&h=JTvha^2ffgC`z~A!-t^$A0D@eNgA;C&O%@34s&vm^hzkbh;m)Gy@etEsW26lU_ zS@7Guft(Zy=g@Kfe$X;v(PzqzT7SFV19)CeU*OU{wtS5kj#&K?xLY1U59lSLXo0_` ztC7y&a-Rv9ORq7y1lpSPJb{uIP|}wIfj!+(Z=kXKR(b$eTK`-(Lj<+$kFxqLi{G;P zHE_1PgHiC;yo%PjGhICsu%@$myS)bP5l^7!1*kr^`n~GF8Stw&pf8uz>-X=O0Dy7t zV1@u%+j;ka7j z05?7J_fZA7ngH~BOV=ZZ8o+zoYm1gS3iw=C@&fYp9?)mO-_o5}#)5#oz@U}UAYjkR z=Ve9%ekI)%Re@ZGYf_1yE+wFjmd$k^$@&8~z}RwEkiZBT)PUY1iX%WjdaR_oj{%fG zIs2lI0)E8(?^%8QepL{#1pdnMzG=G;lKh#RApre;#QK*2UE5c$dDQCXWgkrfJ?r1v zenxk|JGfN=fO-%xf1pR}zdaJD1pzJa^K#7lw*QL~LKwqea?uu06r%RaZ50Dc;3FvmcM+EvgqSKc+FITegk0OD5TMf`9k|+VTMi3<{ zKLU331_nuCp9o~77Z1omnU|}HUR>VHHe&g8JwJD?>Ccv*0e=WXx-bi#k0@7I{rr0m z{70;R%hH#0SCha90ko`o&l4E2<|CjU^&*A{prq3!2fcmRwbp_h_$6H}=x48Cq&e_N zRiH#Ptzcu%)A=FD$Zxos0P@eC?$HD=LIS<@9@s|--~fo5WY9U^J_xANs?TfPJAVPx zO4{%FF=mt~6e1ay1tEnsW8 zGbAvgpY;SD4Srop9fHj9_LGAG{a{`%FlcpGHV2Maehc)PH&7yk(o!P{Qx*8`f`BEN zwf^?|DDd;onq|+wk6M5IomYDRqnZ2%z#Lds@_^sW3o=UrGnU_$Da8g# z-au~YOGHpRW_FzK+5;#(*HL|s07`_>19)p&&l9laMu6WdJ3yeg1d3-$v^x4eLsz9zl$`AZM9oBvAtl&S(H z5S2ildkHz1)bl8nvDY(70M_#;U0?oLx}NWm0A|Uc2mVwEW8~%XYb@znzpr(_O519> z894%e`+bxUYPwO6;EJUL^4j-NA{g-iYF7UW@RtICNghi87O+^-2*5JGFcx9w_~1;1S% z0enlR&!DC|3;dpL#1m){#8Gcxv?^fBm9hsjsZS;~LITVZ7|b7l)u~udzyjKSw;;1* zP_o`Y`Lh-Wu>0oaS}y!3_)Gid<@4+5>Fj53-Gc2(FQ7*7we2;~mvl2kkZ%w#5&+6cKqKWWf#f8T zml^p~D_RQpSwgVoMlJdb_*-OV|Uwdvz#^#e9A%WbIkCrQ0xBPn#@OeBS_eyd=TiqxT%!0oL>KW^Q#tW$Fj!MrH z$iH7j0FNSp68L+%GemHv8Zb%#CGcND0D5CbJb~8!Ir#1OmS<3E`cr)#+$-sFfRE~C z!LPrg1^!&8=goEYKG<@)tyHdb?{XO>h1QEx0(EJh62R?xj|lXAI7$M!n|~DeHK4b2 zrSC1>2+&n$fnL&e+%ZYzOYrIrIw+P4M@Jn7nO;-Z=Ob`&Lm#cxkrnCFmZMv>9;tiC(x4=E?71Um=TwemUU7sO_7QplG tJrd|GBNo4;JL(0rEdNm=I01eD`2Rs5^rb0MT#*0(002ovPDHLkV1fkSO`ZS% literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/icon.png b/forge/src/main/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ee30da76cfb8f1e8b1d336ca50b7011afa1ac8 GIT binary patch literal 31357 zcmXuJby(Ej^FI9A0G4KHq?Rrz=}t-Mlr9xT8l+)qkX8iVf-WgYqew_MDybmd-JQGa zK7PK>_50&obN)LsXU;uyU-y|rLw!wBqI*OD0FY{HsT%_T=-(Cu!0`VW8=tbL{|up* z)?;4)keK-20@*#;fB^sk&{kJ54b0nb3mFrfF=M^7b_+lqwOoySh~MNIc8$UBgvEk3nu3{~%Z}rJlpqos(jxVB8*dh`sUUC38IQIlH61YR9;6w4w zep}V`x~+t1n}ma#i<6e#hCt@=>!Z4cz?x?Fo4_k%4+WC)_n{7~|4<_K+_wbD2W6F$ zN8u(%-gT-FL!WE1-?6M-AuisTbha6Bgh59PMeGfI&f{0po9Kg0YwBW zdwN8xOs|8rb-Vp-7%#orZJo1k)19ex@XKViBUL8kMhs$6iv8JV_x%8@&}m3=+W=)I ztUtBCYXPQA$d~;ZW1^+>>B?XRoJASMmC!LvYbYx@nZ+{qH;a{3F6+qPn_#TWTR+Ca z(t%BOoDkGu*HV4+JY-}ATN1tj`{;8P7#6BgPFw8WS*rxsaXCO$e)Btn_TZrNGYKM5x{IKN*ev|p% zPeruSJ`r{qgVP&JoR?@;bUW6<7qc2maiy2K9a}5{T@#%A-k8tM&Eg{2YX;17vA|HX zqG!@zqk6D5E*qxO-a&oR*!75A1O?oGh#`sm_Ow!|5zid3eUdJ;{`yDz7gZq};ydu} zuNo9L@bBGx7Ce}nZ;){wPJ5TSbx`8$?B1gM{6UJ|raO}o4&^gd@BT7^>~z36{sH)t zI)d3c@ht5Q)uKdq(ik?!pzgo|n#Q{kV_!xYZr}Z7P`LccB1hoj|Al#{5gu(z*r{j} zK`2V^#whn}|5~v&1}N@m)Q0%ZZem#EvV527+;p{+E{94IIx>Nw<$1<6hG;=`2RV>d z)3rmy&Zl^_+sf$9Tba%!s8B1&YwJ@pnqD-)`GYPDiETZfrDWgQD%tYgGtjyYOW6*64q`ZWt6*Uf$b*2IG(zca6?-`K`-0&`(0kIfGZ}1lSGE9UQ$|#lEkq!yIB@$yCUac}3$wBQwMvFBN7lEnhe?`TG~7Rhbon4of+8j3}s`^TMx`KS$n zJsk-rFmefMF%V*YSeT*M5;O1X4w8FW4qm3MZzJo#I=h}x&WCx%%7r^gv8VqZrn1A+ zz70pd*>1{&WpbmL)(JLuj!GInSH%=N<9CQ=FHcW5z~j#I+>eCYJXm{2kFw>R-vY(3 zFJog;Ga3qiPq_$Q)D(p6PLIerRpP3W%Iu`c19s#SI6ws}ZLrG@JIHm@LS;Mo@;BxR z^FLbcrPnpz<9_Ou*&Ioppki*_kn^*lQ^Gi+d8#G9r-aBdJ#Jy50jRK~=xR6y$~d5A zebRJ^hT>7ZJF2<2E!kDk3Gb-@#yn8U4o?G5yjJ8x!dv4yy>0$g!PMdsOJv~a`MeC& zfpPrToKIMXx>xCJfQ%Fanj18oeP#fUIb?|0UE^7H6a0&M1(NMa2@j>N(KZiu_9)~4Os^=FQ>T5U!+%#F8|Kmb>cMG5h1_chE(>vcyAhD!qRF}E=-7CpiRoLotg**_pD&zk#061@|c zPKl%}6x_g={8n3J!@vGMFixO9CU2&~QtqC&<>7euoxA|M{?==cKq^D#EjPX- zDTj-^=#EqQ_oX9voaW->IMMZfQd6mqP`0=CndlCmpntObl*;!b*5NU6)p2_hl z1L{-!(Fdp3hco!*ZbVQ{>Mc#T)##0#*p}oIbkWMSx*b&l@sJ}w-cY>fVLESx0M}>P zhzhr|nh1VNVSK0sZ{wZx=dRmvntFCuf0}&z4@}1g_-s+WWSg6=AjR2g{9;_=w+(d3 z5{LWZlATi^KLtXfP(SJJE+dqkRJ5sT&pmOij5sduc8gpkkFm5 zFDJ@upoS@&YSy&{1IeRZyKAHQVZ;8{Qd&vW6tefy z5FN5nEQIG}u`I-X8*Ez!-{WsJ^_N+jg)vs~2Q)sejWQu%~ zWA_HOc@K2f5O{=PFmbxG8CMFwl6j1L&gn3lrK+?2begEVO6w!$iX4LV2VcoYdV+%W z3%0DbiPDKF(-$H71WvaV%+y3aG-GzN>gQ^oL361zNHR+}HdQ5&WAq*VKTf2*ZZLPY zwj;B1bgpFBPR7d-P9|fN7-;ndX3SfL{|AcT03SRH+7?Bm5h}+A{MTlz@^FZ3`K{rT zWv>{Akt6VNvhRreIxM#W+WaltV%>mn$dc0$)6i^PqYmi2f;qIviKvE;x=*E)5vy@5 z(}vmcNvGO_&Ng4E`mQ~=o)1Hu0#Jvfpqvdn`agF85*V)K4H^nqI*0quFx~H%>Op(T zn}LaF7#F8rv;QoLdXpkjR5U{8O1R#vC;`=gHwP>orxz(WXV|A8Sg`B(<;3LRVB(_c zP8hljQ0jH8$f-oR0{zhML^d`asvp72 zhw%KvEIsr%nhUy2F^KZLHn#rJna%F&p?v>?$%~{xB~4i^Lc8#=-wnJJ37%$ven0E2 z4n8}D9EF@$7}Q6itX!q~Fx`F@e~(V-X=w{ls2__hl=ETXEO^fV*jfriPa-RanFF5> z%7OWeL270W_qDgjULi%Jm#CxCJ`hOtLnWyIE9xFUDfwXxh z(v~KDF0%Y*x-|O(ig1%9Ns)4RC#Wk2?OQ?IdE$l+a3j~3Gs2=8`w~CwbvjQ`cXm)J zK9gPX^mEp=?ab4{%zbyS&SC}M={jD8uNWN7Df%Xar_Zk-aqcxp%RDj;^Rrvvf)}=XFK&o zC_)YgrGxxgYlG>_j-op*<=>~>J(^;Eey`rbUiG5WSvibFI@rsk@>v`@%d@%dh%dV4 zy1FC2-@-LiVK3B3mDm|d)W22}Mns_;yYe|?4xp~{c}pqlq()H-sDrusbcN;TKIksC zTN4y3Kbb=Ai_^rp(P(<4yk>0j#9g-a*DT@g(2Sr)ZIEvY(w8%`S)-HpCK(<-qtWT- zjQ?RGAPY!{Qq!q1m8>m?OV{L!_tdJ1pF8hSOkbe+zG$j;eq#&pXZ1S2m;ar$O!yu_ z&B$C3Av;=tRpYDxN1Tx1KN;i@MtVRz1y~fwUa1?cD-oMt|MPy1Xz%H_3mY{TRRO5k zTbRLLfwBi`dTp5BkFRyanKfU{#!YNgJz#4?jk-mja`7glw znak>cn9pfc1uIHs&kj@m50?CozF6Ldw$~3JR?UD5K}a@+W(|(!3(vo6>T}Mm_1o+xx#ib`0AK+-v?w z2v#Ll3pDFbv8G#QjPj)41^KTqt99M?`o>nq_|aAb_0DQqI`&c zPa{5owQdUp|2{rtP*{x%Gw<8gN!n~Dy7%+%HAkFjOt2v1!$_kg@_LH{7V=i+z~w4) zgt+FhsLN6$Z17^M7JJ94n~pQ8T)eD8Qhb+k8G|DB&*sx2KVgDS4RgX(*PC-go8=F>}H5k%=H4=UgCi2VB^FMoVw zIqngsCqe&*<5DC>l9jMBW^(x60esm_?SX&HMKjSw>?pw)cxvg{m9+x&S{W!`(_0sY zH;b;P3Rn5r6LzCu@4N#awjUpybvEcG-7F@5~MHmQOw7!*fz1Sum=VEExI9h&_UWDPd5# zCGIfI`I{_3_<7Z{Zt_v~r#ZPvxn#|H9pZGL z`Fc+Nv4`HFjex%2ZDjc{({2Zo8=BmjjlU$9krUk>NlE+R&KjR*=$UmNZ!?|ASMLDb*QFxajK zrl&$1*h#K?cK__HNU{uDj3B8N_!kL-fHQ$9T_k}LtJgsOEt9$Z`GIA}R!8(=E4a+z zZjrTXHwk-hTf&nCm(WPaeo8*?$$?NsuwP5Ire(?gQp!;#aZRA6^JVBXs$nEgSF+wwMQP9<*ZdZA9q>LaedD!1Sl_uWc`(;xo9$-lsVFXu^= zgSR_8S!z^Yv)`z$Z7`O!p-KN5E0}L|kmQ@2QYJ#3zsv_a$|Z8@_!1OuGbWJ$3sDPB zGrc!Bx7mc*gn|#$pguVv3xAdKMfn_3UA(Y-4tL(m^Ly?Q6Ccy99)S`V2tJ38QAmx@ z5=G$S##yH%>f0z^VB#Atl0;assW2r~sOeuh{&U`xw~s?-0siIGXvs6Puph*lRUNYRP_SAaYo!~mn)CzD;#nf8W-(%HIZ;U zu_TAj->=JIM8U<&JV-3UeYxd+GS8R2#AF8WTH_kM@7_o&J%!G{3jb|R19y1D&I^A{ z>X*hJxM zuhVcHEqayz9ZxCkDVjdI{Sldw-MtweB$S}CZQ?0t`Hj>8Z} z^7tZi&O5sdwdm&)(DtH0qM3>+!tr0(AVYvMr7<~1Uaae*q`@YKolKv7c^BN~{5gyP zPei|Dq649(UX4Ib)Fk{b9rOD$row?$O>JqMCDK5ao?8t|zabTe@$Jv{@VV{NVU>3Z z-P*G0g~Y>N%z)(obXPh^1kBSy^7?F z{IIOPE!LaoU_-03c|L;VzkYni{C1-vnbcpwRG5tDiDWCGs5Pqyb%s*{u!@M#k{#rI zrv#r0woY{D9U#e>Z6ST1o$`2VJFdN_AM+!;I1=+;XarQpCz0%!K>s znjyO{UPBVG3;C*=>;$RluZOu9m4knv;By{(E;duTn(oPjsBK6f^E}^R; z61We-&!IM@%7>PM2Z-RLg{_VaM9OBhhY&CJF$w>xgadq9HL!m26iIEcB}_Co$*4?D zX_h5W=g~*v9Vz`jblnnq_Mdd96gz+N_~t~EcLsP+Y%o_o{xY-deqY8Kg zdsVomGK`09d$zNF!P4&%bdc<`2y#Sl8%^uFoI#UkfQA&eWW(0qDkKa7?~Qi&eB7Py zD16w4)Ry1Lt>X`^vXVxSd^=u>YE)A*XB%s|(<;_w`J(tH2p(l-s6Ad!BGW6I2Jg~& zg=9MUb9T1fSt5y?u(e!Wb*AjjarAnvoa_}rk>UdJP&?vy z*8=+Rgu0LtigZ@!^1Pc0-AC21i?C(uh?q~iqnpBzY^;aVB`Rf^I+VIuO1Cj-_x#I3gYwka5TDZDYX(5m8*8@dZsBfy!~N z5?UAph;s-heo+39xIxMUO>R^;<>UTMd;xt+s3@c`Bm!QcvC$sG5iaK5-DGGkjx8)n zQ5VC0(Yi=+cDC1fnpaVeNC1S2d!86xCc@Obmr(HysLdOjsG?h_1nN;ZP9|UJ7;?r5 za$vd{FoiOzKbB2!FHz1{A@C2h(;)d-&}rhXoAB^EDYvCEHqgVLL>^P()wl@5uGbW- zycG&Foy)GnzQsWf3mS`px6f2W%>ta8z4fCa8xRq$b6F`@-_IIL&ohw6tG8_Gg|GJ3 zVS-ZtgkL=DBy~AKW!>?cv`bb)4+T2)UDRYdsA9I8$N9IhkY(=;opkv7Wh!TosTx<& z{#n9Mq%Wd)leG!ppU*;4 zym5(TT`$NAAF*HB@FBLQVR}13bRWSV(6W`)7_wPLR`uK=9o&xyyk@N9L=9T!_+}uU zHPV&k^jQb90mn7kzFmPPy=E`SMmDGn9d@=UBVK*jyY>f3BjL5Hhoh~_&vRb}u@h>9 znC#KJh$?X&KfsKP%hkfSMqwHXv7feDl&5DBR`I3XcqptuO*Hj90~E9g7KUrjw#3Io z3uI#$>o{jeX>h*PN_{(j&UChtKf|2ydkaY&9uZk~-)O?g+DP-)u+#E2?J)UUGSewk zObdq56;q|}_veDEQt5Q9j0OGXV*;?96ejIAj^xT!xeUpL9`~@ert0!Ul?uzY`nlmp z-A8tuPlzhsVee(L1QCSWE~ZKnW?sQh`jTBr!8B2mEC_<*c~fireC3U>u?Qpa!;JHU zQT}CWu|H>jVzkIfLSx_$sy!aZ5ShiMzwaH3c~40U{S-Y##mj(Sn%)t!?K{_ixZG}@ zG1n(p)FA1Hb(>lfiT$J+AL13aOgIusBgw(WYnO)K7PR zN+v!f#+;?i&wD?8)RTr;Aq6^@Zbz}y)r<1vggN*ih2T@hEum zn@ZQeTR=Jwe$nHiZz0!wDRu0zfU}FBK4$ZE@nU9pQ1cO3HeA5ahx$_8Bl5~`o+alO zoNWefKFEdKT)T@ny-50_iABU3$uLAPS>^aWcqk72`hdhYAwekG=J~GfYrJ0=wq=JO z>M~QPBBJ$Pwpe59mrMN%joKs(qSDM94jH`XtW_J-8-%^FVB^Q<(hNzICS z(sydnmRzR0Uvk-N5S4U1H=;c{_eQkInsb@Di=Kms%MfphJhD9LN0_Q6-*!&s0!Kns z@ZIAqn}-NY|0_{zvmAkjR~rF3|04A!z|X9Ho2y`*&fm3OZ|!5 zx`)~HIQgy)uBD`qggv*9bFj{x2_P;se zoEN28PVQ7`1GuVDtV?t^V(ZLamxQ{wiJ;aLT@UwMHQpQ(jAlv_1d>58R;FCU=IMNr z%61yy4*$Iu2)!XT{_$8Gyr@4-7kQ)&?YR}=S(BHKG3%YY6vP5 zlm60v{OEF)%AC9v&y=}a zJd($_+3y5-wSqAzjCgU(IDSQNN7C_2qf_SgPEs`k$I>cJ1$)7sE|>N<*TCjZFR%4{ z&a!Rg!!mKrLTkV+uHOvkcy?8BD8PYZ+Sz28j}AjksMg!g(G29g zlprETv2vbv+Kbq!s{xmki+CI%W>Sfts$}F-dN_2Xfp9gm9I#f6wBPYEz>@|b($pUN ze;VS0>vr&_OPx(1%&qm;tMtnpO;cf{+kN)kx2LRr3~a-i5k#|C8Pl||E|Mr?X~m*Z zyAdS37O$-Dsq7)&AMU6qRWhUr$g_G^6hx#+qFm?WMj?Ylz6QagMCJndlkp*hu+`|Y zpEIH>j@!o?O9x@_Vqb~({6A=QeiUWD8he3v4OtIfKNGnElD}!m@?QSGS%4Dsj*Rb| zajN}yy4nTHL3v|pKfVoywT7FXKXf!CUf@`ZP6aGY*>2LYa2wq{zq8A=4nQUd6nI); zSY;kptL~NRUUdbqFRDHZg9r=4kaXni_$Gr_0q=G&k!Kph!Hk5J6~r;3tZdl8KcNEWqeaEN`zJPWkTNmPk`z#F;08osncz_D{*d*~W*ccRlH=V^2VCegh^|xg0vFz`fTmAzIDcXsl ztI}EH6Ap!sl+dSnt=D2>{aJ&uvcb^x8UQ+`6!`R5RrqfV>+P5L;}NNkN3-FpJyORg z%q)+0&_cwtxCKsb@k|>tc4WV_0}1b0y3@|Prty&2di6cr;@HJ)Q{k$B&YgzYv_WSi zvfHLnMURx<{iLM><00+tUGFuFZ$OepR138=k0>6dC_SbS@H z1i(~Isa@mV;X_mlD8A{a_6B17YospZJ`0arTm}ptJJ2>cle0(W!pVmD3p~IpP3?(4 zt4^qv?k=ora=~|U5d-OB3xx`f)^mBo=pPLy%K0*@chp-;O_~pO%PQzp`>G{h~kysmDXJ+)st?mxRuCU}8qQNpn+1|QUBp{Y8$zdv4Cckv%X>ql}&Y32I0+s5~JHf4+@z7q!xKr zHL>Cz!`9Xi@vhbd^#yiFbDewC7DaC7aS|PI%Qo>S@Jvl2{Kk!?r{n5Oc(qNK#Ur-B zdRXS4PM0e1T?fymZmpS9NT74b&6}Ib4#7o5I<7>r;rwbS%?)D?!g~LBe9D zav*u8F(DI3FV#yU&Awd<`L+6tj&)|O*+AN>r2!Me2jK6#p#Q%cww`U-_YVK%9$njF z3O^K9h^q2RB^jv|MhaibO?RLhUb2P@P|= z^v;zm;Mg5h1l0a~dOSS;%s4Oa|ezpm)GrVPKJ;z^K3nPW$GIOP)`%5|cN6hg6`E$h6TF z-H6?w(DnCyF03-$X_%S#6I;|7(fa z@1*$5s{r-&@&;|hEe~p-Mt4*0{jA`&ktT-Wd%~>MV!aE&JIL&!D*Mdo zT!e{5q|vz=sq`E_AO4zi$7IQ=q^g0z$ze%^ATp9#QbU`{_hsHnmQ z-xNgEbEMu^DkN2VMXNC%d-aLMq+ze1;g#^svL0XGsTjB5MPYq5$K~=K5d~?A-_D8O zuawx6*19vEh8KGeOY{$Qp>IlRe6BsQ!xEvGxB>F888@$W7%Dg-)*kzQ;5Y?$m2~~i zpzbf7yP70U; zK7^Fo-J;Hn@K%bPyeAjqr<^a1qHga9k%+%kwK%OyK{e_h-mIybdAgtGgobipYD4l5 zulpjlj6%H=mT(gR5lj(2f6D$!VLQ{--rIBrhrN_pb=0biYP1bjYF|6WA>+M2w~VIQ zV(?qhT>+~fEU*TlzcvCO09F&%cilfcsiL#sy&@6B>S#MNZnRZo_blMiq-Dqw=OG0&Ct6RGF1G81oXDEZiZ}r z{)xZieDewNDn@hZc*iw%EDHZuGI{cU;QWI8Y-^JPE9v^cBTwvoCq+fK2pd~USB~w? zSa3S`ymd(7e>L99>DtfBRPY?*8^eEC6g~g&1YZakFgIA<-iDgagba1j8h(mFUO3BE zdlXjdAOBgp@lX2La*`a-<`!g&R8c_6k?5HeJ$K8iv|xlTOO3RV9=%wK#jWl}q#3M{ z{|ox(B&xIdg3zwq{?Ag+RMYRj6a;ydZsI(1@ss6nK)@+7=mj$8Iym8B>cpJ;qx;;% z9)oP#wNL4j>F!;L>LD!g;L_r`VNPUlL+B0&h+OeqTO1^=?jsN4>_Vce@8{rC4yJ@Q-aF-BPpUU(=kvI-h$`+ z|CFo`9_p`%;H|n7w)mBQl)2nl2Rg{_FJCraFU64!4A%&(V}La91%r>*lC z&D0Pg^hoLG+Rs_V5o>#l;QSk3%Nh%|*-_a?W7S7WL5Bh-be>qs#UWNG5W17H)Jw2X z`sym=UiNZ@GX>Q11*$70SD5_c9i`Cf)bXZDu3(p5By6b1RSgSqP})~~Pfwa8vtOA% zN%0tjgmc0Gn;CUeE&&=Tu^OeUg)#U@smw#IPLL&4Pe`{Fe?5z$q%u|G zjEz?>W%*?91GzItqVa)Ff?~E5e{A8rXAJC}_k~BSuipJzCW9(;0dcT_hLvCHGW%xyqF#{ywV@y3A=4w8l<(?YzZ`R~i$4}jCuR;P z#-zBIJeejoUe}*%(1IkD{t_$QNmF_l$nkN2LrUp2F^{kZ(;qF^rOJ>AK8+Cin*e=M z+wfneS73{5(F79+i$nj2Q;fs%*tf)9K3=`1%T@QsD=!vyZ%tPfy6(#L3on(f1qE$@l0-nrm{<6wzx3TOTid{PDu5Vf@R1 zl#F}^TSHWcnq9g>6U|y-C52|0>7%JFyR^$Zlefm2Z^E=EDnzx&gQy92&Hw$!Ja*TM z)(Qv=j9_~JF8XnjiTIs-G8`#mybD!nQoFbIA@*Gd=(pG#{rxXhY5Pqk3bL@;{In4+ zzcmh?{8>&gTO4J9zlWk&YJx-{{nO9NqKycToI0cyp)p5sMRbsF+|&ELki_L>e&xl6 zVUdKnYMI5yImwvCPvqRfK|d*`y}L<&TeU|VdQMU5ZT1#^d|mfg>ZN1Kcr}fKlv*b2 zoxQ~(Z`|>U_T6)81A`F@yb_k!P^KHV|9%eS5Qk_X$Ei5FX|n;A>OBMu%FSr-AT|1_ zvj-LKE$^U32~j$j&0Ci(e25TLR~pl8@aX--q!h);1UuHpkQw34qQ4Z7j!-X1b)Zb7 zuOVG6r4Y0-Nzeb)=YZ#8+wj{Y-C??72I^35G2jhfCFhO1B;d%8lTQ#Y=1jzXg%(rT zce-4$Q`OjB+HsZXe|69#1VmJY5w&;?Ju-i~3gZ*qY2I>DdQs_zdH=3k(?(ak25i

ha19heJuj4CLbWrG1cdj3NRxZyvKp*M~gzqF&FLXD$wD8oO1Ry2h zYu771$(N~3KaBA6V_k0`l+4Uxxk|qdYlqG zr4d@$xYwm|_lSP{Z5tJw8=>eR93Wl(M>amc1&h`c%)MFaTyX*#*zPi!0l8^lwxvnO zQ!lD?x8hp)?D*gG^{`kSF_CE#G*O>6BmFU(A|d(6mMfj!v-YF1F9}f5dMB?nI1@ zeR{{^qln!qr&4Jo$Yr!3rogpu#P3xBJpq7JH(~~7H?ReV+r1ig0w2%obw%9GSsYK+ zDD_{MUxvq{PJ5rJW{zno*s#mCc!u9Ujm}jxrPX+x7m74Eu5C#a_|nZPLB66Og#v)u z`r~TwKtyY4uFO^yH{r73zm;orH-XN?2eIcgCWEgyiSO^rv>ZDB)V= zYU?k&Wr2I|c%%{v#X*fzVSVIs4loMvD^(J}sEn3cBGGt^~VauFSAIF)4NhnK+8RlC4-`<3lX z;~s!Kx^;_SY+Q#;{iPeH%wI{7HM-7P20y&YsNh|;>U%xqaC%)-aRf1~We1_3HrQ^F z3bzxmMr@w}@`TRwYhv-RhZXgdoooWt_sz(v=7I0L4+`_wjA3-7g&bc6!xWf*=Wb{8 zE_{^;>1W~%X4c5JkII#enKYD&DpW~}7DPavikfv6)U0i#!2B+wMjEtvZ}8;&kw0F) zM)vS`(MDAir0Y~lQIy2AevB+v9b`CJgb>guYdwL&ymnr6iJFEyDwI>c2LK6KyM&gc zAj)6x6DJK**4NtoclQXqAmQjKg+yz?74zKtlYPo+{iRmrLq1H&FG*Ew2s4zh49Mcum44w)4%!Yq+oiFkpqs$r+$JN z_{f|*>EVHcJ;-qseE|pZf~D*8iN+QG!s!X{^hNwW^vTEnbd9!%%O>(f|L#cme?N)k9~hHuR>pv zxcfEyn%XHvJs$r)%V9`IfYFlgbS@D3^5PZKH&my@yeFwkzZvV(R(;r_c*pq%wZ=yIBceR3TCytItx zTNy)Fs*aZvyU{|_D07e=Bax3hM!c1>ICH9MmMcqZk_zysFY3(ZS5qAzvT}in<;&c% zS~Iuu{zv5N1&P&BOd0a!z&FZ}vFea8UEOKEQx4^ceQU@p?G`{}%S$LvEOBtc zr%cs#7p#KhKA#NB0bvLg5@eLtWORCd!Em6)FDq5t)@^wDjwAu8sR8?{x{4!8(c8tltWTse(BP zB#X$!PMSiflin%LZJHlc&dtULk3LLoBk`6b6c6-3M!MHu=S9AV(KE0hlO42^PoETt zZX^7stvqTyNuYo0(LnLmt{^ECG8Sg@9ITm`>AR$l!WWU`mPCup$Rupch7hYapV0)k z6&Gt1{pQ&H=$5Wy&-L9`ZSj-TTm4ne*z9uZt|}#=+wakwV;dW99bVt|AHO7TJWEMW%R;sQt*RR)b1VoLrphR!VYW=hnZT1Cx(=0&e#_Ytert8#=s7-}zEU%X z$jp5U{ zB$&S(e0YkWj}44*px5WK4qU7jP}%ST!0C_sdx|BPC4<3*i%j~j@f{x0F;Uv!CCE&? zZ%>{ViE^;{c~Nc&!A>B9g$w|znAW4|{5DPp53uh6{O6Mn24#fD2T)p3tkSfhL)MGZ z*{vm3N@+Hmx%`T6X%vGK_Uh>cWQ@U*sWNs1_$9tsh>1E> zpg?ZE2K~6j(?vcMM3SsT)b9>#>o_=jXwW^yd|+Y3990v)u`|q&!|zcGSZlA90(ljt zyWbKP3A9yF_QsHTv%llHe!AKd>pAZ|LHKG*U({x1+uRfRHSg8=i;-osmtQugBL;p? zo&CB9S`E(_S`Q!p**4*+K*&htNvuxD<0E*^Px95TpuL??0!@5nCKB2+246Rcij~}2 zs(biM%?PL?bDH9bq~TKF+GZ!E0z2!z{lU$BGRFN>NW~hf7rm@awUm*;AZ8GKz4mGn zLjRx5ho8$1kJ`XYP=4|2bZQ>PTwFs@cm{9(M#;o)4}+F&;Szhb$R^CY3(d8uZ|`2N z$v9J(eH6(V;rWn|#vH)#HS$nQ=1V{`jr3)9mHkQ!@1x=adF52VlQMa8YIHk|J@F0* zRNNRx&HqI52(T2)Hrp`qiQf*9 z8^5dq%#;Tar;pP$4IlFkVqe;X7v(>>9k$|RnyAj!I*h(j?m`d>aee!YM;MIeZ?T|m zqx*hA@T4`%Mi-FIG^tS=v&gy{sm+TkOY=lL1f9GbhwC1Tu9F|t;z^eoL+hr78Wh=x z|I=zEUgL>6te_dB0s)(9z8@9^ed^|J;|e-&UIv2iZp0CEJ<&te zia8Nro~OTsjK#`%S3lZu?l-W;8_NNF)0N@zOjBar{0 zX7R6}Xj1qys)wHlIO-Ax5(e^H0yJ9lu_AHC)Hl5w*%svBN^!bzp9(BlcVT%-t`-l2 z@m5MsV4NOmy~uMqqdQ}0=a@# z!(1Cq>o%XUXb@UyI@`gkSk=nUkIn-b<^qqaZBBB+vqe$krBE6-KF}vsXMU@4Jmdvz zPlx{e(B-~@Ir?cl{3y}vo49%TOYiZV+5Dm7mu~sN4M(#Zz0cnKSM~EL)IdJknF5~l zndn8oL^cUG_q88aSE0a+MS9lo+3L%>^cf1ZVLD{+!xnB+P43(ZFJ4cweC?MOE7rZ# z?so2q@d^3s2=**IU09!E+;0%q8GBsYoY*DLb*V1EdBaNBezYLHPra_-w5r~&`h?Dh z)lb_PdRJpVGeX4>U)=jC*b1zCyd(=%?SFl*(XcPmhK!&fdX?f>MSa7t4*_lV!{WS- zx+tHV*s7BdM|0q1@+E(~j}OYqZL~bj=p|Q-lbTVO`EN2s+u`Cmh4CBvWf$0JB5*Wx zQ2>usT1~xV5it7XwAt5Sbl%Kc7A6r)_K_akcAa#D(>9bvzNmwNcdZd!Vn~iTxc)|ihQhGUN#P{^x_Q5e1duULlJ&49yXGkSNZxi zWBRQj^fPG`Y3zL3aaCJXPC!y`(Rumg$!6?f@o3z1E-Nk7Fs)havmNsT~;mZmJ@-7DWwU^X7IP#7HB?A(M?D%Jp6X34G;*2erQ#K~#rZ zkDh2Gv-@})>ui)hC4Z?ABI8c+Rv?7H)$!2b^&XDv?ljC^@nqk3f&H@sayRIL!n|Ii zL@<1f4ws#uI)q>X_bN*gKQVWBQqB`Qq{kk0b}zX{o;R2KhghDQQN}7OX5lCodt?j#wn=nnEVgg*=9q$NRha)^@DQ4Ma$|U^aFg`A~h3D|?s?0rqnfly%FEpDC zHht1-U)4*mey8J*`L*xa!vC8E(5}4WyJQ;jW_#qj(go)ik3O}E{yjm~b8Nc#{{;*> z^TpoH1B(`nszGd4MP~$KO;UnIpgpO;^dvVct7yBE21d9$jz0|UDsdH0G z+;?%D1n*sN{h1i?a+^iO?~6=|p)VvBDsL5d*5B2}_H0@t_h?ZBNM> z9%8=DU?X5Mouop8bKKY@Ofs7X)m)O0Pa(!FSs4*%P0jb}hU7RY>>(5;zEMnwXwdt) zE1|YCgkYn5CUoJZg&9H~Kv*7(Y(O^V;EDqP9|xRR!lRpuo!Z)hgdpl$!jF$ZK%V+_ z70B)trJB}<_n-puKByWBj!8*_)s-fOO)V<+Ul3+KDw})n6lMfHI@e z;A$p@D#7ot(8+Bf09_zQZs03Tm_%15?Oy>UQ5PMR9o);1^AMKNDbOy}HEE+w!(*EJ zEkvR6PXd9P127j-p20RI#i${_dW3j`gaEh6j%vIQA`eg~BtU>QWQZoPfm@p@Q*w>N-t*{V@(Bytly|X3E~5 zy%$ZF5J!-HDM~HzRPI8GyE{_)Fa6O!Qa0yxJ{_e8%tUp1kyMJLP9lmzkgQ}&INs1VMSG)EeWo*sek4I zTvifp@1?n>9+m|N4YFhblbZIlSQC-OUm(2d9bWToB>+pxRo@M;Z(a9;tPOYSMo)v7 zuiqtJ#m6T;`@0Pex;W$@_+`hHg3KRlnHtHAza7ka4LM;F?gPgzJ7T5#9 zJqch|$izJugR}4f@4@bHPXf3n0lY%s^e1u`hC$1H?f2m9!aV}82b={8-oYswSUc6g z0uf&kaHl1(vmin4zcd)n%f8CNYN9JD@)j`Vwpfya3(-mi5^7&T$f4pEwk&Sj7vVf5 z5Kp$|n}j;>(2#$?xJ6lwCd-EDV(s%v#V4`?lu>CLb3kl-X&r&d&RDjbIJOx3dj2?w zq+fo#g(bMmsiYjl06E0cRBDS`tX#~4&z|3XOWh1|sR1V~K!PJZv0Qw`qDoLlw1z{2 zid$6VQI!^n6eK0cle!JbLba9jK2i4l^O>!-!^ZUl%ZMexYEMz>jHm!1HaWhN?%gEO zd4t^$La7Sp6qO2GrEt_Dmh>21-#tmRr~r5sFgzR-dRv4Ui^5|D2;M?ci2>)Ven+=- zk@WlUfHJ(wV10TklAvH%B1ui?s>C{{#eDQZ8vu2TMrv?{LDt!J*o^DX7x^e&<@=+DJs&z_n}bv#WxnVD{B9(ECq$o2=ki6dvh3|sulNCvg^}6#Me@Xu;G}Gprnfx zxvn}>GPb2~5UlA|%ncwE>ZK)fk_27VUlw3R4QhD&r{DY)sL)`=Jq2cO+%-)-jZ#J& z=!ri<<175&|N2WZ`__7D$gUu^)f-uY7m6ui9tES+Ntb+6TOuwp(cnhR4tT z=zkl+W_#k12TXOD!{NSGA&3CSc*~c66B??}q8^r!irIXy@39fJ+}cvBq&J9inem-zU!~&ST`VfZkOH+#mY6P(BN19>GvB(xbW^upRn*w0AnI? z25+n(umvhMEvVFcUQ?>1GL}pYuQj;7)(P z+ev_80M$N$KRKK^31H07GzOCrfS?bmArzGr`+&A|(o{g!Sp?!j@=6S+EkLQ(JrRZK zvm+t2XAJT4yrzr`902>R~NybM6TOTS+K~D0?!wSgi zHB{^MV5bmIwuoj}OU`>sL=p-s70sLjED|CK8>lL(G+*A8^Xb`{t}!RyzI43xgt)k7 zjT5XwO74oo!kXzfiwkfj_hue`)3_i1S1u+9mXD`xthT@=AkFbz%UyvGueO>jkpL{Vv^ZA)5&rr&etF>D z9RAP4c!&3zxmeQ7m293H3h!LXyYVPY1Os?Wg!*4MMO6pZz zwOBa?OAANdzCnkC=FT+hPu3SAtNs&^u2##pHr=?4gvN1)$IRxci;bEj0#DLO4%@_T z27#43!!0QRME0LUtqZog5};lc^N}INQ0;IX6mVz|>q+ek`>OzsKoUeCQK*|g3Fqo8 zjx5jL5SIJMUlpvXw!aVY?BF61f_Q;rg+C?y2N0-txloBHqmd)48Q6`%xIM-7w{qP* zEIR3#A;J(iD-uKj(PoZc)$BH?IB?^6Ilk$t$FqU@$r`VB>`}8|MGc4)D^?H$!lq}# z`B4TD4R4}?mgKvjGqQ7v5sDjcHH|Kx_sU68rW#wa$I= zY?Xsh(Akh6GQ&6?i*&IJ3QJ}J0#k}=KG0WMA~N@9xHhivOQdLo0a-RCt3gP%RP{{v z=~6cVISZLFPIA8luUZCo7g|EJ=c%#BdI

7KoUGA9beKtdXX^n>aq2ip z0`=A^=v|5~n8Ib;$a$UrUc_Fc^NMD9*JnQ?e&BRzbZyDr{2p)L{KwQu2Lc)d(#(Nf zLP>XV0~W7g9gPFwXz;uXqw~fyVw8)}>cBE8Ee>sA^rp`p~Y{iiOt#>9WqcX`Ru zJsRo*%tC6~%?+4KF)g*~T?MrrW> zZ|`e*Y-y6Sp2)23JM$APjr=#@pIFFZ!OYUK5F0Q8Sr`^0q!BBSELN=8dF_>vm<93* zHhjpEg=CEoBmRKr-mc7G5gB!&^5kb#oj(2E>1b7-I#F34r>dSOA|oR+BW*!liX?HJ zbUgtn>QDRUugQ`W&kZQ5@;CxmaF;^5la#T?aG*f&TR?_EizEPRM29#cW+qA*lNdm#GUJ5NGkxR$TGa#&zbj`67ZifxT=hF ztUv%3O^-c%K$$=bfFq3(x|m%tz34UDYi68 zdu&bkxW5ZqFs!3%$&v2J+uQ`Xg}%d3er!`m*9U9d>6=%13lwR>ADM%**Pu}S8hevj z0CL`4w)v>nbn=CCCQh>()j0h|z4X>E2*l98NMbeP(faV@ZWIC5>7kf40-KIiia_4q zFxuYhy*@_T#fr8|v^OKY7knV~z9bhA0Bv~+@Fv}o#H~|C%jd=eqz>wW;Ke$vCo2i~18j!?6=7xKNiRJ?QmaM5J)VZ509z)6lw*;WUJ91*Y2)F7$ z5K^TWZzN&n{^NAc?Zvb29T{E6uy3i@4pVPJ=~)holBL@Rf!Xl}3^9IleV+nMmy7)E+V2oHd|M+%9?MxwRmTCg=DK>P>!wD{uR%-GPypyi3 zo8s19n@h|*4vC0MQcp^FFdNh1Q1l{i)g8xawxBe5s!2a?c>v^btjav#Sro5zcX9$p zw&$FC#>3D#U9fzBIW5L*Sva|(*Wl9IWb zflKT222Av#oq4kTQ{KI8-=!b`7q^fKigLfVg9xwC;=cV$mVZoNnD^N94!LSG?di zSiDS=y>P!Tz!ox?=sBmdbyrTmX`vM_p0>$W-!m&4z}AeqvXg3Dr#mm8)l>%#(p@={ z!^&TzTQDcXm&HfKO9kGxz^n&5Msyw#z_P4x$4Ta(zne2YMEKMLPQVZ` z@CWANcyZTSOF%igfxOrfz?&wjQ|$60$?n(f+)yc z(%&z@x-HUE<@*;!NB&96vx?8=N+tztE75YH0yu1A&`>bz@+5UJ22ts6z zZq>Opxhl?)j6-4W7n8$Fl-`>Nrgpf9KNllQ;2c5rOC6y~>D&a~JUSu;RyZ`u~@r_^b7JrmxFWwd2Q7o}! z^!X@r9TP?T^?&04TjGvsw zCV~AtKR5HJl;vY-;)fCVMos$Np$($-~HX;^IKWjVSNMs;XnD8GN?)% zvxP(v^g4KwC>fss?&2-WvI3s*>%aQT@r!~J{9rYHaS^XRT|Wo7L3fh2e~F|f zl86Y&>N$dr!H~uX!nttVyl@ag3V{%URLI7}rRwIGL?!7w089?_0TP#%JHV?ymxEq) zW}Ckt2(h{aU*ju&!#|c($SsH-5k1MUSusW4R|P-BrSbt`^;i(_!VYf}FQZE_##cAj z6^J=V5W^7`3V0>ym$v$lh(shfNl!&`dwme#JBsi@styhjFHSxer+|p5t7!6MGQ+fW z4F*yg^|5E5{qeuh3P+(o&%H`=0OeX3uLDiBR@mKMd$s)U4Su-}NxoR)f&hn=2R#79 zVQ&#Y%6EVy%UN}dW=Oo}$;|_(S^f<4n=o&q)|`>xXzMG!AJj%Wd|=<+VnhbC0N^nN zek-$sDrkRj9c4zk;Y&3|TQhbe;6(FD5aJ5bd?=Ml(eny8?5i&_041enO1%KU*_&Yl zauYvg;czGb#PQa8!t8E?mo`LF-fxwAzqvJOe8VRRCy#52f2l< z@b?ISd21#nV`#|Vj`M7}uLATufL#^fg0>rnH0cMnPF{C7w(Xrf!d&AQ1&ii-(cuX*VL#vt(Zd7ynEU%G+*k+pHV!}yt9CMxLAMl; zW-FNTXX7q3W<>k-#OyVTe%0YFu!E)@OGV%QWby% z*yJ>S0C&kSyMEvUO`Ah*=~i~1iaRRS$zjG=pLEvz1gWYinG^O2STag+`fg{_`A9Nj z^Yk}sHNcKx@IijsQU$t|Qr$ns?qmp~LM&18P;-g2x113l85G1*(B`xEmTjclh(aP^ zdYNU^YC!Y!?eECJ`rg@a?^y+SVPO3rZ+(*Ynw^+9rOChZ^Bs}`p zI}c66HSwda20*OUQ%I^y_kGxDm-J5n5K~~$408qydK#0m5n#lj0P?Jm_TV)gU!N_@ z9r$~Zexvsnyg;^d%~qc#mx5jq+Ham6(o|Z&>sy*i3i9bF!lxj7Y4DJmoU?$0xcKeb zkOs2cs{TuAE=!3^`oN>36yK0z++CBp$I2cvZFLhMA&#dAup|t$bLt6qy?pHRa?sj> zxc|2r&|^FmP4C4;!)p~~#r9kX1X|PirKK%4 zSgV7%JfYf}OS>7cq`$KLANNgoY5}!sAnnIDW^jRTJ+F{j16ZTWRA@u2OLGdWhTJ-e zKmuv0y_bM3*ta{68FX_aGzYlV{CJ1ENI!=;*OzdQuU6qL0DHjt)x4)$dpF(X2;7o} ztZ!esw0DY4IPuhOahk`S2Qc>Z$Xxahl0^f0#T4L9Rp5#$KuvNh=2MG6swE(RWHub9 z!)ncsaB-$hofue{#Fh2{b2>je;I6ZX5S9ixy>uJ9x%V0zw8Mcv zZFVHSq-$+Ygb?LC-mmX+&Yp}10So#oJb(q?zzE>YUZmMlA@9YK&h2&REC@k(mgveF zbub2*=22P&`u*X-ES;IO?R@aX7Vs0ild<@|P=H$;;`&WG=A=O?9Ru({T;v50xLGcT zhy^miSqcmhQ)t`r{A(`r~2;4J8U#p3n)( z3jhA^gZTG;kE>$=cqGBi7po`0)$ zcz>)lCk@N>|Ni@bncw$9;XnOTY}N1>_v^K#S0;pE{oVtxu>jTef`Bn%8zX)DRRcl8 zi>eTjWpIbD@dYlXXwFbQa)IOIGt3SsN=W-Ue8F34%8X#!X6Il$7TQ$}oQrTsed$xR z=4LIAyM^qu8`S^-q?uI+sSEam3EX*7Nt*R?4LBN!M3B*(g}g%=_+{7XQ+X^pLX(Uz zA{mXdB;cNGeK%3u&0tQy>wb2zm>TfpZ$Uus?+;!Y2OvL??LDabSe-3rkL}zgRfv@q zeB~GX?fM0jMtN|hkr*>!#{$|dd_O3}a4AE_alnsV0H^Wvg7f>fU6a!FUhe*S`7-P{&i9-Y1(sXD+;%Evb#LgqJAJW?7M zwaJI+zQ=DTNb~u5ICI!LvXstYbjP~`k1V!&P$P!3LXh^{)Dy7ZC0E4pSYP(L{cKYg zc<%;xFSN4dqAax8_xXz3e^}DVwL7(TkRgs+N^~m~`p~RS_eZ(l7$@b?1W>}QsXDkL ztZ~{~NXw<|pcf{ye9HSsvGsu5Fo}N`auP#l31O}~a4Rm5GmMriRSnWHpE(>9@cdNb z-&WD8$0q@!j=Ow&3(O)R;^5duPSLeci%EuR(2lClh@qwg+ks)I{ zir<3nz6vmU;?bpay!6AL{T_T;py$e`2ZpxiUBhCj?7_v|UC0cO&+G$Sk_T``K3~A+ z$|nJ%4sey(w*FDVNIEwR?9r3e_9^WD?9LFMFW__KlYns?cNcl;_f>$>302pqOH_3# zg*wis2k_f1p9G9^;J$za>OsIWo64R*nx_ru~OvwYmJz}KGLBLW(awJMQ zseAUY=vP=EPD^a0!hT9wK0PqZW9Q;!*_|x!7F%NzKr;O7KAQDc(&hUn-4#=dz0x<3 zi!wjJ#Hh22Td^z=U*jU3bq=J3Gcf{voY7roBr?EEcstk@LrfsZ{se-HGQsBP_yU0( z*2q|v6^5uP-!9L=>(sPLd7XO@kzmub0^b83!wl8-( z85e+>{IUzSnJ5sDr2h$lion_qPM41)?Lwx zum_fqF(5=yUSbB~!PK^AN5Pp{z|RhAoM@CiJ0C;zqm6{`mR8Ibmf zA_Ui-yPze{_5k7~U21>e@+d$*k~~K6GPwUTW$|l)!BVW?sO48s*v~x9V1LA? ze99Ra0ZPk#?}74cnNh+yNJ_UM!Bl!dz>?11$g|+j!Jd~fI{)MW9nMfEe z;8;sB_*NnVm67~_E5M%z0rk3oE#c^MJb_O+EoXq&0(uL8S6F@fIa)<1lq+Wf_6|fe z7AH6h{=7P19~iJrhWRY{tO9%oqQB@;fDwYhajJWx>?2$UZF7_eWY5|@&sAvSR zkPJ;7u?=Z$g(HAylm)Cm+XG-`xEQenfZv0Rp6jrc<*1823j8A;?&vjCKs`hZNmp+L z=$$y1S`WaZb^emR^m+FAI|cC=7`IW>BEX9S+et5(Zk(m*!O6To*YuD2tgSkvVl@b}$_9=B10@}F) zC67QKmVU-~NfqFgz5<@dUdV7O^o8HBEWjIiAilsM0^kafFnqdJoxRsZ21mv>yuf*u z{so&kE}uTl=Xr@RJ4B8$L8$|1V0L61GaQ+L7(lu&G8v~{I}_ks_&ELXXTUwGpYa50 zKy6v_GuONG02H`DIpZ(am$ubh^4Y3D4g4i9V0049jx2bS!Mw~2v(^6W`jb7uhZT+q zYa~QCP*}h#gIM~@b6`Z0I03~7pN=mx1rrb%6rv1_!7_O^r}}_%_t!#1a3Qv@uXp`M z7Xl$hxxeJXP)>z~JTZnwL2?G;U_j>& zyuu;ifBn~A0>oJ8=8yY|nI{IWszZO6{`i0K7xJ8e{iiN9eN8vJ9JHKGGN^qYb@NMv zF#+lsLTRT0*IfOQs3%~hMGPf?+x=|Sphg1Ldr@mt(pkOHU6Dr+B4LHc8^1^_AibE8 zQ=efyJvo^@c>4~x0K7#Hmu4w;905mw4!Du?z(wE(08jWBF1S8}9MC0Q3-~47Rp74y ztOU~5rv+{87&Q_oS^e6z=SyunYZU;vfkxMBU~lyZECIfBj2gi6V~vo2K6v}x>T)kY zUl!n!D#S_)enT(#4ZeWldb^D)piXmi1O|ba;gTD?@Cw3$H+m5_*#&SUP)sijGo%oB^0$;E07&@&tCvxQJV!Z2I=%ygNeF;g$`d3GkjpNJc&3URfog+71lXfF z{r0;_39vPN5BxQK3*^9<3tl6FS@5?=pylGvl333JNZ;=>0aZ!?nj^UaquqvU9>G!Y z+bTg`J+S3Y3jqw7)*3QsW@HC%2G0aTtSyriXUQLsk%Y1r|F=!_WdzzpVAn?gZ;#yr zdk@$Z@Dz155*Q(b*0t1tJ?jNzy8ULK@LY+d8r6-Y&Gtl%3Ox!^fGSw*=^#{wNu=01wQ006l`JeU1=9%leNJ zMQOi=r?HO#l-6@O(jC~!Y~(-RK0^Y!u2x@|%roS>c{ zpttR+rRAcxENTn+=EtbFBb1sRagWuD@Nssv4l8$4cO$3kU!Xh^ZO?0EmEN1~GxPFMtD>9EhdqEjp@j+o#^t3XD9+LFkA#m?)QxZfJn5>A>f$dFPJ6i2Prv#OS&VV z2io8o0a6d>GvIGo`4%bE09@K%UlS4ICsr>0txi`x#jR= z>_WE1AtHGIvd-kNh5z;a)iRF~y1&M!$Oypma=9h15x`Y|zk&ox>n-s22%<+CBMaAJ z0Q$WK`kAs;N|EBZ}+jX1O2*gws001z7 zqXWH>^aa?!PEw@^D0&f1ndz+KfL(XxXGsobyFTItjBIO>fL=oj{599R1iGHSRi+2@ z9znH8qv8?VCj#}rT_!>GakXH7tnH#d!QQ8&w2qP7QLn$wC-K9iFqOra8Cp+ zFpo<9CLbYzGl@X?c3mzY02d=1;zj^5nSD;}{qiMZn@8O3s{_oC+<@d6&=tu^!@}=) zuG%GZ0G^i_)#aW=N!KEUk_T{x1g-#okF08BQ9Cx5CI-ogz)Id!*ke+ap0|*L+^&~& zc~#&D_%G^B=$*Lz6ajY9j!zzvDWWGLmwA=AVB)0eW^ugxl z1KLC|O9(SdjR;0bpjEC1{@QU$I9V7KzVD4c;NuJh{e5Op@4-24?XY z%zW$3{Uh*U`s3#Wpr1#GptRkBqNF=Z0yV2Y1OCzLXc0%v^4G{HE&CWiZjtl80WHAP zdIRR3K&{NtOu$lLumye-81xsoz|IBu5V3e{qwKOn8r*{r7Y9Tc5QLebS$LjTI7E0S z-Ga&Q!AKOR8v&$UpSt@K0FM>!BTUYz&$$J9yWRqS>3H^io(22}35;6*nnmwf`kv)4 zU2}^RvW56}euv>4;5~MqM7MRjSe*iDRA-l5r{Ar*-6t z&h=JTvha^2ffgC`z~A!-t^$A0D@eNgA;C&O%@34s&vm^hzkbh;m)Gy@etEsW26lU_ zS@7Guft(Zy=g@Kfe$X;v(PzqzT7SFV19)CeU*OU{wtS5kj#&K?xLY1U59lSLXo0_` ztC7y&a-Rv9ORq7y1lpSPJb{uIP|}wIfj!+(Z=kXKR(b$eTK`-(Lj<+$kFxqLi{G;P zHE_1PgHiC;yo%PjGhICsu%@$myS)bP5l^7!1*kr^`n~GF8Stw&pf8uz>-X=O0Dy7t zV1@u%+j;ka7j z05?7J_fZA7ngH~BOV=ZZ8o+zoYm1gS3iw=C@&fYp9?)mO-_o5}#)5#oz@U}UAYjkR z=Ve9%ekI)%Re@ZGYf_1yE+wFjmd$k^$@&8~z}RwEkiZBT)PUY1iX%WjdaR_oj{%fG zIs2lI0)E8(?^%8QepL{#1pdnMzG=G;lKh#RApre;#QK*2UE5c$dDQCXWgkrfJ?r1v zenxk|JGfN=fO-%xf1pR}zdaJD1pzJa^K#7lw*QL~LKwqea?uu06r%RaZ50Dc;3FvmcM+EvgqSKc+FITegk0OD5TMf`9k|+VTMi3<{ zKLU331_nuCp9o~77Z1omnU|}HUR>VHHe&g8JwJD?>Ccv*0e=WXx-bi#k0@7I{rr0m z{70;R%hH#0SCha90ko`o&l4E2<|CjU^&*A{prq3!2fcmRwbp_h_$6H}=x48Cq&e_N zRiH#Ptzcu%)A=FD$Zxos0P@eC?$HD=LIS<@9@s|--~fo5WY9U^J_xANs?TfPJAVPx zO4{%FF=mt~6e1ay1tEnsW8 zGbAvgpY;SD4Srop9fHj9_LGAG{a{`%FlcpGHV2Maehc)PH&7yk(o!P{Qx*8`f`BEN zwf^?|DDd;onq|+wk6M5IomYDRqnZ2%z#Lds@_^sW3o=UrGnU_$Da8g# z-au~YOGHpRW_FzK+5;#(*HL|s07`_>19)p&&l9laMu6WdJ3yeg1d3-$v^x4eLsz9zl$`AZM9oBvAtl&S(H z5S2ildkHz1)bl8nvDY(70M_#;U0?oLx}NWm0A|Uc2mVwEW8~%XYb@znzpr(_O519> z894%e`+bxUYPwO6;EJUL^4j-NA{g-iYF7UW@RtICNghi87O+^-2*5JGFcx9w_~1;1S% z0enlR&!DC|3;dpL#1m){#8Gcxv?^fBm9hsjsZS;~LITVZ7|b7l)u~udzyjKSw;;1* zP_o`Y`Lh-Wu>0oaS}y!3_)Gid<@4+5>Fj53-Gc2(FQ7*7we2;~mvl2kkZ%w#5&+6cKqKWWf#f8T zml^p~D_RQpSwgVoMlJdb_*-OV|Uwdvz#^#e9A%WbIkCrQ0xBPn#@OeBS_eyd=TiqxT%!0oL>KW^Q#tW$Fj!MrH z$iH7j0FNSp68L+%GemHv8Zb%#CGcND0D5CbJb~8!Ir#1OmS<3E`cr)#+$-sFfRE~C z!LPrg1^!&8=goEYKG<@)tyHdb?{XO>h1QEx0(EJh62R?xj|lXAI7$M!n|~DeHK4b2 zrSC1>2+&n$fnL&e+%ZYzOYrIrIw+P4M@Jn7nO;-Z=Ob`&Lm#cxkrnCFmZMv>9;tiC(x4=E?71Um=TwemUU7sO_7QplG tJrd|GBNo4;JL(0rEdNm=I01eD`2Rs5^rb0MT#*0(002ovPDHLkV1fkSO`ZS% literal 0 HcmV?d00001 From 2510ac3c55108d7df533b905152f83b813360634 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 20:00:02 +0900 Subject: [PATCH 123/617] fix1 --- common/src/main/resources/icon.png | 0 fabric/src/main/resources/icon.png | Bin 31357 -> 0 bytes forge/src/main/resources/icon.png | Bin 31357 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 common/src/main/resources/icon.png delete mode 100644 fabric/src/main/resources/icon.png delete mode 100644 forge/src/main/resources/icon.png diff --git a/common/src/main/resources/icon.png b/common/src/main/resources/icon.png new file mode 100644 index 000000000..e69de29bb diff --git a/fabric/src/main/resources/icon.png b/fabric/src/main/resources/icon.png deleted file mode 100644 index a8ee30da76cfb8f1e8b1d336ca50b7011afa1ac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31357 zcmXuJby(Ej^FI9A0G4KHq?Rrz=}t-Mlr9xT8l+)qkX8iVf-WgYqew_MDybmd-JQGa zK7PK>_50&obN)LsXU;uyU-y|rLw!wBqI*OD0FY{HsT%_T=-(Cu!0`VW8=tbL{|up* z)?;4)keK-20@*#;fB^sk&{kJ54b0nb3mFrfF=M^7b_+lqwOoySh~MNIc8$UBgvEk3nu3{~%Z}rJlpqos(jxVB8*dh`sUUC38IQIlH61YR9;6w4w zep}V`x~+t1n}ma#i<6e#hCt@=>!Z4cz?x?Fo4_k%4+WC)_n{7~|4<_K+_wbD2W6F$ zN8u(%-gT-FL!WE1-?6M-AuisTbha6Bgh59PMeGfI&f{0po9Kg0YwBW zdwN8xOs|8rb-Vp-7%#orZJo1k)19ex@XKViBUL8kMhs$6iv8JV_x%8@&}m3=+W=)I ztUtBCYXPQA$d~;ZW1^+>>B?XRoJASMmC!LvYbYx@nZ+{qH;a{3F6+qPn_#TWTR+Ca z(t%BOoDkGu*HV4+JY-}ATN1tj`{;8P7#6BgPFw8WS*rxsaXCO$e)Btn_TZrNGYKM5x{IKN*ev|p% zPeruSJ`r{qgVP&JoR?@;bUW6<7qc2maiy2K9a}5{T@#%A-k8tM&Eg{2YX;17vA|HX zqG!@zqk6D5E*qxO-a&oR*!75A1O?oGh#`sm_Ow!|5zid3eUdJ;{`yDz7gZq};ydu} zuNo9L@bBGx7Ce}nZ;){wPJ5TSbx`8$?B1gM{6UJ|raO}o4&^gd@BT7^>~z36{sH)t zI)d3c@ht5Q)uKdq(ik?!pzgo|n#Q{kV_!xYZr}Z7P`LccB1hoj|Al#{5gu(z*r{j} zK`2V^#whn}|5~v&1}N@m)Q0%ZZem#EvV527+;p{+E{94IIx>Nw<$1<6hG;=`2RV>d z)3rmy&Zl^_+sf$9Tba%!s8B1&YwJ@pnqD-)`GYPDiETZfrDWgQD%tYgGtjyYOW6*64q`ZWt6*Uf$b*2IG(zca6?-`K`-0&`(0kIfGZ}1lSGE9UQ$|#lEkq!yIB@$yCUac}3$wBQwMvFBN7lEnhe?`TG~7Rhbon4of+8j3}s`^TMx`KS$n zJsk-rFmefMF%V*YSeT*M5;O1X4w8FW4qm3MZzJo#I=h}x&WCx%%7r^gv8VqZrn1A+ zz70pd*>1{&WpbmL)(JLuj!GInSH%=N<9CQ=FHcW5z~j#I+>eCYJXm{2kFw>R-vY(3 zFJog;Ga3qiPq_$Q)D(p6PLIerRpP3W%Iu`c19s#SI6ws}ZLrG@JIHm@LS;Mo@;BxR z^FLbcrPnpz<9_Ou*&Ioppki*_kn^*lQ^Gi+d8#G9r-aBdJ#Jy50jRK~=xR6y$~d5A zebRJ^hT>7ZJF2<2E!kDk3Gb-@#yn8U4o?G5yjJ8x!dv4yy>0$g!PMdsOJv~a`MeC& zfpPrToKIMXx>xCJfQ%Fanj18oeP#fUIb?|0UE^7H6a0&M1(NMa2@j>N(KZiu_9)~4Os^=FQ>T5U!+%#F8|Kmb>cMG5h1_chE(>vcyAhD!qRF}E=-7CpiRoLotg**_pD&zk#061@|c zPKl%}6x_g={8n3J!@vGMFixO9CU2&~QtqC&<>7euoxA|M{?==cKq^D#EjPX- zDTj-^=#EqQ_oX9voaW->IMMZfQd6mqP`0=CndlCmpntObl*;!b*5NU6)p2_hl z1L{-!(Fdp3hco!*ZbVQ{>Mc#T)##0#*p}oIbkWMSx*b&l@sJ}w-cY>fVLESx0M}>P zhzhr|nh1VNVSK0sZ{wZx=dRmvntFCuf0}&z4@}1g_-s+WWSg6=AjR2g{9;_=w+(d3 z5{LWZlATi^KLtXfP(SJJE+dqkRJ5sT&pmOij5sduc8gpkkFm5 zFDJ@upoS@&YSy&{1IeRZyKAHQVZ;8{Qd&vW6tefy z5FN5nEQIG}u`I-X8*Ez!-{WsJ^_N+jg)vs~2Q)sejWQu%~ zWA_HOc@K2f5O{=PFmbxG8CMFwl6j1L&gn3lrK+?2begEVO6w!$iX4LV2VcoYdV+%W z3%0DbiPDKF(-$H71WvaV%+y3aG-GzN>gQ^oL361zNHR+}HdQ5&WAq*VKTf2*ZZLPY zwj;B1bgpFBPR7d-P9|fN7-;ndX3SfL{|AcT03SRH+7?Bm5h}+A{MTlz@^FZ3`K{rT zWv>{Akt6VNvhRreIxM#W+WaltV%>mn$dc0$)6i^PqYmi2f;qIviKvE;x=*E)5vy@5 z(}vmcNvGO_&Ng4E`mQ~=o)1Hu0#Jvfpqvdn`agF85*V)K4H^nqI*0quFx~H%>Op(T zn}LaF7#F8rv;QoLdXpkjR5U{8O1R#vC;`=gHwP>orxz(WXV|A8Sg`B(<;3LRVB(_c zP8hljQ0jH8$f-oR0{zhML^d`asvp72 zhw%KvEIsr%nhUy2F^KZLHn#rJna%F&p?v>?$%~{xB~4i^Lc8#=-wnJJ37%$ven0E2 z4n8}D9EF@$7}Q6itX!q~Fx`F@e~(V-X=w{ls2__hl=ETXEO^fV*jfriPa-RanFF5> z%7OWeL270W_qDgjULi%Jm#CxCJ`hOtLnWyIE9xFUDfwXxh z(v~KDF0%Y*x-|O(ig1%9Ns)4RC#Wk2?OQ?IdE$l+a3j~3Gs2=8`w~CwbvjQ`cXm)J zK9gPX^mEp=?ab4{%zbyS&SC}M={jD8uNWN7Df%Xar_Zk-aqcxp%RDj;^Rrvvf)}=XFK&o zC_)YgrGxxgYlG>_j-op*<=>~>J(^;Eey`rbUiG5WSvibFI@rsk@>v`@%d@%dh%dV4 zy1FC2-@-LiVK3B3mDm|d)W22}Mns_;yYe|?4xp~{c}pqlq()H-sDrusbcN;TKIksC zTN4y3Kbb=Ai_^rp(P(<4yk>0j#9g-a*DT@g(2Sr)ZIEvY(w8%`S)-HpCK(<-qtWT- zjQ?RGAPY!{Qq!q1m8>m?OV{L!_tdJ1pF8hSOkbe+zG$j;eq#&pXZ1S2m;ar$O!yu_ z&B$C3Av;=tRpYDxN1Tx1KN;i@MtVRz1y~fwUa1?cD-oMt|MPy1Xz%H_3mY{TRRO5k zTbRLLfwBi`dTp5BkFRyanKfU{#!YNgJz#4?jk-mja`7glw znak>cn9pfc1uIHs&kj@m50?CozF6Ldw$~3JR?UD5K}a@+W(|(!3(vo6>T}Mm_1o+xx#ib`0AK+-v?w z2v#Ll3pDFbv8G#QjPj)41^KTqt99M?`o>nq_|aAb_0DQqI`&c zPa{5owQdUp|2{rtP*{x%Gw<8gN!n~Dy7%+%HAkFjOt2v1!$_kg@_LH{7V=i+z~w4) zgt+FhsLN6$Z17^M7JJ94n~pQ8T)eD8Qhb+k8G|DB&*sx2KVgDS4RgX(*PC-go8=F>}H5k%=H4=UgCi2VB^FMoVw zIqngsCqe&*<5DC>l9jMBW^(x60esm_?SX&HMKjSw>?pw)cxvg{m9+x&S{W!`(_0sY zH;b;P3Rn5r6LzCu@4N#awjUpybvEcG-7F@5~MHmQOw7!*fz1Sum=VEExI9h&_UWDPd5# zCGIfI`I{_3_<7Z{Zt_v~r#ZPvxn#|H9pZGL z`Fc+Nv4`HFjex%2ZDjc{({2Zo8=BmjjlU$9krUk>NlE+R&KjR*=$UmNZ!?|ASMLDb*QFxajK zrl&$1*h#K?cK__HNU{uDj3B8N_!kL-fHQ$9T_k}LtJgsOEt9$Z`GIA}R!8(=E4a+z zZjrTXHwk-hTf&nCm(WPaeo8*?$$?NsuwP5Ire(?gQp!;#aZRA6^JVBXs$nEgSF+wwMQP9<*ZdZA9q>LaedD!1Sl_uWc`(;xo9$-lsVFXu^= zgSR_8S!z^Yv)`z$Z7`O!p-KN5E0}L|kmQ@2QYJ#3zsv_a$|Z8@_!1OuGbWJ$3sDPB zGrc!Bx7mc*gn|#$pguVv3xAdKMfn_3UA(Y-4tL(m^Ly?Q6Ccy99)S`V2tJ38QAmx@ z5=G$S##yH%>f0z^VB#Atl0;assW2r~sOeuh{&U`xw~s?-0siIGXvs6Puph*lRUNYRP_SAaYo!~mn)CzD;#nf8W-(%HIZ;U zu_TAj->=JIM8U<&JV-3UeYxd+GS8R2#AF8WTH_kM@7_o&J%!G{3jb|R19y1D&I^A{ z>X*hJxM zuhVcHEqayz9ZxCkDVjdI{Sldw-MtweB$S}CZQ?0t`Hj>8Z} z^7tZi&O5sdwdm&)(DtH0qM3>+!tr0(AVYvMr7<~1Uaae*q`@YKolKv7c^BN~{5gyP zPei|Dq649(UX4Ib)Fk{b9rOD$row?$O>JqMCDK5ao?8t|zabTe@$Jv{@VV{NVU>3Z z-P*G0g~Y>N%z)(obXPh^1kBSy^7?F z{IIOPE!LaoU_-03c|L;VzkYni{C1-vnbcpwRG5tDiDWCGs5Pqyb%s*{u!@M#k{#rI zrv#r0woY{D9U#e>Z6ST1o$`2VJFdN_AM+!;I1=+;XarQpCz0%!K>s znjyO{UPBVG3;C*=>;$RluZOu9m4knv;By{(E;duTn(oPjsBK6f^E}^R; z61We-&!IM@%7>PM2Z-RLg{_VaM9OBhhY&CJF$w>xgadq9HL!m26iIEcB}_Co$*4?D zX_h5W=g~*v9Vz`jblnnq_Mdd96gz+N_~t~EcLsP+Y%o_o{xY-deqY8Kg zdsVomGK`09d$zNF!P4&%bdc<`2y#Sl8%^uFoI#UkfQA&eWW(0qDkKa7?~Qi&eB7Py zD16w4)Ry1Lt>X`^vXVxSd^=u>YE)A*XB%s|(<;_w`J(tH2p(l-s6Ad!BGW6I2Jg~& zg=9MUb9T1fSt5y?u(e!Wb*AjjarAnvoa_}rk>UdJP&?vy z*8=+Rgu0LtigZ@!^1Pc0-AC21i?C(uh?q~iqnpBzY^;aVB`Rf^I+VIuO1Cj-_x#I3gYwka5TDZDYX(5m8*8@dZsBfy!~N z5?UAph;s-heo+39xIxMUO>R^;<>UTMd;xt+s3@c`Bm!QcvC$sG5iaK5-DGGkjx8)n zQ5VC0(Yi=+cDC1fnpaVeNC1S2d!86xCc@Obmr(HysLdOjsG?h_1nN;ZP9|UJ7;?r5 za$vd{FoiOzKbB2!FHz1{A@C2h(;)d-&}rhXoAB^EDYvCEHqgVLL>^P()wl@5uGbW- zycG&Foy)GnzQsWf3mS`px6f2W%>ta8z4fCa8xRq$b6F`@-_IIL&ohw6tG8_Gg|GJ3 zVS-ZtgkL=DBy~AKW!>?cv`bb)4+T2)UDRYdsA9I8$N9IhkY(=;opkv7Wh!TosTx<& z{#n9Mq%Wd)leG!ppU*;4 zym5(TT`$NAAF*HB@FBLQVR}13bRWSV(6W`)7_wPLR`uK=9o&xyyk@N9L=9T!_+}uU zHPV&k^jQb90mn7kzFmPPy=E`SMmDGn9d@=UBVK*jyY>f3BjL5Hhoh~_&vRb}u@h>9 znC#KJh$?X&KfsKP%hkfSMqwHXv7feDl&5DBR`I3XcqptuO*Hj90~E9g7KUrjw#3Io z3uI#$>o{jeX>h*PN_{(j&UChtKf|2ydkaY&9uZk~-)O?g+DP-)u+#E2?J)UUGSewk zObdq56;q|}_veDEQt5Q9j0OGXV*;?96ejIAj^xT!xeUpL9`~@ert0!Ul?uzY`nlmp z-A8tuPlzhsVee(L1QCSWE~ZKnW?sQh`jTBr!8B2mEC_<*c~fireC3U>u?Qpa!;JHU zQT}CWu|H>jVzkIfLSx_$sy!aZ5ShiMzwaH3c~40U{S-Y##mj(Sn%)t!?K{_ixZG}@ zG1n(p)FA1Hb(>lfiT$J+AL13aOgIusBgw(WYnO)K7PR zN+v!f#+;?i&wD?8)RTr;Aq6^@Zbz}y)r<1vggN*ih2T@hEum zn@ZQeTR=Jwe$nHiZz0!wDRu0zfU}FBK4$ZE@nU9pQ1cO3HeA5ahx$_8Bl5~`o+alO zoNWefKFEdKT)T@ny-50_iABU3$uLAPS>^aWcqk72`hdhYAwekG=J~GfYrJ0=wq=JO z>M~QPBBJ$Pwpe59mrMN%joKs(qSDM94jH`XtW_J-8-%^FVB^Q<(hNzICS z(sydnmRzR0Uvk-N5S4U1H=;c{_eQkInsb@Di=Kms%MfphJhD9LN0_Q6-*!&s0!Kns z@ZIAqn}-NY|0_{zvmAkjR~rF3|04A!z|X9Ho2y`*&fm3OZ|!5 zx`)~HIQgy)uBD`qggv*9bFj{x2_P;se zoEN28PVQ7`1GuVDtV?t^V(ZLamxQ{wiJ;aLT@UwMHQpQ(jAlv_1d>58R;FCU=IMNr z%61yy4*$Iu2)!XT{_$8Gyr@4-7kQ)&?YR}=S(BHKG3%YY6vP5 zlm60v{OEF)%AC9v&y=}a zJd($_+3y5-wSqAzjCgU(IDSQNN7C_2qf_SgPEs`k$I>cJ1$)7sE|>N<*TCjZFR%4{ z&a!Rg!!mKrLTkV+uHOvkcy?8BD8PYZ+Sz28j}AjksMg!g(G29g zlprETv2vbv+Kbq!s{xmki+CI%W>Sfts$}F-dN_2Xfp9gm9I#f6wBPYEz>@|b($pUN ze;VS0>vr&_OPx(1%&qm;tMtnpO;cf{+kN)kx2LRr3~a-i5k#|C8Pl||E|Mr?X~m*Z zyAdS37O$-Dsq7)&AMU6qRWhUr$g_G^6hx#+qFm?WMj?Ylz6QagMCJndlkp*hu+`|Y zpEIH>j@!o?O9x@_Vqb~({6A=QeiUWD8he3v4OtIfKNGnElD}!m@?QSGS%4Dsj*Rb| zajN}yy4nTHL3v|pKfVoywT7FXKXf!CUf@`ZP6aGY*>2LYa2wq{zq8A=4nQUd6nI); zSY;kptL~NRUUdbqFRDHZg9r=4kaXni_$Gr_0q=G&k!Kph!Hk5J6~r;3tZdl8KcNEWqeaEN`zJPWkTNmPk`z#F;08osncz_D{*d*~W*ccRlH=V^2VCegh^|xg0vFz`fTmAzIDcXsl ztI}EH6Ap!sl+dSnt=D2>{aJ&uvcb^x8UQ+`6!`R5RrqfV>+P5L;}NNkN3-FpJyORg z%q)+0&_cwtxCKsb@k|>tc4WV_0}1b0y3@|Prty&2di6cr;@HJ)Q{k$B&YgzYv_WSi zvfHLnMURx<{iLM><00+tUGFuFZ$OepR138=k0>6dC_SbS@H z1i(~Isa@mV;X_mlD8A{a_6B17YospZJ`0arTm}ptJJ2>cle0(W!pVmD3p~IpP3?(4 zt4^qv?k=ora=~|U5d-OB3xx`f)^mBo=pPLy%K0*@chp-;O_~pO%PQzp`>G{h~kysmDXJ+)st?mxRuCU}8qQNpn+1|QUBp{Y8$zdv4Cckv%X>ql}&Y32I0+s5~JHf4+@z7q!xKr zHL>Cz!`9Xi@vhbd^#yiFbDewC7DaC7aS|PI%Qo>S@Jvl2{Kk!?r{n5Oc(qNK#Ur-B zdRXS4PM0e1T?fymZmpS9NT74b&6}Ib4#7o5I<7>r;rwbS%?)D?!g~LBe9D zav*u8F(DI3FV#yU&Awd<`L+6tj&)|O*+AN>r2!Me2jK6#p#Q%cww`U-_YVK%9$njF z3O^K9h^q2RB^jv|MhaibO?RLhUb2P@P|= z^v;zm;Mg5h1l0a~dOSS;%s4Oa|ezpm)GrVPKJ;z^K3nPW$GIOP)`%5|cN6hg6`E$h6TF z-H6?w(DnCyF03-$X_%S#6I;|7(fa z@1*$5s{r-&@&;|hEe~p-Mt4*0{jA`&ktT-Wd%~>MV!aE&JIL&!D*Mdo zT!e{5q|vz=sq`E_AO4zi$7IQ=q^g0z$ze%^ATp9#QbU`{_hsHnmQ z-xNgEbEMu^DkN2VMXNC%d-aLMq+ze1;g#^svL0XGsTjB5MPYq5$K~=K5d~?A-_D8O zuawx6*19vEh8KGeOY{$Qp>IlRe6BsQ!xEvGxB>F888@$W7%Dg-)*kzQ;5Y?$m2~~i zpzbf7yP70U; zK7^Fo-J;Hn@K%bPyeAjqr<^a1qHga9k%+%kwK%OyK{e_h-mIybdAgtGgobipYD4l5 zulpjlj6%H=mT(gR5lj(2f6D$!VLQ{--rIBrhrN_pb=0biYP1bjYF|6WA>+M2w~VIQ zV(?qhT>+~fEU*TlzcvCO09F&%cilfcsiL#sy&@6B>S#MNZnRZo_blMiq-Dqw=OG0&Ct6RGF1G81oXDEZiZ}r z{)xZieDewNDn@hZc*iw%EDHZuGI{cU;QWI8Y-^JPE9v^cBTwvoCq+fK2pd~USB~w? zSa3S`ymd(7e>L99>DtfBRPY?*8^eEC6g~g&1YZakFgIA<-iDgagba1j8h(mFUO3BE zdlXjdAOBgp@lX2La*`a-<`!g&R8c_6k?5HeJ$K8iv|xlTOO3RV9=%wK#jWl}q#3M{ z{|ox(B&xIdg3zwq{?Ag+RMYRj6a;ydZsI(1@ss6nK)@+7=mj$8Iym8B>cpJ;qx;;% z9)oP#wNL4j>F!;L>LD!g;L_r`VNPUlL+B0&h+OeqTO1^=?jsN4>_Vce@8{rC4yJ@Q-aF-BPpUU(=kvI-h$`+ z|CFo`9_p`%;H|n7w)mBQl)2nl2Rg{_FJCraFU64!4A%&(V}La91%r>*lC z&D0Pg^hoLG+Rs_V5o>#l;QSk3%Nh%|*-_a?W7S7WL5Bh-be>qs#UWNG5W17H)Jw2X z`sym=UiNZ@GX>Q11*$70SD5_c9i`Cf)bXZDu3(p5By6b1RSgSqP})~~Pfwa8vtOA% zN%0tjgmc0Gn;CUeE&&=Tu^OeUg)#U@smw#IPLL&4Pe`{Fe?5z$q%u|G zjEz?>W%*?91GzItqVa)Ff?~E5e{A8rXAJC}_k~BSuipJzCW9(;0dcT_hLvCHGW%xyqF#{ywV@y3A=4w8l<(?YzZ`R~i$4}jCuR;P z#-zBIJeejoUe}*%(1IkD{t_$QNmF_l$nkN2LrUp2F^{kZ(;qF^rOJ>AK8+Cin*e=M z+wfneS73{5(F79+i$nj2Q;fs%*tf)9K3=`1%T@QsD=!vyZ%tPfy6(#L3on(f1qE$@l0-nrm{<6wzx3TOTid{PDu5Vf@R1 zl#F}^TSHWcnq9g>6U|y-C52|0>7%JFyR^$Zlefm2Z^E=EDnzx&gQy92&Hw$!Ja*TM z)(Qv=j9_~JF8XnjiTIs-G8`#mybD!nQoFbIA@*Gd=(pG#{rxXhY5Pqk3bL@;{In4+ zzcmh?{8>&gTO4J9zlWk&YJx-{{nO9NqKycToI0cyp)p5sMRbsF+|&ELki_L>e&xl6 zVUdKnYMI5yImwvCPvqRfK|d*`y}L<&TeU|VdQMU5ZT1#^d|mfg>ZN1Kcr}fKlv*b2 zoxQ~(Z`|>U_T6)81A`F@yb_k!P^KHV|9%eS5Qk_X$Ei5FX|n;A>OBMu%FSr-AT|1_ zvj-LKE$^U32~j$j&0Ci(e25TLR~pl8@aX--q!h);1UuHpkQw34qQ4Z7j!-X1b)Zb7 zuOVG6r4Y0-Nzeb)=YZ#8+wj{Y-C??72I^35G2jhfCFhO1B;d%8lTQ#Y=1jzXg%(rT zce-4$Q`OjB+HsZXe|69#1VmJY5w&;?Ju-i~3gZ*qY2I>DdQs_zdH=3k(?(ak25i

ha19heJuj4CLbWrG1cdj3NRxZyvKp*M~gzqF&FLXD$wD8oO1Ry2h zYu771$(N~3KaBA6V_k0`l+4Uxxk|qdYlqG zr4d@$xYwm|_lSP{Z5tJw8=>eR93Wl(M>amc1&h`c%)MFaTyX*#*zPi!0l8^lwxvnO zQ!lD?x8hp)?D*gG^{`kSF_CE#G*O>6BmFU(A|d(6mMfj!v-YF1F9}f5dMB?nI1@ zeR{{^qln!qr&4Jo$Yr!3rogpu#P3xBJpq7JH(~~7H?ReV+r1ig0w2%obw%9GSsYK+ zDD_{MUxvq{PJ5rJW{zno*s#mCc!u9Ujm}jxrPX+x7m74Eu5C#a_|nZPLB66Og#v)u z`r~TwKtyY4uFO^yH{r73zm;orH-XN?2eIcgCWEgyiSO^rv>ZDB)V= zYU?k&Wr2I|c%%{v#X*fzVSVIs4loMvD^(J}sEn3cBGGt^~VauFSAIF)4NhnK+8RlC4-`<3lX z;~s!Kx^;_SY+Q#;{iPeH%wI{7HM-7P20y&YsNh|;>U%xqaC%)-aRf1~We1_3HrQ^F z3bzxmMr@w}@`TRwYhv-RhZXgdoooWt_sz(v=7I0L4+`_wjA3-7g&bc6!xWf*=Wb{8 zE_{^;>1W~%X4c5JkII#enKYD&DpW~}7DPavikfv6)U0i#!2B+wMjEtvZ}8;&kw0F) zM)vS`(MDAir0Y~lQIy2AevB+v9b`CJgb>guYdwL&ymnr6iJFEyDwI>c2LK6KyM&gc zAj)6x6DJK**4NtoclQXqAmQjKg+yz?74zKtlYPo+{iRmrLq1H&FG*Ew2s4zh49Mcum44w)4%!Yq+oiFkpqs$r+$JN z_{f|*>EVHcJ;-qseE|pZf~D*8iN+QG!s!X{^hNwW^vTEnbd9!%%O>(f|L#cme?N)k9~hHuR>pv zxcfEyn%XHvJs$r)%V9`IfYFlgbS@D3^5PZKH&my@yeFwkzZvV(R(;r_c*pq%wZ=yIBceR3TCytItx zTNy)Fs*aZvyU{|_D07e=Bax3hM!c1>ICH9MmMcqZk_zysFY3(ZS5qAzvT}in<;&c% zS~Iuu{zv5N1&P&BOd0a!z&FZ}vFea8UEOKEQx4^ceQU@p?G`{}%S$LvEOBtc zr%cs#7p#KhKA#NB0bvLg5@eLtWORCd!Em6)FDq5t)@^wDjwAu8sR8?{x{4!8(c8tltWTse(BP zB#X$!PMSiflin%LZJHlc&dtULk3LLoBk`6b6c6-3M!MHu=S9AV(KE0hlO42^PoETt zZX^7stvqTyNuYo0(LnLmt{^ECG8Sg@9ITm`>AR$l!WWU`mPCup$Rupch7hYapV0)k z6&Gt1{pQ&H=$5Wy&-L9`ZSj-TTm4ne*z9uZt|}#=+wakwV;dW99bVt|AHO7TJWEMW%R;sQt*RR)b1VoLrphR!VYW=hnZT1Cx(=0&e#_Ytert8#=s7-}zEU%X z$jp5U{ zB$&S(e0YkWj}44*px5WK4qU7jP}%ST!0C_sdx|BPC4<3*i%j~j@f{x0F;Uv!CCE&? zZ%>{ViE^;{c~Nc&!A>B9g$w|znAW4|{5DPp53uh6{O6Mn24#fD2T)p3tkSfhL)MGZ z*{vm3N@+Hmx%`T6X%vGK_Uh>cWQ@U*sWNs1_$9tsh>1E> zpg?ZE2K~6j(?vcMM3SsT)b9>#>o_=jXwW^yd|+Y3990v)u`|q&!|zcGSZlA90(ljt zyWbKP3A9yF_QsHTv%llHe!AKd>pAZ|LHKG*U({x1+uRfRHSg8=i;-osmtQugBL;p? zo&CB9S`E(_S`Q!p**4*+K*&htNvuxD<0E*^Px95TpuL??0!@5nCKB2+246Rcij~}2 zs(biM%?PL?bDH9bq~TKF+GZ!E0z2!z{lU$BGRFN>NW~hf7rm@awUm*;AZ8GKz4mGn zLjRx5ho8$1kJ`XYP=4|2bZQ>PTwFs@cm{9(M#;o)4}+F&;Szhb$R^CY3(d8uZ|`2N z$v9J(eH6(V;rWn|#vH)#HS$nQ=1V{`jr3)9mHkQ!@1x=adF52VlQMa8YIHk|J@F0* zRNNRx&HqI52(T2)Hrp`qiQf*9 z8^5dq%#;Tar;pP$4IlFkVqe;X7v(>>9k$|RnyAj!I*h(j?m`d>aee!YM;MIeZ?T|m zqx*hA@T4`%Mi-FIG^tS=v&gy{sm+TkOY=lL1f9GbhwC1Tu9F|t;z^eoL+hr78Wh=x z|I=zEUgL>6te_dB0s)(9z8@9^ed^|J;|e-&UIv2iZp0CEJ<&te zia8Nro~OTsjK#`%S3lZu?l-W;8_NNF)0N@zOjBar{0 zX7R6}Xj1qys)wHlIO-Ax5(e^H0yJ9lu_AHC)Hl5w*%svBN^!bzp9(BlcVT%-t`-l2 z@m5MsV4NOmy~uMqqdQ}0=a@# z!(1Cq>o%XUXb@UyI@`gkSk=nUkIn-b<^qqaZBBB+vqe$krBE6-KF}vsXMU@4Jmdvz zPlx{e(B-~@Ir?cl{3y}vo49%TOYiZV+5Dm7mu~sN4M(#Zz0cnKSM~EL)IdJknF5~l zndn8oL^cUG_q88aSE0a+MS9lo+3L%>^cf1ZVLD{+!xnB+P43(ZFJ4cweC?MOE7rZ# z?so2q@d^3s2=**IU09!E+;0%q8GBsYoY*DLb*V1EdBaNBezYLHPra_-w5r~&`h?Dh z)lb_PdRJpVGeX4>U)=jC*b1zCyd(=%?SFl*(XcPmhK!&fdX?f>MSa7t4*_lV!{WS- zx+tHV*s7BdM|0q1@+E(~j}OYqZL~bj=p|Q-lbTVO`EN2s+u`Cmh4CBvWf$0JB5*Wx zQ2>usT1~xV5it7XwAt5Sbl%Kc7A6r)_K_akcAa#D(>9bvzNmwNcdZd!Vn~iTxc)|ihQhGUN#P{^x_Q5e1duULlJ&49yXGkSNZxi zWBRQj^fPG`Y3zL3aaCJXPC!y`(Rumg$!6?f@o3z1E-Nk7Fs)havmNsT~;mZmJ@-7DWwU^X7IP#7HB?A(M?D%Jp6X34G;*2erQ#K~#rZ zkDh2Gv-@})>ui)hC4Z?ABI8c+Rv?7H)$!2b^&XDv?ljC^@nqk3f&H@sayRIL!n|Ii zL@<1f4ws#uI)q>X_bN*gKQVWBQqB`Qq{kk0b}zX{o;R2KhghDQQN}7OX5lCodt?j#wn=nnEVgg*=9q$NRha)^@DQ4Ma$|U^aFg`A~h3D|?s?0rqnfly%FEpDC zHht1-U)4*mey8J*`L*xa!vC8E(5}4WyJQ;jW_#qj(go)ik3O}E{yjm~b8Nc#{{;*> z^TpoH1B(`nszGd4MP~$KO;UnIpgpO;^dvVct7yBE21d9$jz0|UDsdH0G z+;?%D1n*sN{h1i?a+^iO?~6=|p)VvBDsL5d*5B2}_H0@t_h?ZBNM> z9%8=DU?X5Mouop8bKKY@Ofs7X)m)O0Pa(!FSs4*%P0jb}hU7RY>>(5;zEMnwXwdt) zE1|YCgkYn5CUoJZg&9H~Kv*7(Y(O^V;EDqP9|xRR!lRpuo!Z)hgdpl$!jF$ZK%V+_ z70B)trJB}<_n-puKByWBj!8*_)s-fOO)V<+Ul3+KDw})n6lMfHI@e z;A$p@D#7ot(8+Bf09_zQZs03Tm_%15?Oy>UQ5PMR9o);1^AMKNDbOy}HEE+w!(*EJ zEkvR6PXd9P127j-p20RI#i${_dW3j`gaEh6j%vIQA`eg~BtU>QWQZoPfm@p@Q*w>N-t*{V@(Bytly|X3E~5 zy%$ZF5J!-HDM~HzRPI8GyE{_)Fa6O!Qa0yxJ{_e8%tUp1kyMJLP9lmzkgQ}&INs1VMSG)EeWo*sek4I zTvifp@1?n>9+m|N4YFhblbZIlSQC-OUm(2d9bWToB>+pxRo@M;Z(a9;tPOYSMo)v7 zuiqtJ#m6T;`@0Pex;W$@_+`hHg3KRlnHtHAza7ka4LM;F?gPgzJ7T5#9 zJqch|$izJugR}4f@4@bHPXf3n0lY%s^e1u`hC$1H?f2m9!aV}82b={8-oYswSUc6g z0uf&kaHl1(vmin4zcd)n%f8CNYN9JD@)j`Vwpfya3(-mi5^7&T$f4pEwk&Sj7vVf5 z5Kp$|n}j;>(2#$?xJ6lwCd-EDV(s%v#V4`?lu>CLb3kl-X&r&d&RDjbIJOx3dj2?w zq+fo#g(bMmsiYjl06E0cRBDS`tX#~4&z|3XOWh1|sR1V~K!PJZv0Qw`qDoLlw1z{2 zid$6VQI!^n6eK0cle!JbLba9jK2i4l^O>!-!^ZUl%ZMexYEMz>jHm!1HaWhN?%gEO zd4t^$La7Sp6qO2GrEt_Dmh>21-#tmRr~r5sFgzR-dRv4Ui^5|D2;M?ci2>)Ven+=- zk@WlUfHJ(wV10TklAvH%B1ui?s>C{{#eDQZ8vu2TMrv?{LDt!J*o^DX7x^e&<@=+DJs&z_n}bv#WxnVD{B9(ECq$o2=ki6dvh3|sulNCvg^}6#Me@Xu;G}Gprnfx zxvn}>GPb2~5UlA|%ncwE>ZK)fk_27VUlw3R4QhD&r{DY)sL)`=Jq2cO+%-)-jZ#J& z=!ri<<175&|N2WZ`__7D$gUu^)f-uY7m6ui9tES+Ntb+6TOuwp(cnhR4tT z=zkl+W_#k12TXOD!{NSGA&3CSc*~c66B??}q8^r!irIXy@39fJ+}cvBq&J9inem-zU!~&ST`VfZkOH+#mY6P(BN19>GvB(xbW^upRn*w0AnI? z25+n(umvhMEvVFcUQ?>1GL}pYuQj;7)(P z+ev_80M$N$KRKK^31H07GzOCrfS?bmArzGr`+&A|(o{g!Sp?!j@=6S+EkLQ(JrRZK zvm+t2XAJT4yrzr`902>R~NybM6TOTS+K~D0?!wSgi zHB{^MV5bmIwuoj}OU`>sL=p-s70sLjED|CK8>lL(G+*A8^Xb`{t}!RyzI43xgt)k7 zjT5XwO74oo!kXzfiwkfj_hue`)3_i1S1u+9mXD`xthT@=AkFbz%UyvGueO>jkpL{Vv^ZA)5&rr&etF>D z9RAP4c!&3zxmeQ7m293H3h!LXyYVPY1Os?Wg!*4MMO6pZz zwOBa?OAANdzCnkC=FT+hPu3SAtNs&^u2##pHr=?4gvN1)$IRxci;bEj0#DLO4%@_T z27#43!!0QRME0LUtqZog5};lc^N}INQ0;IX6mVz|>q+ek`>OzsKoUeCQK*|g3Fqo8 zjx5jL5SIJMUlpvXw!aVY?BF61f_Q;rg+C?y2N0-txloBHqmd)48Q6`%xIM-7w{qP* zEIR3#A;J(iD-uKj(PoZc)$BH?IB?^6Ilk$t$FqU@$r`VB>`}8|MGc4)D^?H$!lq}# z`B4TD4R4}?mgKvjGqQ7v5sDjcHH|Kx_sU68rW#wa$I= zY?Xsh(Akh6GQ&6?i*&IJ3QJ}J0#k}=KG0WMA~N@9xHhivOQdLo0a-RCt3gP%RP{{v z=~6cVISZLFPIA8luUZCo7g|EJ=c%#BdI

7KoUGA9beKtdXX^n>aq2ip z0`=A^=v|5~n8Ib;$a$UrUc_Fc^NMD9*JnQ?e&BRzbZyDr{2p)L{KwQu2Lc)d(#(Nf zLP>XV0~W7g9gPFwXz;uXqw~fyVw8)}>cBE8Ee>sA^rp`p~Y{iiOt#>9WqcX`Ru zJsRo*%tC6~%?+4KF)g*~T?MrrW> zZ|`e*Y-y6Sp2)23JM$APjr=#@pIFFZ!OYUK5F0Q8Sr`^0q!BBSELN=8dF_>vm<93* zHhjpEg=CEoBmRKr-mc7G5gB!&^5kb#oj(2E>1b7-I#F34r>dSOA|oR+BW*!liX?HJ zbUgtn>QDRUugQ`W&kZQ5@;CxmaF;^5la#T?aG*f&TR?_EizEPRM29#cW+qA*lNdm#GUJ5NGkxR$TGa#&zbj`67ZifxT=hF ztUv%3O^-c%K$$=bfFq3(x|m%tz34UDYi68 zdu&bkxW5ZqFs!3%$&v2J+uQ`Xg}%d3er!`m*9U9d>6=%13lwR>ADM%**Pu}S8hevj z0CL`4w)v>nbn=CCCQh>()j0h|z4X>E2*l98NMbeP(faV@ZWIC5>7kf40-KIiia_4q zFxuYhy*@_T#fr8|v^OKY7knV~z9bhA0Bv~+@Fv}o#H~|C%jd=eqz>wW;Ke$vCo2i~18j!?6=7xKNiRJ?QmaM5J)VZ509z)6lw*;WUJ91*Y2)F7$ z5K^TWZzN&n{^NAc?Zvb29T{E6uy3i@4pVPJ=~)holBL@Rf!Xl}3^9IleV+nMmy7)E+V2oHd|M+%9?MxwRmTCg=DK>P>!wD{uR%-GPypyi3 zo8s19n@h|*4vC0MQcp^FFdNh1Q1l{i)g8xawxBe5s!2a?c>v^btjav#Sro5zcX9$p zw&$FC#>3D#U9fzBIW5L*Sva|(*Wl9IWb zflKT222Av#oq4kTQ{KI8-=!b`7q^fKigLfVg9xwC;=cV$mVZoNnD^N94!LSG?di zSiDS=y>P!Tz!ox?=sBmdbyrTmX`vM_p0>$W-!m&4z}AeqvXg3Dr#mm8)l>%#(p@={ z!^&TzTQDcXm&HfKO9kGxz^n&5Msyw#z_P4x$4Ta(zne2YMEKMLPQVZ` z@CWANcyZTSOF%igfxOrfz?&wjQ|$60$?n(f+)yc z(%&z@x-HUE<@*;!NB&96vx?8=N+tztE75YH0yu1A&`>bz@+5UJ22ts6z zZq>Opxhl?)j6-4W7n8$Fl-`>Nrgpf9KNllQ;2c5rOC6y~>D&a~JUSu;RyZ`u~@r_^b7JrmxFWwd2Q7o}! z^!X@r9TP?T^?&04TjGvsw zCV~AtKR5HJl;vY-;)fCVMos$Np$($-~HX;^IKWjVSNMs;XnD8GN?)% zvxP(v^g4KwC>fss?&2-WvI3s*>%aQT@r!~J{9rYHaS^XRT|Wo7L3fh2e~F|f zl86Y&>N$dr!H~uX!nttVyl@ag3V{%URLI7}rRwIGL?!7w089?_0TP#%JHV?ymxEq) zW}Ckt2(h{aU*ju&!#|c($SsH-5k1MUSusW4R|P-BrSbt`^;i(_!VYf}FQZE_##cAj z6^J=V5W^7`3V0>ym$v$lh(shfNl!&`dwme#JBsi@styhjFHSxer+|p5t7!6MGQ+fW z4F*yg^|5E5{qeuh3P+(o&%H`=0OeX3uLDiBR@mKMd$s)U4Su-}NxoR)f&hn=2R#79 zVQ&#Y%6EVy%UN}dW=Oo}$;|_(S^f<4n=o&q)|`>xXzMG!AJj%Wd|=<+VnhbC0N^nN zek-$sDrkRj9c4zk;Y&3|TQhbe;6(FD5aJ5bd?=Ml(eny8?5i&_041enO1%KU*_&Yl zauYvg;czGb#PQa8!t8E?mo`LF-fxwAzqvJOe8VRRCy#52f2l< z@b?ISd21#nV`#|Vj`M7}uLATufL#^fg0>rnH0cMnPF{C7w(Xrf!d&AQ1&ii-(cuX*VL#vt(Zd7ynEU%G+*k+pHV!}yt9CMxLAMl; zW-FNTXX7q3W<>k-#OyVTe%0YFu!E)@OGV%QWby% z*yJ>S0C&kSyMEvUO`Ah*=~i~1iaRRS$zjG=pLEvz1gWYinG^O2STag+`fg{_`A9Nj z^Yk}sHNcKx@IijsQU$t|Qr$ns?qmp~LM&18P;-g2x113l85G1*(B`xEmTjclh(aP^ zdYNU^YC!Y!?eECJ`rg@a?^y+SVPO3rZ+(*Ynw^+9rOChZ^Bs}`p zI}c66HSwda20*OUQ%I^y_kGxDm-J5n5K~~$408qydK#0m5n#lj0P?Jm_TV)gU!N_@ z9r$~Zexvsnyg;^d%~qc#mx5jq+Ham6(o|Z&>sy*i3i9bF!lxj7Y4DJmoU?$0xcKeb zkOs2cs{TuAE=!3^`oN>36yK0z++CBp$I2cvZFLhMA&#dAup|t$bLt6qy?pHRa?sj> zxc|2r&|^FmP4C4;!)p~~#r9kX1X|PirKK%4 zSgV7%JfYf}OS>7cq`$KLANNgoY5}!sAnnIDW^jRTJ+F{j16ZTWRA@u2OLGdWhTJ-e zKmuv0y_bM3*ta{68FX_aGzYlV{CJ1ENI!=;*OzdQuU6qL0DHjt)x4)$dpF(X2;7o} ztZ!esw0DY4IPuhOahk`S2Qc>Z$Xxahl0^f0#T4L9Rp5#$KuvNh=2MG6swE(RWHub9 z!)ncsaB-$hofue{#Fh2{b2>je;I6ZX5S9ixy>uJ9x%V0zw8Mcv zZFVHSq-$+Ygb?LC-mmX+&Yp}10So#oJb(q?zzE>YUZmMlA@9YK&h2&REC@k(mgveF zbub2*=22P&`u*X-ES;IO?R@aX7Vs0ild<@|P=H$;;`&WG=A=O?9Ru({T;v50xLGcT zhy^miSqcmhQ)t`r{A(`r~2;4J8U#p3n)( z3jhA^gZTG;kE>$=cqGBi7po`0)$ zcz>)lCk@N>|Ni@bncw$9;XnOTY}N1>_v^K#S0;pE{oVtxu>jTef`Bn%8zX)DRRcl8 zi>eTjWpIbD@dYlXXwFbQa)IOIGt3SsN=W-Ue8F34%8X#!X6Il$7TQ$}oQrTsed$xR z=4LIAyM^qu8`S^-q?uI+sSEam3EX*7Nt*R?4LBN!M3B*(g}g%=_+{7XQ+X^pLX(Uz zA{mXdB;cNGeK%3u&0tQy>wb2zm>TfpZ$Uus?+;!Y2OvL??LDabSe-3rkL}zgRfv@q zeB~GX?fM0jMtN|hkr*>!#{$|dd_O3}a4AE_alnsV0H^Wvg7f>fU6a!FUhe*S`7-P{&i9-Y1(sXD+;%Evb#LgqJAJW?7M zwaJI+zQ=DTNb~u5ICI!LvXstYbjP~`k1V!&P$P!3LXh^{)Dy7ZC0E4pSYP(L{cKYg zc<%;xFSN4dqAax8_xXz3e^}DVwL7(TkRgs+N^~m~`p~RS_eZ(l7$@b?1W>}QsXDkL ztZ~{~NXw<|pcf{ye9HSsvGsu5Fo}N`auP#l31O}~a4Rm5GmMriRSnWHpE(>9@cdNb z-&WD8$0q@!j=Ow&3(O)R;^5duPSLeci%EuR(2lClh@qwg+ks)I{ zir<3nz6vmU;?bpay!6AL{T_T;py$e`2ZpxiUBhCj?7_v|UC0cO&+G$Sk_T``K3~A+ z$|nJ%4sey(w*FDVNIEwR?9r3e_9^WD?9LFMFW__KlYns?cNcl;_f>$>302pqOH_3# zg*wis2k_f1p9G9^;J$za>OsIWo64R*nx_ru~OvwYmJz}KGLBLW(awJMQ zseAUY=vP=EPD^a0!hT9wK0PqZW9Q;!*_|x!7F%NzKr;O7KAQDc(&hUn-4#=dz0x<3 zi!wjJ#Hh22Td^z=U*jU3bq=J3Gcf{voY7roBr?EEcstk@LrfsZ{se-HGQsBP_yU0( z*2q|v6^5uP-!9L=>(sPLd7XO@kzmub0^b83!wl8-( z85e+>{IUzSnJ5sDr2h$lion_qPM41)?Lwx zum_fqF(5=yUSbB~!PK^AN5Pp{z|RhAoM@CiJ0C;zqm6{`mR8Ibmf zA_Ui-yPze{_5k7~U21>e@+d$*k~~K6GPwUTW$|l)!BVW?sO48s*v~x9V1LA? ze99Ra0ZPk#?}74cnNh+yNJ_UM!Bl!dz>?11$g|+j!Jd~fI{)MW9nMfEe z;8;sB_*NnVm67~_E5M%z0rk3oE#c^MJb_O+EoXq&0(uL8S6F@fIa)<1lq+Wf_6|fe z7AH6h{=7P19~iJrhWRY{tO9%oqQB@;fDwYhajJWx>?2$UZF7_eWY5|@&sAvSR zkPJ;7u?=Z$g(HAylm)Cm+XG-`xEQenfZv0Rp6jrc<*1823j8A;?&vjCKs`hZNmp+L z=$$y1S`WaZb^emR^m+FAI|cC=7`IW>BEX9S+et5(Zk(m*!O6To*YuD2tgSkvVl@b}$_9=B10@}F) zC67QKmVU-~NfqFgz5<@dUdV7O^o8HBEWjIiAilsM0^kafFnqdJoxRsZ21mv>yuf*u z{so&kE}uTl=Xr@RJ4B8$L8$|1V0L61GaQ+L7(lu&G8v~{I}_ks_&ELXXTUwGpYa50 zKy6v_GuONG02H`DIpZ(am$ubh^4Y3D4g4i9V0049jx2bS!Mw~2v(^6W`jb7uhZT+q zYa~QCP*}h#gIM~@b6`Z0I03~7pN=mx1rrb%6rv1_!7_O^r}}_%_t!#1a3Qv@uXp`M z7Xl$hxxeJXP)>z~JTZnwL2?G;U_j>& zyuu;ifBn~A0>oJ8=8yY|nI{IWszZO6{`i0K7xJ8e{iiN9eN8vJ9JHKGGN^qYb@NMv zF#+lsLTRT0*IfOQs3%~hMGPf?+x=|Sphg1Ldr@mt(pkOHU6Dr+B4LHc8^1^_AibE8 zQ=efyJvo^@c>4~x0K7#Hmu4w;905mw4!Du?z(wE(08jWBF1S8}9MC0Q3-~47Rp74y ztOU~5rv+{87&Q_oS^e6z=SyunYZU;vfkxMBU~lyZECIfBj2gi6V~vo2K6v}x>T)kY zUl!n!D#S_)enT(#4ZeWldb^D)piXmi1O|ba;gTD?@Cw3$H+m5_*#&SUP)sijGo%oB^0$;E07&@&tCvxQJV!Z2I=%ygNeF;g$`d3GkjpNJc&3URfog+71lXfF z{r0;_39vPN5BxQK3*^9<3tl6FS@5?=pylGvl333JNZ;=>0aZ!?nj^UaquqvU9>G!Y z+bTg`J+S3Y3jqw7)*3QsW@HC%2G0aTtSyriXUQLsk%Y1r|F=!_WdzzpVAn?gZ;#yr zdk@$Z@Dz155*Q(b*0t1tJ?jNzy8ULK@LY+d8r6-Y&Gtl%3Ox!^fGSw*=^#{wNu=01wQ006l`JeU1=9%leNJ zMQOi=r?HO#l-6@O(jC~!Y~(-RK0^Y!u2x@|%roS>c{ zpttR+rRAcxENTn+=EtbFBb1sRagWuD@Nssv4l8$4cO$3kU!Xh^ZO?0EmEN1~GxPFMtD>9EhdqEjp@j+o#^t3XD9+LFkA#m?)QxZfJn5>A>f$dFPJ6i2Prv#OS&VV z2io8o0a6d>GvIGo`4%bE09@K%UlS4ICsr>0txi`x#jR= z>_WE1AtHGIvd-kNh5z;a)iRF~y1&M!$Oypma=9h15x`Y|zk&ox>n-s22%<+CBMaAJ z0Q$WK`kAs;N|EBZ}+jX1O2*gws001z7 zqXWH>^aa?!PEw@^D0&f1ndz+KfL(XxXGsobyFTItjBIO>fL=oj{599R1iGHSRi+2@ z9znH8qv8?VCj#}rT_!>GakXH7tnH#d!QQ8&w2qP7QLn$wC-K9iFqOra8Cp+ zFpo<9CLbYzGl@X?c3mzY02d=1;zj^5nSD;}{qiMZn@8O3s{_oC+<@d6&=tu^!@}=) zuG%GZ0G^i_)#aW=N!KEUk_T{x1g-#okF08BQ9Cx5CI-ogz)Id!*ke+ap0|*L+^&~& zc~#&D_%G^B=$*Lz6ajY9j!zzvDWWGLmwA=AVB)0eW^ugxl z1KLC|O9(SdjR;0bpjEC1{@QU$I9V7KzVD4c;NuJh{e5Op@4-24?XY z%zW$3{Uh*U`s3#Wpr1#GptRkBqNF=Z0yV2Y1OCzLXc0%v^4G{HE&CWiZjtl80WHAP zdIRR3K&{NtOu$lLumye-81xsoz|IBu5V3e{qwKOn8r*{r7Y9Tc5QLebS$LjTI7E0S z-Ga&Q!AKOR8v&$UpSt@K0FM>!BTUYz&$$J9yWRqS>3H^io(22}35;6*nnmwf`kv)4 zU2}^RvW56}euv>4;5~MqM7MRjSe*iDRA-l5r{Ar*-6t z&h=JTvha^2ffgC`z~A!-t^$A0D@eNgA;C&O%@34s&vm^hzkbh;m)Gy@etEsW26lU_ zS@7Guft(Zy=g@Kfe$X;v(PzqzT7SFV19)CeU*OU{wtS5kj#&K?xLY1U59lSLXo0_` ztC7y&a-Rv9ORq7y1lpSPJb{uIP|}wIfj!+(Z=kXKR(b$eTK`-(Lj<+$kFxqLi{G;P zHE_1PgHiC;yo%PjGhICsu%@$myS)bP5l^7!1*kr^`n~GF8Stw&pf8uz>-X=O0Dy7t zV1@u%+j;ka7j z05?7J_fZA7ngH~BOV=ZZ8o+zoYm1gS3iw=C@&fYp9?)mO-_o5}#)5#oz@U}UAYjkR z=Ve9%ekI)%Re@ZGYf_1yE+wFjmd$k^$@&8~z}RwEkiZBT)PUY1iX%WjdaR_oj{%fG zIs2lI0)E8(?^%8QepL{#1pdnMzG=G;lKh#RApre;#QK*2UE5c$dDQCXWgkrfJ?r1v zenxk|JGfN=fO-%xf1pR}zdaJD1pzJa^K#7lw*QL~LKwqea?uu06r%RaZ50Dc;3FvmcM+EvgqSKc+FITegk0OD5TMf`9k|+VTMi3<{ zKLU331_nuCp9o~77Z1omnU|}HUR>VHHe&g8JwJD?>Ccv*0e=WXx-bi#k0@7I{rr0m z{70;R%hH#0SCha90ko`o&l4E2<|CjU^&*A{prq3!2fcmRwbp_h_$6H}=x48Cq&e_N zRiH#Ptzcu%)A=FD$Zxos0P@eC?$HD=LIS<@9@s|--~fo5WY9U^J_xANs?TfPJAVPx zO4{%FF=mt~6e1ay1tEnsW8 zGbAvgpY;SD4Srop9fHj9_LGAG{a{`%FlcpGHV2Maehc)PH&7yk(o!P{Qx*8`f`BEN zwf^?|DDd;onq|+wk6M5IomYDRqnZ2%z#Lds@_^sW3o=UrGnU_$Da8g# z-au~YOGHpRW_FzK+5;#(*HL|s07`_>19)p&&l9laMu6WdJ3yeg1d3-$v^x4eLsz9zl$`AZM9oBvAtl&S(H z5S2ildkHz1)bl8nvDY(70M_#;U0?oLx}NWm0A|Uc2mVwEW8~%XYb@znzpr(_O519> z894%e`+bxUYPwO6;EJUL^4j-NA{g-iYF7UW@RtICNghi87O+^-2*5JGFcx9w_~1;1S% z0enlR&!DC|3;dpL#1m){#8Gcxv?^fBm9hsjsZS;~LITVZ7|b7l)u~udzyjKSw;;1* zP_o`Y`Lh-Wu>0oaS}y!3_)Gid<@4+5>Fj53-Gc2(FQ7*7we2;~mvl2kkZ%w#5&+6cKqKWWf#f8T zml^p~D_RQpSwgVoMlJdb_*-OV|Uwdvz#^#e9A%WbIkCrQ0xBPn#@OeBS_eyd=TiqxT%!0oL>KW^Q#tW$Fj!MrH z$iH7j0FNSp68L+%GemHv8Zb%#CGcND0D5CbJb~8!Ir#1OmS<3E`cr)#+$-sFfRE~C z!LPrg1^!&8=goEYKG<@)tyHdb?{XO>h1QEx0(EJh62R?xj|lXAI7$M!n|~DeHK4b2 zrSC1>2+&n$fnL&e+%ZYzOYrIrIw+P4M@Jn7nO;-Z=Ob`&Lm#cxkrnCFmZMv>9;tiC(x4=E?71Um=TwemUU7sO_7QplG tJrd|GBNo4;JL(0rEdNm=I01eD`2Rs5^rb0MT#*0(002ovPDHLkV1fkSO`ZS% diff --git a/forge/src/main/resources/icon.png b/forge/src/main/resources/icon.png deleted file mode 100644 index a8ee30da76cfb8f1e8b1d336ca50b7011afa1ac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31357 zcmXuJby(Ej^FI9A0G4KHq?Rrz=}t-Mlr9xT8l+)qkX8iVf-WgYqew_MDybmd-JQGa zK7PK>_50&obN)LsXU;uyU-y|rLw!wBqI*OD0FY{HsT%_T=-(Cu!0`VW8=tbL{|up* z)?;4)keK-20@*#;fB^sk&{kJ54b0nb3mFrfF=M^7b_+lqwOoySh~MNIc8$UBgvEk3nu3{~%Z}rJlpqos(jxVB8*dh`sUUC38IQIlH61YR9;6w4w zep}V`x~+t1n}ma#i<6e#hCt@=>!Z4cz?x?Fo4_k%4+WC)_n{7~|4<_K+_wbD2W6F$ zN8u(%-gT-FL!WE1-?6M-AuisTbha6Bgh59PMeGfI&f{0po9Kg0YwBW zdwN8xOs|8rb-Vp-7%#orZJo1k)19ex@XKViBUL8kMhs$6iv8JV_x%8@&}m3=+W=)I ztUtBCYXPQA$d~;ZW1^+>>B?XRoJASMmC!LvYbYx@nZ+{qH;a{3F6+qPn_#TWTR+Ca z(t%BOoDkGu*HV4+JY-}ATN1tj`{;8P7#6BgPFw8WS*rxsaXCO$e)Btn_TZrNGYKM5x{IKN*ev|p% zPeruSJ`r{qgVP&JoR?@;bUW6<7qc2maiy2K9a}5{T@#%A-k8tM&Eg{2YX;17vA|HX zqG!@zqk6D5E*qxO-a&oR*!75A1O?oGh#`sm_Ow!|5zid3eUdJ;{`yDz7gZq};ydu} zuNo9L@bBGx7Ce}nZ;){wPJ5TSbx`8$?B1gM{6UJ|raO}o4&^gd@BT7^>~z36{sH)t zI)d3c@ht5Q)uKdq(ik?!pzgo|n#Q{kV_!xYZr}Z7P`LccB1hoj|Al#{5gu(z*r{j} zK`2V^#whn}|5~v&1}N@m)Q0%ZZem#EvV527+;p{+E{94IIx>Nw<$1<6hG;=`2RV>d z)3rmy&Zl^_+sf$9Tba%!s8B1&YwJ@pnqD-)`GYPDiETZfrDWgQD%tYgGtjyYOW6*64q`ZWt6*Uf$b*2IG(zca6?-`K`-0&`(0kIfGZ}1lSGE9UQ$|#lEkq!yIB@$yCUac}3$wBQwMvFBN7lEnhe?`TG~7Rhbon4of+8j3}s`^TMx`KS$n zJsk-rFmefMF%V*YSeT*M5;O1X4w8FW4qm3MZzJo#I=h}x&WCx%%7r^gv8VqZrn1A+ zz70pd*>1{&WpbmL)(JLuj!GInSH%=N<9CQ=FHcW5z~j#I+>eCYJXm{2kFw>R-vY(3 zFJog;Ga3qiPq_$Q)D(p6PLIerRpP3W%Iu`c19s#SI6ws}ZLrG@JIHm@LS;Mo@;BxR z^FLbcrPnpz<9_Ou*&Ioppki*_kn^*lQ^Gi+d8#G9r-aBdJ#Jy50jRK~=xR6y$~d5A zebRJ^hT>7ZJF2<2E!kDk3Gb-@#yn8U4o?G5yjJ8x!dv4yy>0$g!PMdsOJv~a`MeC& zfpPrToKIMXx>xCJfQ%Fanj18oeP#fUIb?|0UE^7H6a0&M1(NMa2@j>N(KZiu_9)~4Os^=FQ>T5U!+%#F8|Kmb>cMG5h1_chE(>vcyAhD!qRF}E=-7CpiRoLotg**_pD&zk#061@|c zPKl%}6x_g={8n3J!@vGMFixO9CU2&~QtqC&<>7euoxA|M{?==cKq^D#EjPX- zDTj-^=#EqQ_oX9voaW->IMMZfQd6mqP`0=CndlCmpntObl*;!b*5NU6)p2_hl z1L{-!(Fdp3hco!*ZbVQ{>Mc#T)##0#*p}oIbkWMSx*b&l@sJ}w-cY>fVLESx0M}>P zhzhr|nh1VNVSK0sZ{wZx=dRmvntFCuf0}&z4@}1g_-s+WWSg6=AjR2g{9;_=w+(d3 z5{LWZlATi^KLtXfP(SJJE+dqkRJ5sT&pmOij5sduc8gpkkFm5 zFDJ@upoS@&YSy&{1IeRZyKAHQVZ;8{Qd&vW6tefy z5FN5nEQIG}u`I-X8*Ez!-{WsJ^_N+jg)vs~2Q)sejWQu%~ zWA_HOc@K2f5O{=PFmbxG8CMFwl6j1L&gn3lrK+?2begEVO6w!$iX4LV2VcoYdV+%W z3%0DbiPDKF(-$H71WvaV%+y3aG-GzN>gQ^oL361zNHR+}HdQ5&WAq*VKTf2*ZZLPY zwj;B1bgpFBPR7d-P9|fN7-;ndX3SfL{|AcT03SRH+7?Bm5h}+A{MTlz@^FZ3`K{rT zWv>{Akt6VNvhRreIxM#W+WaltV%>mn$dc0$)6i^PqYmi2f;qIviKvE;x=*E)5vy@5 z(}vmcNvGO_&Ng4E`mQ~=o)1Hu0#Jvfpqvdn`agF85*V)K4H^nqI*0quFx~H%>Op(T zn}LaF7#F8rv;QoLdXpkjR5U{8O1R#vC;`=gHwP>orxz(WXV|A8Sg`B(<;3LRVB(_c zP8hljQ0jH8$f-oR0{zhML^d`asvp72 zhw%KvEIsr%nhUy2F^KZLHn#rJna%F&p?v>?$%~{xB~4i^Lc8#=-wnJJ37%$ven0E2 z4n8}D9EF@$7}Q6itX!q~Fx`F@e~(V-X=w{ls2__hl=ETXEO^fV*jfriPa-RanFF5> z%7OWeL270W_qDgjULi%Jm#CxCJ`hOtLnWyIE9xFUDfwXxh z(v~KDF0%Y*x-|O(ig1%9Ns)4RC#Wk2?OQ?IdE$l+a3j~3Gs2=8`w~CwbvjQ`cXm)J zK9gPX^mEp=?ab4{%zbyS&SC}M={jD8uNWN7Df%Xar_Zk-aqcxp%RDj;^Rrvvf)}=XFK&o zC_)YgrGxxgYlG>_j-op*<=>~>J(^;Eey`rbUiG5WSvibFI@rsk@>v`@%d@%dh%dV4 zy1FC2-@-LiVK3B3mDm|d)W22}Mns_;yYe|?4xp~{c}pqlq()H-sDrusbcN;TKIksC zTN4y3Kbb=Ai_^rp(P(<4yk>0j#9g-a*DT@g(2Sr)ZIEvY(w8%`S)-HpCK(<-qtWT- zjQ?RGAPY!{Qq!q1m8>m?OV{L!_tdJ1pF8hSOkbe+zG$j;eq#&pXZ1S2m;ar$O!yu_ z&B$C3Av;=tRpYDxN1Tx1KN;i@MtVRz1y~fwUa1?cD-oMt|MPy1Xz%H_3mY{TRRO5k zTbRLLfwBi`dTp5BkFRyanKfU{#!YNgJz#4?jk-mja`7glw znak>cn9pfc1uIHs&kj@m50?CozF6Ldw$~3JR?UD5K}a@+W(|(!3(vo6>T}Mm_1o+xx#ib`0AK+-v?w z2v#Ll3pDFbv8G#QjPj)41^KTqt99M?`o>nq_|aAb_0DQqI`&c zPa{5owQdUp|2{rtP*{x%Gw<8gN!n~Dy7%+%HAkFjOt2v1!$_kg@_LH{7V=i+z~w4) zgt+FhsLN6$Z17^M7JJ94n~pQ8T)eD8Qhb+k8G|DB&*sx2KVgDS4RgX(*PC-go8=F>}H5k%=H4=UgCi2VB^FMoVw zIqngsCqe&*<5DC>l9jMBW^(x60esm_?SX&HMKjSw>?pw)cxvg{m9+x&S{W!`(_0sY zH;b;P3Rn5r6LzCu@4N#awjUpybvEcG-7F@5~MHmQOw7!*fz1Sum=VEExI9h&_UWDPd5# zCGIfI`I{_3_<7Z{Zt_v~r#ZPvxn#|H9pZGL z`Fc+Nv4`HFjex%2ZDjc{({2Zo8=BmjjlU$9krUk>NlE+R&KjR*=$UmNZ!?|ASMLDb*QFxajK zrl&$1*h#K?cK__HNU{uDj3B8N_!kL-fHQ$9T_k}LtJgsOEt9$Z`GIA}R!8(=E4a+z zZjrTXHwk-hTf&nCm(WPaeo8*?$$?NsuwP5Ire(?gQp!;#aZRA6^JVBXs$nEgSF+wwMQP9<*ZdZA9q>LaedD!1Sl_uWc`(;xo9$-lsVFXu^= zgSR_8S!z^Yv)`z$Z7`O!p-KN5E0}L|kmQ@2QYJ#3zsv_a$|Z8@_!1OuGbWJ$3sDPB zGrc!Bx7mc*gn|#$pguVv3xAdKMfn_3UA(Y-4tL(m^Ly?Q6Ccy99)S`V2tJ38QAmx@ z5=G$S##yH%>f0z^VB#Atl0;assW2r~sOeuh{&U`xw~s?-0siIGXvs6Puph*lRUNYRP_SAaYo!~mn)CzD;#nf8W-(%HIZ;U zu_TAj->=JIM8U<&JV-3UeYxd+GS8R2#AF8WTH_kM@7_o&J%!G{3jb|R19y1D&I^A{ z>X*hJxM zuhVcHEqayz9ZxCkDVjdI{Sldw-MtweB$S}CZQ?0t`Hj>8Z} z^7tZi&O5sdwdm&)(DtH0qM3>+!tr0(AVYvMr7<~1Uaae*q`@YKolKv7c^BN~{5gyP zPei|Dq649(UX4Ib)Fk{b9rOD$row?$O>JqMCDK5ao?8t|zabTe@$Jv{@VV{NVU>3Z z-P*G0g~Y>N%z)(obXPh^1kBSy^7?F z{IIOPE!LaoU_-03c|L;VzkYni{C1-vnbcpwRG5tDiDWCGs5Pqyb%s*{u!@M#k{#rI zrv#r0woY{D9U#e>Z6ST1o$`2VJFdN_AM+!;I1=+;XarQpCz0%!K>s znjyO{UPBVG3;C*=>;$RluZOu9m4knv;By{(E;duTn(oPjsBK6f^E}^R; z61We-&!IM@%7>PM2Z-RLg{_VaM9OBhhY&CJF$w>xgadq9HL!m26iIEcB}_Co$*4?D zX_h5W=g~*v9Vz`jblnnq_Mdd96gz+N_~t~EcLsP+Y%o_o{xY-deqY8Kg zdsVomGK`09d$zNF!P4&%bdc<`2y#Sl8%^uFoI#UkfQA&eWW(0qDkKa7?~Qi&eB7Py zD16w4)Ry1Lt>X`^vXVxSd^=u>YE)A*XB%s|(<;_w`J(tH2p(l-s6Ad!BGW6I2Jg~& zg=9MUb9T1fSt5y?u(e!Wb*AjjarAnvoa_}rk>UdJP&?vy z*8=+Rgu0LtigZ@!^1Pc0-AC21i?C(uh?q~iqnpBzY^;aVB`Rf^I+VIuO1Cj-_x#I3gYwka5TDZDYX(5m8*8@dZsBfy!~N z5?UAph;s-heo+39xIxMUO>R^;<>UTMd;xt+s3@c`Bm!QcvC$sG5iaK5-DGGkjx8)n zQ5VC0(Yi=+cDC1fnpaVeNC1S2d!86xCc@Obmr(HysLdOjsG?h_1nN;ZP9|UJ7;?r5 za$vd{FoiOzKbB2!FHz1{A@C2h(;)d-&}rhXoAB^EDYvCEHqgVLL>^P()wl@5uGbW- zycG&Foy)GnzQsWf3mS`px6f2W%>ta8z4fCa8xRq$b6F`@-_IIL&ohw6tG8_Gg|GJ3 zVS-ZtgkL=DBy~AKW!>?cv`bb)4+T2)UDRYdsA9I8$N9IhkY(=;opkv7Wh!TosTx<& z{#n9Mq%Wd)leG!ppU*;4 zym5(TT`$NAAF*HB@FBLQVR}13bRWSV(6W`)7_wPLR`uK=9o&xyyk@N9L=9T!_+}uU zHPV&k^jQb90mn7kzFmPPy=E`SMmDGn9d@=UBVK*jyY>f3BjL5Hhoh~_&vRb}u@h>9 znC#KJh$?X&KfsKP%hkfSMqwHXv7feDl&5DBR`I3XcqptuO*Hj90~E9g7KUrjw#3Io z3uI#$>o{jeX>h*PN_{(j&UChtKf|2ydkaY&9uZk~-)O?g+DP-)u+#E2?J)UUGSewk zObdq56;q|}_veDEQt5Q9j0OGXV*;?96ejIAj^xT!xeUpL9`~@ert0!Ul?uzY`nlmp z-A8tuPlzhsVee(L1QCSWE~ZKnW?sQh`jTBr!8B2mEC_<*c~fireC3U>u?Qpa!;JHU zQT}CWu|H>jVzkIfLSx_$sy!aZ5ShiMzwaH3c~40U{S-Y##mj(Sn%)t!?K{_ixZG}@ zG1n(p)FA1Hb(>lfiT$J+AL13aOgIusBgw(WYnO)K7PR zN+v!f#+;?i&wD?8)RTr;Aq6^@Zbz}y)r<1vggN*ih2T@hEum zn@ZQeTR=Jwe$nHiZz0!wDRu0zfU}FBK4$ZE@nU9pQ1cO3HeA5ahx$_8Bl5~`o+alO zoNWefKFEdKT)T@ny-50_iABU3$uLAPS>^aWcqk72`hdhYAwekG=J~GfYrJ0=wq=JO z>M~QPBBJ$Pwpe59mrMN%joKs(qSDM94jH`XtW_J-8-%^FVB^Q<(hNzICS z(sydnmRzR0Uvk-N5S4U1H=;c{_eQkInsb@Di=Kms%MfphJhD9LN0_Q6-*!&s0!Kns z@ZIAqn}-NY|0_{zvmAkjR~rF3|04A!z|X9Ho2y`*&fm3OZ|!5 zx`)~HIQgy)uBD`qggv*9bFj{x2_P;se zoEN28PVQ7`1GuVDtV?t^V(ZLamxQ{wiJ;aLT@UwMHQpQ(jAlv_1d>58R;FCU=IMNr z%61yy4*$Iu2)!XT{_$8Gyr@4-7kQ)&?YR}=S(BHKG3%YY6vP5 zlm60v{OEF)%AC9v&y=}a zJd($_+3y5-wSqAzjCgU(IDSQNN7C_2qf_SgPEs`k$I>cJ1$)7sE|>N<*TCjZFR%4{ z&a!Rg!!mKrLTkV+uHOvkcy?8BD8PYZ+Sz28j}AjksMg!g(G29g zlprETv2vbv+Kbq!s{xmki+CI%W>Sfts$}F-dN_2Xfp9gm9I#f6wBPYEz>@|b($pUN ze;VS0>vr&_OPx(1%&qm;tMtnpO;cf{+kN)kx2LRr3~a-i5k#|C8Pl||E|Mr?X~m*Z zyAdS37O$-Dsq7)&AMU6qRWhUr$g_G^6hx#+qFm?WMj?Ylz6QagMCJndlkp*hu+`|Y zpEIH>j@!o?O9x@_Vqb~({6A=QeiUWD8he3v4OtIfKNGnElD}!m@?QSGS%4Dsj*Rb| zajN}yy4nTHL3v|pKfVoywT7FXKXf!CUf@`ZP6aGY*>2LYa2wq{zq8A=4nQUd6nI); zSY;kptL~NRUUdbqFRDHZg9r=4kaXni_$Gr_0q=G&k!Kph!Hk5J6~r;3tZdl8KcNEWqeaEN`zJPWkTNmPk`z#F;08osncz_D{*d*~W*ccRlH=V^2VCegh^|xg0vFz`fTmAzIDcXsl ztI}EH6Ap!sl+dSnt=D2>{aJ&uvcb^x8UQ+`6!`R5RrqfV>+P5L;}NNkN3-FpJyORg z%q)+0&_cwtxCKsb@k|>tc4WV_0}1b0y3@|Prty&2di6cr;@HJ)Q{k$B&YgzYv_WSi zvfHLnMURx<{iLM><00+tUGFuFZ$OepR138=k0>6dC_SbS@H z1i(~Isa@mV;X_mlD8A{a_6B17YospZJ`0arTm}ptJJ2>cle0(W!pVmD3p~IpP3?(4 zt4^qv?k=ora=~|U5d-OB3xx`f)^mBo=pPLy%K0*@chp-;O_~pO%PQzp`>G{h~kysmDXJ+)st?mxRuCU}8qQNpn+1|QUBp{Y8$zdv4Cckv%X>ql}&Y32I0+s5~JHf4+@z7q!xKr zHL>Cz!`9Xi@vhbd^#yiFbDewC7DaC7aS|PI%Qo>S@Jvl2{Kk!?r{n5Oc(qNK#Ur-B zdRXS4PM0e1T?fymZmpS9NT74b&6}Ib4#7o5I<7>r;rwbS%?)D?!g~LBe9D zav*u8F(DI3FV#yU&Awd<`L+6tj&)|O*+AN>r2!Me2jK6#p#Q%cww`U-_YVK%9$njF z3O^K9h^q2RB^jv|MhaibO?RLhUb2P@P|= z^v;zm;Mg5h1l0a~dOSS;%s4Oa|ezpm)GrVPKJ;z^K3nPW$GIOP)`%5|cN6hg6`E$h6TF z-H6?w(DnCyF03-$X_%S#6I;|7(fa z@1*$5s{r-&@&;|hEe~p-Mt4*0{jA`&ktT-Wd%~>MV!aE&JIL&!D*Mdo zT!e{5q|vz=sq`E_AO4zi$7IQ=q^g0z$ze%^ATp9#QbU`{_hsHnmQ z-xNgEbEMu^DkN2VMXNC%d-aLMq+ze1;g#^svL0XGsTjB5MPYq5$K~=K5d~?A-_D8O zuawx6*19vEh8KGeOY{$Qp>IlRe6BsQ!xEvGxB>F888@$W7%Dg-)*kzQ;5Y?$m2~~i zpzbf7yP70U; zK7^Fo-J;Hn@K%bPyeAjqr<^a1qHga9k%+%kwK%OyK{e_h-mIybdAgtGgobipYD4l5 zulpjlj6%H=mT(gR5lj(2f6D$!VLQ{--rIBrhrN_pb=0biYP1bjYF|6WA>+M2w~VIQ zV(?qhT>+~fEU*TlzcvCO09F&%cilfcsiL#sy&@6B>S#MNZnRZo_blMiq-Dqw=OG0&Ct6RGF1G81oXDEZiZ}r z{)xZieDewNDn@hZc*iw%EDHZuGI{cU;QWI8Y-^JPE9v^cBTwvoCq+fK2pd~USB~w? zSa3S`ymd(7e>L99>DtfBRPY?*8^eEC6g~g&1YZakFgIA<-iDgagba1j8h(mFUO3BE zdlXjdAOBgp@lX2La*`a-<`!g&R8c_6k?5HeJ$K8iv|xlTOO3RV9=%wK#jWl}q#3M{ z{|ox(B&xIdg3zwq{?Ag+RMYRj6a;ydZsI(1@ss6nK)@+7=mj$8Iym8B>cpJ;qx;;% z9)oP#wNL4j>F!;L>LD!g;L_r`VNPUlL+B0&h+OeqTO1^=?jsN4>_Vce@8{rC4yJ@Q-aF-BPpUU(=kvI-h$`+ z|CFo`9_p`%;H|n7w)mBQl)2nl2Rg{_FJCraFU64!4A%&(V}La91%r>*lC z&D0Pg^hoLG+Rs_V5o>#l;QSk3%Nh%|*-_a?W7S7WL5Bh-be>qs#UWNG5W17H)Jw2X z`sym=UiNZ@GX>Q11*$70SD5_c9i`Cf)bXZDu3(p5By6b1RSgSqP})~~Pfwa8vtOA% zN%0tjgmc0Gn;CUeE&&=Tu^OeUg)#U@smw#IPLL&4Pe`{Fe?5z$q%u|G zjEz?>W%*?91GzItqVa)Ff?~E5e{A8rXAJC}_k~BSuipJzCW9(;0dcT_hLvCHGW%xyqF#{ywV@y3A=4w8l<(?YzZ`R~i$4}jCuR;P z#-zBIJeejoUe}*%(1IkD{t_$QNmF_l$nkN2LrUp2F^{kZ(;qF^rOJ>AK8+Cin*e=M z+wfneS73{5(F79+i$nj2Q;fs%*tf)9K3=`1%T@QsD=!vyZ%tPfy6(#L3on(f1qE$@l0-nrm{<6wzx3TOTid{PDu5Vf@R1 zl#F}^TSHWcnq9g>6U|y-C52|0>7%JFyR^$Zlefm2Z^E=EDnzx&gQy92&Hw$!Ja*TM z)(Qv=j9_~JF8XnjiTIs-G8`#mybD!nQoFbIA@*Gd=(pG#{rxXhY5Pqk3bL@;{In4+ zzcmh?{8>&gTO4J9zlWk&YJx-{{nO9NqKycToI0cyp)p5sMRbsF+|&ELki_L>e&xl6 zVUdKnYMI5yImwvCPvqRfK|d*`y}L<&TeU|VdQMU5ZT1#^d|mfg>ZN1Kcr}fKlv*b2 zoxQ~(Z`|>U_T6)81A`F@yb_k!P^KHV|9%eS5Qk_X$Ei5FX|n;A>OBMu%FSr-AT|1_ zvj-LKE$^U32~j$j&0Ci(e25TLR~pl8@aX--q!h);1UuHpkQw34qQ4Z7j!-X1b)Zb7 zuOVG6r4Y0-Nzeb)=YZ#8+wj{Y-C??72I^35G2jhfCFhO1B;d%8lTQ#Y=1jzXg%(rT zce-4$Q`OjB+HsZXe|69#1VmJY5w&;?Ju-i~3gZ*qY2I>DdQs_zdH=3k(?(ak25i

ha19heJuj4CLbWrG1cdj3NRxZyvKp*M~gzqF&FLXD$wD8oO1Ry2h zYu771$(N~3KaBA6V_k0`l+4Uxxk|qdYlqG zr4d@$xYwm|_lSP{Z5tJw8=>eR93Wl(M>amc1&h`c%)MFaTyX*#*zPi!0l8^lwxvnO zQ!lD?x8hp)?D*gG^{`kSF_CE#G*O>6BmFU(A|d(6mMfj!v-YF1F9}f5dMB?nI1@ zeR{{^qln!qr&4Jo$Yr!3rogpu#P3xBJpq7JH(~~7H?ReV+r1ig0w2%obw%9GSsYK+ zDD_{MUxvq{PJ5rJW{zno*s#mCc!u9Ujm}jxrPX+x7m74Eu5C#a_|nZPLB66Og#v)u z`r~TwKtyY4uFO^yH{r73zm;orH-XN?2eIcgCWEgyiSO^rv>ZDB)V= zYU?k&Wr2I|c%%{v#X*fzVSVIs4loMvD^(J}sEn3cBGGt^~VauFSAIF)4NhnK+8RlC4-`<3lX z;~s!Kx^;_SY+Q#;{iPeH%wI{7HM-7P20y&YsNh|;>U%xqaC%)-aRf1~We1_3HrQ^F z3bzxmMr@w}@`TRwYhv-RhZXgdoooWt_sz(v=7I0L4+`_wjA3-7g&bc6!xWf*=Wb{8 zE_{^;>1W~%X4c5JkII#enKYD&DpW~}7DPavikfv6)U0i#!2B+wMjEtvZ}8;&kw0F) zM)vS`(MDAir0Y~lQIy2AevB+v9b`CJgb>guYdwL&ymnr6iJFEyDwI>c2LK6KyM&gc zAj)6x6DJK**4NtoclQXqAmQjKg+yz?74zKtlYPo+{iRmrLq1H&FG*Ew2s4zh49Mcum44w)4%!Yq+oiFkpqs$r+$JN z_{f|*>EVHcJ;-qseE|pZf~D*8iN+QG!s!X{^hNwW^vTEnbd9!%%O>(f|L#cme?N)k9~hHuR>pv zxcfEyn%XHvJs$r)%V9`IfYFlgbS@D3^5PZKH&my@yeFwkzZvV(R(;r_c*pq%wZ=yIBceR3TCytItx zTNy)Fs*aZvyU{|_D07e=Bax3hM!c1>ICH9MmMcqZk_zysFY3(ZS5qAzvT}in<;&c% zS~Iuu{zv5N1&P&BOd0a!z&FZ}vFea8UEOKEQx4^ceQU@p?G`{}%S$LvEOBtc zr%cs#7p#KhKA#NB0bvLg5@eLtWORCd!Em6)FDq5t)@^wDjwAu8sR8?{x{4!8(c8tltWTse(BP zB#X$!PMSiflin%LZJHlc&dtULk3LLoBk`6b6c6-3M!MHu=S9AV(KE0hlO42^PoETt zZX^7stvqTyNuYo0(LnLmt{^ECG8Sg@9ITm`>AR$l!WWU`mPCup$Rupch7hYapV0)k z6&Gt1{pQ&H=$5Wy&-L9`ZSj-TTm4ne*z9uZt|}#=+wakwV;dW99bVt|AHO7TJWEMW%R;sQt*RR)b1VoLrphR!VYW=hnZT1Cx(=0&e#_Ytert8#=s7-}zEU%X z$jp5U{ zB$&S(e0YkWj}44*px5WK4qU7jP}%ST!0C_sdx|BPC4<3*i%j~j@f{x0F;Uv!CCE&? zZ%>{ViE^;{c~Nc&!A>B9g$w|znAW4|{5DPp53uh6{O6Mn24#fD2T)p3tkSfhL)MGZ z*{vm3N@+Hmx%`T6X%vGK_Uh>cWQ@U*sWNs1_$9tsh>1E> zpg?ZE2K~6j(?vcMM3SsT)b9>#>o_=jXwW^yd|+Y3990v)u`|q&!|zcGSZlA90(ljt zyWbKP3A9yF_QsHTv%llHe!AKd>pAZ|LHKG*U({x1+uRfRHSg8=i;-osmtQugBL;p? zo&CB9S`E(_S`Q!p**4*+K*&htNvuxD<0E*^Px95TpuL??0!@5nCKB2+246Rcij~}2 zs(biM%?PL?bDH9bq~TKF+GZ!E0z2!z{lU$BGRFN>NW~hf7rm@awUm*;AZ8GKz4mGn zLjRx5ho8$1kJ`XYP=4|2bZQ>PTwFs@cm{9(M#;o)4}+F&;Szhb$R^CY3(d8uZ|`2N z$v9J(eH6(V;rWn|#vH)#HS$nQ=1V{`jr3)9mHkQ!@1x=adF52VlQMa8YIHk|J@F0* zRNNRx&HqI52(T2)Hrp`qiQf*9 z8^5dq%#;Tar;pP$4IlFkVqe;X7v(>>9k$|RnyAj!I*h(j?m`d>aee!YM;MIeZ?T|m zqx*hA@T4`%Mi-FIG^tS=v&gy{sm+TkOY=lL1f9GbhwC1Tu9F|t;z^eoL+hr78Wh=x z|I=zEUgL>6te_dB0s)(9z8@9^ed^|J;|e-&UIv2iZp0CEJ<&te zia8Nro~OTsjK#`%S3lZu?l-W;8_NNF)0N@zOjBar{0 zX7R6}Xj1qys)wHlIO-Ax5(e^H0yJ9lu_AHC)Hl5w*%svBN^!bzp9(BlcVT%-t`-l2 z@m5MsV4NOmy~uMqqdQ}0=a@# z!(1Cq>o%XUXb@UyI@`gkSk=nUkIn-b<^qqaZBBB+vqe$krBE6-KF}vsXMU@4Jmdvz zPlx{e(B-~@Ir?cl{3y}vo49%TOYiZV+5Dm7mu~sN4M(#Zz0cnKSM~EL)IdJknF5~l zndn8oL^cUG_q88aSE0a+MS9lo+3L%>^cf1ZVLD{+!xnB+P43(ZFJ4cweC?MOE7rZ# z?so2q@d^3s2=**IU09!E+;0%q8GBsYoY*DLb*V1EdBaNBezYLHPra_-w5r~&`h?Dh z)lb_PdRJpVGeX4>U)=jC*b1zCyd(=%?SFl*(XcPmhK!&fdX?f>MSa7t4*_lV!{WS- zx+tHV*s7BdM|0q1@+E(~j}OYqZL~bj=p|Q-lbTVO`EN2s+u`Cmh4CBvWf$0JB5*Wx zQ2>usT1~xV5it7XwAt5Sbl%Kc7A6r)_K_akcAa#D(>9bvzNmwNcdZd!Vn~iTxc)|ihQhGUN#P{^x_Q5e1duULlJ&49yXGkSNZxi zWBRQj^fPG`Y3zL3aaCJXPC!y`(Rumg$!6?f@o3z1E-Nk7Fs)havmNsT~;mZmJ@-7DWwU^X7IP#7HB?A(M?D%Jp6X34G;*2erQ#K~#rZ zkDh2Gv-@})>ui)hC4Z?ABI8c+Rv?7H)$!2b^&XDv?ljC^@nqk3f&H@sayRIL!n|Ii zL@<1f4ws#uI)q>X_bN*gKQVWBQqB`Qq{kk0b}zX{o;R2KhghDQQN}7OX5lCodt?j#wn=nnEVgg*=9q$NRha)^@DQ4Ma$|U^aFg`A~h3D|?s?0rqnfly%FEpDC zHht1-U)4*mey8J*`L*xa!vC8E(5}4WyJQ;jW_#qj(go)ik3O}E{yjm~b8Nc#{{;*> z^TpoH1B(`nszGd4MP~$KO;UnIpgpO;^dvVct7yBE21d9$jz0|UDsdH0G z+;?%D1n*sN{h1i?a+^iO?~6=|p)VvBDsL5d*5B2}_H0@t_h?ZBNM> z9%8=DU?X5Mouop8bKKY@Ofs7X)m)O0Pa(!FSs4*%P0jb}hU7RY>>(5;zEMnwXwdt) zE1|YCgkYn5CUoJZg&9H~Kv*7(Y(O^V;EDqP9|xRR!lRpuo!Z)hgdpl$!jF$ZK%V+_ z70B)trJB}<_n-puKByWBj!8*_)s-fOO)V<+Ul3+KDw})n6lMfHI@e z;A$p@D#7ot(8+Bf09_zQZs03Tm_%15?Oy>UQ5PMR9o);1^AMKNDbOy}HEE+w!(*EJ zEkvR6PXd9P127j-p20RI#i${_dW3j`gaEh6j%vIQA`eg~BtU>QWQZoPfm@p@Q*w>N-t*{V@(Bytly|X3E~5 zy%$ZF5J!-HDM~HzRPI8GyE{_)Fa6O!Qa0yxJ{_e8%tUp1kyMJLP9lmzkgQ}&INs1VMSG)EeWo*sek4I zTvifp@1?n>9+m|N4YFhblbZIlSQC-OUm(2d9bWToB>+pxRo@M;Z(a9;tPOYSMo)v7 zuiqtJ#m6T;`@0Pex;W$@_+`hHg3KRlnHtHAza7ka4LM;F?gPgzJ7T5#9 zJqch|$izJugR}4f@4@bHPXf3n0lY%s^e1u`hC$1H?f2m9!aV}82b={8-oYswSUc6g z0uf&kaHl1(vmin4zcd)n%f8CNYN9JD@)j`Vwpfya3(-mi5^7&T$f4pEwk&Sj7vVf5 z5Kp$|n}j;>(2#$?xJ6lwCd-EDV(s%v#V4`?lu>CLb3kl-X&r&d&RDjbIJOx3dj2?w zq+fo#g(bMmsiYjl06E0cRBDS`tX#~4&z|3XOWh1|sR1V~K!PJZv0Qw`qDoLlw1z{2 zid$6VQI!^n6eK0cle!JbLba9jK2i4l^O>!-!^ZUl%ZMexYEMz>jHm!1HaWhN?%gEO zd4t^$La7Sp6qO2GrEt_Dmh>21-#tmRr~r5sFgzR-dRv4Ui^5|D2;M?ci2>)Ven+=- zk@WlUfHJ(wV10TklAvH%B1ui?s>C{{#eDQZ8vu2TMrv?{LDt!J*o^DX7x^e&<@=+DJs&z_n}bv#WxnVD{B9(ECq$o2=ki6dvh3|sulNCvg^}6#Me@Xu;G}Gprnfx zxvn}>GPb2~5UlA|%ncwE>ZK)fk_27VUlw3R4QhD&r{DY)sL)`=Jq2cO+%-)-jZ#J& z=!ri<<175&|N2WZ`__7D$gUu^)f-uY7m6ui9tES+Ntb+6TOuwp(cnhR4tT z=zkl+W_#k12TXOD!{NSGA&3CSc*~c66B??}q8^r!irIXy@39fJ+}cvBq&J9inem-zU!~&ST`VfZkOH+#mY6P(BN19>GvB(xbW^upRn*w0AnI? z25+n(umvhMEvVFcUQ?>1GL}pYuQj;7)(P z+ev_80M$N$KRKK^31H07GzOCrfS?bmArzGr`+&A|(o{g!Sp?!j@=6S+EkLQ(JrRZK zvm+t2XAJT4yrzr`902>R~NybM6TOTS+K~D0?!wSgi zHB{^MV5bmIwuoj}OU`>sL=p-s70sLjED|CK8>lL(G+*A8^Xb`{t}!RyzI43xgt)k7 zjT5XwO74oo!kXzfiwkfj_hue`)3_i1S1u+9mXD`xthT@=AkFbz%UyvGueO>jkpL{Vv^ZA)5&rr&etF>D z9RAP4c!&3zxmeQ7m293H3h!LXyYVPY1Os?Wg!*4MMO6pZz zwOBa?OAANdzCnkC=FT+hPu3SAtNs&^u2##pHr=?4gvN1)$IRxci;bEj0#DLO4%@_T z27#43!!0QRME0LUtqZog5};lc^N}INQ0;IX6mVz|>q+ek`>OzsKoUeCQK*|g3Fqo8 zjx5jL5SIJMUlpvXw!aVY?BF61f_Q;rg+C?y2N0-txloBHqmd)48Q6`%xIM-7w{qP* zEIR3#A;J(iD-uKj(PoZc)$BH?IB?^6Ilk$t$FqU@$r`VB>`}8|MGc4)D^?H$!lq}# z`B4TD4R4}?mgKvjGqQ7v5sDjcHH|Kx_sU68rW#wa$I= zY?Xsh(Akh6GQ&6?i*&IJ3QJ}J0#k}=KG0WMA~N@9xHhivOQdLo0a-RCt3gP%RP{{v z=~6cVISZLFPIA8luUZCo7g|EJ=c%#BdI

7KoUGA9beKtdXX^n>aq2ip z0`=A^=v|5~n8Ib;$a$UrUc_Fc^NMD9*JnQ?e&BRzbZyDr{2p)L{KwQu2Lc)d(#(Nf zLP>XV0~W7g9gPFwXz;uXqw~fyVw8)}>cBE8Ee>sA^rp`p~Y{iiOt#>9WqcX`Ru zJsRo*%tC6~%?+4KF)g*~T?MrrW> zZ|`e*Y-y6Sp2)23JM$APjr=#@pIFFZ!OYUK5F0Q8Sr`^0q!BBSELN=8dF_>vm<93* zHhjpEg=CEoBmRKr-mc7G5gB!&^5kb#oj(2E>1b7-I#F34r>dSOA|oR+BW*!liX?HJ zbUgtn>QDRUugQ`W&kZQ5@;CxmaF;^5la#T?aG*f&TR?_EizEPRM29#cW+qA*lNdm#GUJ5NGkxR$TGa#&zbj`67ZifxT=hF ztUv%3O^-c%K$$=bfFq3(x|m%tz34UDYi68 zdu&bkxW5ZqFs!3%$&v2J+uQ`Xg}%d3er!`m*9U9d>6=%13lwR>ADM%**Pu}S8hevj z0CL`4w)v>nbn=CCCQh>()j0h|z4X>E2*l98NMbeP(faV@ZWIC5>7kf40-KIiia_4q zFxuYhy*@_T#fr8|v^OKY7knV~z9bhA0Bv~+@Fv}o#H~|C%jd=eqz>wW;Ke$vCo2i~18j!?6=7xKNiRJ?QmaM5J)VZ509z)6lw*;WUJ91*Y2)F7$ z5K^TWZzN&n{^NAc?Zvb29T{E6uy3i@4pVPJ=~)holBL@Rf!Xl}3^9IleV+nMmy7)E+V2oHd|M+%9?MxwRmTCg=DK>P>!wD{uR%-GPypyi3 zo8s19n@h|*4vC0MQcp^FFdNh1Q1l{i)g8xawxBe5s!2a?c>v^btjav#Sro5zcX9$p zw&$FC#>3D#U9fzBIW5L*Sva|(*Wl9IWb zflKT222Av#oq4kTQ{KI8-=!b`7q^fKigLfVg9xwC;=cV$mVZoNnD^N94!LSG?di zSiDS=y>P!Tz!ox?=sBmdbyrTmX`vM_p0>$W-!m&4z}AeqvXg3Dr#mm8)l>%#(p@={ z!^&TzTQDcXm&HfKO9kGxz^n&5Msyw#z_P4x$4Ta(zne2YMEKMLPQVZ` z@CWANcyZTSOF%igfxOrfz?&wjQ|$60$?n(f+)yc z(%&z@x-HUE<@*;!NB&96vx?8=N+tztE75YH0yu1A&`>bz@+5UJ22ts6z zZq>Opxhl?)j6-4W7n8$Fl-`>Nrgpf9KNllQ;2c5rOC6y~>D&a~JUSu;RyZ`u~@r_^b7JrmxFWwd2Q7o}! z^!X@r9TP?T^?&04TjGvsw zCV~AtKR5HJl;vY-;)fCVMos$Np$($-~HX;^IKWjVSNMs;XnD8GN?)% zvxP(v^g4KwC>fss?&2-WvI3s*>%aQT@r!~J{9rYHaS^XRT|Wo7L3fh2e~F|f zl86Y&>N$dr!H~uX!nttVyl@ag3V{%URLI7}rRwIGL?!7w089?_0TP#%JHV?ymxEq) zW}Ckt2(h{aU*ju&!#|c($SsH-5k1MUSusW4R|P-BrSbt`^;i(_!VYf}FQZE_##cAj z6^J=V5W^7`3V0>ym$v$lh(shfNl!&`dwme#JBsi@styhjFHSxer+|p5t7!6MGQ+fW z4F*yg^|5E5{qeuh3P+(o&%H`=0OeX3uLDiBR@mKMd$s)U4Su-}NxoR)f&hn=2R#79 zVQ&#Y%6EVy%UN}dW=Oo}$;|_(S^f<4n=o&q)|`>xXzMG!AJj%Wd|=<+VnhbC0N^nN zek-$sDrkRj9c4zk;Y&3|TQhbe;6(FD5aJ5bd?=Ml(eny8?5i&_041enO1%KU*_&Yl zauYvg;czGb#PQa8!t8E?mo`LF-fxwAzqvJOe8VRRCy#52f2l< z@b?ISd21#nV`#|Vj`M7}uLATufL#^fg0>rnH0cMnPF{C7w(Xrf!d&AQ1&ii-(cuX*VL#vt(Zd7ynEU%G+*k+pHV!}yt9CMxLAMl; zW-FNTXX7q3W<>k-#OyVTe%0YFu!E)@OGV%QWby% z*yJ>S0C&kSyMEvUO`Ah*=~i~1iaRRS$zjG=pLEvz1gWYinG^O2STag+`fg{_`A9Nj z^Yk}sHNcKx@IijsQU$t|Qr$ns?qmp~LM&18P;-g2x113l85G1*(B`xEmTjclh(aP^ zdYNU^YC!Y!?eECJ`rg@a?^y+SVPO3rZ+(*Ynw^+9rOChZ^Bs}`p zI}c66HSwda20*OUQ%I^y_kGxDm-J5n5K~~$408qydK#0m5n#lj0P?Jm_TV)gU!N_@ z9r$~Zexvsnyg;^d%~qc#mx5jq+Ham6(o|Z&>sy*i3i9bF!lxj7Y4DJmoU?$0xcKeb zkOs2cs{TuAE=!3^`oN>36yK0z++CBp$I2cvZFLhMA&#dAup|t$bLt6qy?pHRa?sj> zxc|2r&|^FmP4C4;!)p~~#r9kX1X|PirKK%4 zSgV7%JfYf}OS>7cq`$KLANNgoY5}!sAnnIDW^jRTJ+F{j16ZTWRA@u2OLGdWhTJ-e zKmuv0y_bM3*ta{68FX_aGzYlV{CJ1ENI!=;*OzdQuU6qL0DHjt)x4)$dpF(X2;7o} ztZ!esw0DY4IPuhOahk`S2Qc>Z$Xxahl0^f0#T4L9Rp5#$KuvNh=2MG6swE(RWHub9 z!)ncsaB-$hofue{#Fh2{b2>je;I6ZX5S9ixy>uJ9x%V0zw8Mcv zZFVHSq-$+Ygb?LC-mmX+&Yp}10So#oJb(q?zzE>YUZmMlA@9YK&h2&REC@k(mgveF zbub2*=22P&`u*X-ES;IO?R@aX7Vs0ild<@|P=H$;;`&WG=A=O?9Ru({T;v50xLGcT zhy^miSqcmhQ)t`r{A(`r~2;4J8U#p3n)( z3jhA^gZTG;kE>$=cqGBi7po`0)$ zcz>)lCk@N>|Ni@bncw$9;XnOTY}N1>_v^K#S0;pE{oVtxu>jTef`Bn%8zX)DRRcl8 zi>eTjWpIbD@dYlXXwFbQa)IOIGt3SsN=W-Ue8F34%8X#!X6Il$7TQ$}oQrTsed$xR z=4LIAyM^qu8`S^-q?uI+sSEam3EX*7Nt*R?4LBN!M3B*(g}g%=_+{7XQ+X^pLX(Uz zA{mXdB;cNGeK%3u&0tQy>wb2zm>TfpZ$Uus?+;!Y2OvL??LDabSe-3rkL}zgRfv@q zeB~GX?fM0jMtN|hkr*>!#{$|dd_O3}a4AE_alnsV0H^Wvg7f>fU6a!FUhe*S`7-P{&i9-Y1(sXD+;%Evb#LgqJAJW?7M zwaJI+zQ=DTNb~u5ICI!LvXstYbjP~`k1V!&P$P!3LXh^{)Dy7ZC0E4pSYP(L{cKYg zc<%;xFSN4dqAax8_xXz3e^}DVwL7(TkRgs+N^~m~`p~RS_eZ(l7$@b?1W>}QsXDkL ztZ~{~NXw<|pcf{ye9HSsvGsu5Fo}N`auP#l31O}~a4Rm5GmMriRSnWHpE(>9@cdNb z-&WD8$0q@!j=Ow&3(O)R;^5duPSLeci%EuR(2lClh@qwg+ks)I{ zir<3nz6vmU;?bpay!6AL{T_T;py$e`2ZpxiUBhCj?7_v|UC0cO&+G$Sk_T``K3~A+ z$|nJ%4sey(w*FDVNIEwR?9r3e_9^WD?9LFMFW__KlYns?cNcl;_f>$>302pqOH_3# zg*wis2k_f1p9G9^;J$za>OsIWo64R*nx_ru~OvwYmJz}KGLBLW(awJMQ zseAUY=vP=EPD^a0!hT9wK0PqZW9Q;!*_|x!7F%NzKr;O7KAQDc(&hUn-4#=dz0x<3 zi!wjJ#Hh22Td^z=U*jU3bq=J3Gcf{voY7roBr?EEcstk@LrfsZ{se-HGQsBP_yU0( z*2q|v6^5uP-!9L=>(sPLd7XO@kzmub0^b83!wl8-( z85e+>{IUzSnJ5sDr2h$lion_qPM41)?Lwx zum_fqF(5=yUSbB~!PK^AN5Pp{z|RhAoM@CiJ0C;zqm6{`mR8Ibmf zA_Ui-yPze{_5k7~U21>e@+d$*k~~K6GPwUTW$|l)!BVW?sO48s*v~x9V1LA? ze99Ra0ZPk#?}74cnNh+yNJ_UM!Bl!dz>?11$g|+j!Jd~fI{)MW9nMfEe z;8;sB_*NnVm67~_E5M%z0rk3oE#c^MJb_O+EoXq&0(uL8S6F@fIa)<1lq+Wf_6|fe z7AH6h{=7P19~iJrhWRY{tO9%oqQB@;fDwYhajJWx>?2$UZF7_eWY5|@&sAvSR zkPJ;7u?=Z$g(HAylm)Cm+XG-`xEQenfZv0Rp6jrc<*1823j8A;?&vjCKs`hZNmp+L z=$$y1S`WaZb^emR^m+FAI|cC=7`IW>BEX9S+et5(Zk(m*!O6To*YuD2tgSkvVl@b}$_9=B10@}F) zC67QKmVU-~NfqFgz5<@dUdV7O^o8HBEWjIiAilsM0^kafFnqdJoxRsZ21mv>yuf*u z{so&kE}uTl=Xr@RJ4B8$L8$|1V0L61GaQ+L7(lu&G8v~{I}_ks_&ELXXTUwGpYa50 zKy6v_GuONG02H`DIpZ(am$ubh^4Y3D4g4i9V0049jx2bS!Mw~2v(^6W`jb7uhZT+q zYa~QCP*}h#gIM~@b6`Z0I03~7pN=mx1rrb%6rv1_!7_O^r}}_%_t!#1a3Qv@uXp`M z7Xl$hxxeJXP)>z~JTZnwL2?G;U_j>& zyuu;ifBn~A0>oJ8=8yY|nI{IWszZO6{`i0K7xJ8e{iiN9eN8vJ9JHKGGN^qYb@NMv zF#+lsLTRT0*IfOQs3%~hMGPf?+x=|Sphg1Ldr@mt(pkOHU6Dr+B4LHc8^1^_AibE8 zQ=efyJvo^@c>4~x0K7#Hmu4w;905mw4!Du?z(wE(08jWBF1S8}9MC0Q3-~47Rp74y ztOU~5rv+{87&Q_oS^e6z=SyunYZU;vfkxMBU~lyZECIfBj2gi6V~vo2K6v}x>T)kY zUl!n!D#S_)enT(#4ZeWldb^D)piXmi1O|ba;gTD?@Cw3$H+m5_*#&SUP)sijGo%oB^0$;E07&@&tCvxQJV!Z2I=%ygNeF;g$`d3GkjpNJc&3URfog+71lXfF z{r0;_39vPN5BxQK3*^9<3tl6FS@5?=pylGvl333JNZ;=>0aZ!?nj^UaquqvU9>G!Y z+bTg`J+S3Y3jqw7)*3QsW@HC%2G0aTtSyriXUQLsk%Y1r|F=!_WdzzpVAn?gZ;#yr zdk@$Z@Dz155*Q(b*0t1tJ?jNzy8ULK@LY+d8r6-Y&Gtl%3Ox!^fGSw*=^#{wNu=01wQ006l`JeU1=9%leNJ zMQOi=r?HO#l-6@O(jC~!Y~(-RK0^Y!u2x@|%roS>c{ zpttR+rRAcxENTn+=EtbFBb1sRagWuD@Nssv4l8$4cO$3kU!Xh^ZO?0EmEN1~GxPFMtD>9EhdqEjp@j+o#^t3XD9+LFkA#m?)QxZfJn5>A>f$dFPJ6i2Prv#OS&VV z2io8o0a6d>GvIGo`4%bE09@K%UlS4ICsr>0txi`x#jR= z>_WE1AtHGIvd-kNh5z;a)iRF~y1&M!$Oypma=9h15x`Y|zk&ox>n-s22%<+CBMaAJ z0Q$WK`kAs;N|EBZ}+jX1O2*gws001z7 zqXWH>^aa?!PEw@^D0&f1ndz+KfL(XxXGsobyFTItjBIO>fL=oj{599R1iGHSRi+2@ z9znH8qv8?VCj#}rT_!>GakXH7tnH#d!QQ8&w2qP7QLn$wC-K9iFqOra8Cp+ zFpo<9CLbYzGl@X?c3mzY02d=1;zj^5nSD;}{qiMZn@8O3s{_oC+<@d6&=tu^!@}=) zuG%GZ0G^i_)#aW=N!KEUk_T{x1g-#okF08BQ9Cx5CI-ogz)Id!*ke+ap0|*L+^&~& zc~#&D_%G^B=$*Lz6ajY9j!zzvDWWGLmwA=AVB)0eW^ugxl z1KLC|O9(SdjR;0bpjEC1{@QU$I9V7KzVD4c;NuJh{e5Op@4-24?XY z%zW$3{Uh*U`s3#Wpr1#GptRkBqNF=Z0yV2Y1OCzLXc0%v^4G{HE&CWiZjtl80WHAP zdIRR3K&{NtOu$lLumye-81xsoz|IBu5V3e{qwKOn8r*{r7Y9Tc5QLebS$LjTI7E0S z-Ga&Q!AKOR8v&$UpSt@K0FM>!BTUYz&$$J9yWRqS>3H^io(22}35;6*nnmwf`kv)4 zU2}^RvW56}euv>4;5~MqM7MRjSe*iDRA-l5r{Ar*-6t z&h=JTvha^2ffgC`z~A!-t^$A0D@eNgA;C&O%@34s&vm^hzkbh;m)Gy@etEsW26lU_ zS@7Guft(Zy=g@Kfe$X;v(PzqzT7SFV19)CeU*OU{wtS5kj#&K?xLY1U59lSLXo0_` ztC7y&a-Rv9ORq7y1lpSPJb{uIP|}wIfj!+(Z=kXKR(b$eTK`-(Lj<+$kFxqLi{G;P zHE_1PgHiC;yo%PjGhICsu%@$myS)bP5l^7!1*kr^`n~GF8Stw&pf8uz>-X=O0Dy7t zV1@u%+j;ka7j z05?7J_fZA7ngH~BOV=ZZ8o+zoYm1gS3iw=C@&fYp9?)mO-_o5}#)5#oz@U}UAYjkR z=Ve9%ekI)%Re@ZGYf_1yE+wFjmd$k^$@&8~z}RwEkiZBT)PUY1iX%WjdaR_oj{%fG zIs2lI0)E8(?^%8QepL{#1pdnMzG=G;lKh#RApre;#QK*2UE5c$dDQCXWgkrfJ?r1v zenxk|JGfN=fO-%xf1pR}zdaJD1pzJa^K#7lw*QL~LKwqea?uu06r%RaZ50Dc;3FvmcM+EvgqSKc+FITegk0OD5TMf`9k|+VTMi3<{ zKLU331_nuCp9o~77Z1omnU|}HUR>VHHe&g8JwJD?>Ccv*0e=WXx-bi#k0@7I{rr0m z{70;R%hH#0SCha90ko`o&l4E2<|CjU^&*A{prq3!2fcmRwbp_h_$6H}=x48Cq&e_N zRiH#Ptzcu%)A=FD$Zxos0P@eC?$HD=LIS<@9@s|--~fo5WY9U^J_xANs?TfPJAVPx zO4{%FF=mt~6e1ay1tEnsW8 zGbAvgpY;SD4Srop9fHj9_LGAG{a{`%FlcpGHV2Maehc)PH&7yk(o!P{Qx*8`f`BEN zwf^?|DDd;onq|+wk6M5IomYDRqnZ2%z#Lds@_^sW3o=UrGnU_$Da8g# z-au~YOGHpRW_FzK+5;#(*HL|s07`_>19)p&&l9laMu6WdJ3yeg1d3-$v^x4eLsz9zl$`AZM9oBvAtl&S(H z5S2ildkHz1)bl8nvDY(70M_#;U0?oLx}NWm0A|Uc2mVwEW8~%XYb@znzpr(_O519> z894%e`+bxUYPwO6;EJUL^4j-NA{g-iYF7UW@RtICNghi87O+^-2*5JGFcx9w_~1;1S% z0enlR&!DC|3;dpL#1m){#8Gcxv?^fBm9hsjsZS;~LITVZ7|b7l)u~udzyjKSw;;1* zP_o`Y`Lh-Wu>0oaS}y!3_)Gid<@4+5>Fj53-Gc2(FQ7*7we2;~mvl2kkZ%w#5&+6cKqKWWf#f8T zml^p~D_RQpSwgVoMlJdb_*-OV|Uwdvz#^#e9A%WbIkCrQ0xBPn#@OeBS_eyd=TiqxT%!0oL>KW^Q#tW$Fj!MrH z$iH7j0FNSp68L+%GemHv8Zb%#CGcND0D5CbJb~8!Ir#1OmS<3E`cr)#+$-sFfRE~C z!LPrg1^!&8=goEYKG<@)tyHdb?{XO>h1QEx0(EJh62R?xj|lXAI7$M!n|~DeHK4b2 zrSC1>2+&n$fnL&e+%ZYzOYrIrIw+P4M@Jn7nO;-Z=Ob`&Lm#cxkrnCFmZMv>9;tiC(x4=E?71Um=TwemUU7sO_7QplG tJrd|GBNo4;JL(0rEdNm=I01eD`2Rs5^rb0MT#*0(002ovPDHLkV1fkSO`ZS% From 6d662c26d7bc65df25d48cbbaacb86d37a16cb63 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 20:02:42 +0900 Subject: [PATCH 124/617] f --- .../main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java | 4 ++-- .../ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java index 116c45205..24d01a9e5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java @@ -20,12 +20,12 @@ public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, } public static ItemStack craft(Recipe recipe, Inventory inventory, World world) { - return recipe.craft(inventory, world.getRegistryManager()); + return recipe.craft(inventory); } public static ItemStack getOutput(Recipe recipe, World world) { - return recipe.getOutput(world.getRegistryManager()); + return recipe.getOutput(); } public enum CompatibilityCraftingRecipeCategory { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index 6422163aa..bf0c763dd 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -81,7 +81,7 @@ public static Text empty() { public static class TextFieldUtil { public static void setFocused(TextFieldWidget widget, boolean focused) { - widget.setFocused(focused); + widget.setTextFieldFocused(focused); } } } From 851fca214e0329adddc7ca0207614a5484ae0763 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 20:04:56 +0900 Subject: [PATCH 125/617] fix4 --- .../main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java | 1 - 1 file changed, 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java index 24d01a9e5..b6914356e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java @@ -5,7 +5,6 @@ import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.ShapelessRecipe; -import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; From 61da423a52977a733e0825fdd6eb8b228b991441 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 20:07:00 +0900 Subject: [PATCH 126/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ba8e80169..335fbe2c9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.0-1.18 +mod_version=1.5.1-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 445abed6e8bc4ccade7373c9ef0a572342a9086f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 22:38:12 +0900 Subject: [PATCH 127/617] Fix API --- .../java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java | 4 ++-- .../java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java index b6914356e..65ea734a2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java @@ -18,12 +18,12 @@ public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, return new ShapelessRecipe(id, group, output, input); } - public static ItemStack craft(Recipe recipe, Inventory inventory, World world) { + public static ItemStack craft(Recipe recipe, C inventory, World world) { return recipe.craft(inventory); } - public static ItemStack getOutput(Recipe recipe, World world) { + public static ItemStack getOutput(Recipe recipe, World world) { return recipe.getOutput(); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java index 5ee8d96ed..15b91fc3f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java @@ -2,6 +2,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Position; +import net.minecraft.util.math.Vec3d; public class PosUtil { public BlockPos flooredBlockPos(double x, double y, double z) { @@ -11,4 +12,8 @@ public BlockPos flooredBlockPos(double x, double y, double z) { public BlockPos flooredBlockPos(Position pos) { return new BlockPos(pos); } + + public static BlockPos flooredBlockPos(Vec3d pos) { + return new BlockPos(pos); + } } From 44f4c3efa534bc30773634df984514ec976fbc98 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 22:48:23 +0900 Subject: [PATCH 128/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 335fbe2c9..8256d232a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.1-1.18 +mod_version=1.5.2-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 7dfd37039f0b207108d8f576ccc055430c8ed54d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 23:04:58 +0900 Subject: [PATCH 129/617] fix pos api --- .../java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java index 15b91fc3f..20e69b370 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java @@ -5,11 +5,11 @@ import net.minecraft.util.math.Vec3d; public class PosUtil { - public BlockPos flooredBlockPos(double x, double y, double z) { + public static BlockPos flooredBlockPos(double x, double y, double z) { return new BlockPos(x, y, z); } - public BlockPos flooredBlockPos(Position pos) { + public static BlockPos flooredBlockPos(Position pos) { return new BlockPos(pos); } From a427320e8a6a3612b16bd5b1e0baf8cefa753c62 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 15 Mar 2023 23:06:27 +0900 Subject: [PATCH 130/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8256d232a..8d7e23b6c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.2-1.18 +mod_version=1.5.3-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 0774d317ddffe2e2da78aab93735397cb765866b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 17 Mar 2023 14:33:57 +0900 Subject: [PATCH 131/617] fix&gradle --- build.gradle | 2 +- .../pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java | 2 +- fabric/build.gradle | 3 ++- forge/build.gradle | 3 ++- .../pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java | 9 ++++----- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 7a0b39dd0..241ca090c 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ subprojects { mappings "net.fabricmc:yarn:${rootProject.yarn_mappings}:v2" // https://mvnrepository.com/artifact/org.yaml/snakeyaml - implementation 'org.yaml:snakeyaml:1.33' + implementation 'org.yaml:snakeyaml:2.0' } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java index 07b22497f..a0221f1a1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java @@ -25,7 +25,7 @@ public CreativeTabBuilder(Identifier identifier) { this.identifier = identifier; } - public CreativeTabBuilder create(Identifier identifier) { + public static CreativeTabBuilder create(Identifier identifier) { return new CreativeTabBuilder(identifier); } diff --git a/fabric/build.gradle b/fabric/build.gradle index 4d019730d..a2d3ed01c 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -28,7 +28,8 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } - shadowCommon 'org.yaml:snakeyaml:1.33' + shadowCommon 'org.yaml:snakeyaml:2.0' + include 'org.yaml:snakeyaml:2.0' } processResources { diff --git a/forge/build.gradle b/forge/build.gradle index 1c0cfa0b4..025f6ec4f 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -34,7 +34,8 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } - shadowCommon 'org.yaml:snakeyaml:1.33' + shadowCommon 'org.yaml:snakeyaml:2.0' + compileOnly 'org.yaml:snakeyaml:2.0' } processResources { diff --git a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java index 30d38550d..be5f0e929 100644 --- a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java +++ b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java @@ -1,8 +1,10 @@ package ml.pkom.mcpitanlibarch.forge; +import dev.architectury.platform.Platform; import dev.architectury.platform.forge.EventBuses; import ml.pkom.mcpitanlibarch.MCPitanLibarch; import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; +import ml.pkom.mcpitanlibarch.forge.client.MCPitanLibarchForgeClient; import ml.pkom.mcpitanlibarch.test.ExampleMod; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @@ -12,15 +14,12 @@ public class MCPitanLibarchForge { public MCPitanLibarchForge() { // Submit our event bus to let architectury register our content on the right time EventBuses.registerModEventBus(MCPitanLibarch.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); - if (PlatformUtil.isDevelopmentEnvironment()) - EventBuses.registerModEventBus(ExampleMod.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); + //if (PlatformUtil.isDevelopmentEnvironment()) + // EventBuses.registerModEventBus(ExampleMod.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); MCPitanLibarch.init(); - /* if (Platform.getEnv().isClient()) FMLJavaModLoadingContext.get().getModEventBus().addListener(MCPitanLibarchForgeClient::clientInit); - - */ } } \ No newline at end of file From e97714ecdd470f48ce0cf190f15592fd834efec2 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 17 Mar 2023 14:58:30 +0900 Subject: [PATCH 132/617] use jsonconfig --- .../main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java index 88896b8db..df8f887e4 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java @@ -1,7 +1,7 @@ package ml.pkom.mcpitanlibarch; import ml.pkom.easyapi.config.Config; -import ml.pkom.easyapi.config.YamlConfig; +import ml.pkom.easyapi.config.JsonConfig; import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; import java.io.File; @@ -12,9 +12,9 @@ public class MCPitanLibarch { public static final String MOD_ID = "mcpitanlibarch"; - private static final File configFile = new File(PlatformUtil.getConfigFolder().toFile(), MOD_ID + "/blacklist.yml"); + private static final File configFile = new File(PlatformUtil.getConfigFolder().toFile(), MOD_ID + "/blacklist.json"); - public static Config config = new YamlConfig(); + public static Config config = new JsonConfig(); private static boolean configLoaded = false; public static List itemBlackList = new ArrayList<>(); From f42f7269ad46e972c9a32405ee682c7349b01900 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 17 Mar 2023 15:02:43 +0900 Subject: [PATCH 133/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8d7e23b6c..1731e9a28 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.3-1.18 +mod_version=1.5.4-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 0a76599efa0a169f8c0becff370228e6d3c6037e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 18 Mar 2023 17:49:03 +0900 Subject: [PATCH 134/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1731e9a28..968c1bd33 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.4-1.18 +mod_version=1.5.5-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 9614797396d7954bde204c71e86bf12a004bd64f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 18 Mar 2023 17:44:27 +0900 Subject: [PATCH 135/617] add APIs --- .../api/block/CompatibleBlockSettings.java | 193 ++++++++++++++++++ .../mcpitanlibarch/api/block/ExtendBlock.java | 4 + .../api/gui/slot/CompatibleSlot.java | 61 ++++++ .../api/item/CompatibleItemSettings.java | 64 ++++++ .../mcpitanlibarch/api/item/ExtendItem.java | 4 + 5 files changed, 326 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java new file mode 100644 index 000000000..ec685ce5d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java @@ -0,0 +1,193 @@ +package ml.pkom.mcpitanlibarch.api.block; + +import net.minecraft.block.*; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.DyeColor; + +import java.util.function.Function; +import java.util.function.ToIntFunction; + +public class CompatibleBlockSettings { + private final AbstractBlock.Settings settings; + + public CompatibleBlockSettings(Material material, MapColor mapColor) { + this.settings = AbstractBlock.Settings.of(material, mapColor); + } + + public CompatibleBlockSettings(Material material, DyeColor dyeColor) { + this.settings = AbstractBlock.Settings.of(material, dyeColor); + } + + public CompatibleBlockSettings(Material material) { + this.settings = AbstractBlock.Settings.of(material); + } + + public CompatibleBlockSettings(Material material, Function mapColor) { + this.settings = AbstractBlock.Settings.of(material, mapColor); + } + + public static CompatibleBlockSettings of(Material material, MapColor mapColor) { + return new CompatibleBlockSettings(material, mapColor); + } + + public static CompatibleBlockSettings of(Material material, DyeColor dyeColor) { + return new CompatibleBlockSettings(material, dyeColor); + } + + public static CompatibleBlockSettings of(Material material) { + return new CompatibleBlockSettings(material); + } + + public static CompatibleBlockSettings of(Material material, Function mapColor) { + return new CompatibleBlockSettings(material, mapColor); + } + + public CompatibleBlockSettings(AbstractBlock block) { + this.settings = AbstractBlock.Settings.copy(block); + } + + public static CompatibleBlockSettings copy(AbstractBlock block) { + return new CompatibleBlockSettings(block); + } + + public CompatibleBlockSettings air() { + settings.air(); + return this; + } + + public CompatibleBlockSettings blockVision(AbstractBlock.ContextPredicate predicate) { + settings.blockVision(predicate); + return this; + } + + public CompatibleBlockSettings postProcess(AbstractBlock.ContextPredicate predicate) { + settings.postProcess(predicate); + return this; + } + + public CompatibleBlockSettings solidBlock(AbstractBlock.ContextPredicate predicate) { + settings.solidBlock(predicate); + return this; + } + + public CompatibleBlockSettings suffocates(AbstractBlock.ContextPredicate predicate) { + settings.suffocates(predicate); + return this; + } + + public CompatibleBlockSettings mapColor(MapColor color) { + settings.mapColor(color); + return this; + } + + public CompatibleBlockSettings dropsLike(Block source) { + settings.dropsLike(source); + return this; + } + + public CompatibleBlockSettings breakInstantly() { + settings.breakInstantly(); + return this; + } + + public CompatibleBlockSettings dropsNothing() { + settings.dropsNothing(); + return this; + } + + public CompatibleBlockSettings dynamicBounds() { + settings.dynamicBounds(); + return this; + } + + public CompatibleBlockSettings hardness(float hardness) { + settings.hardness(hardness); + return this; + } + + public CompatibleBlockSettings noBlockBreakParticles() { + settings.noBlockBreakParticles(); + return this; + } + + public CompatibleBlockSettings requiresTool() { + settings.requiresTool(); + return this; + } + + public CompatibleBlockSettings noCollision() { + settings.noCollision(); + return this; + } + + public CompatibleBlockSettings nonOpaque() { + settings.nonOpaque(); + return this; + } + + public CompatibleBlockSettings resistance(float resistance) { + settings.resistance(resistance); + return this; + } + + public CompatibleBlockSettings strength(float strength) { + settings.strength(strength); + return this; + } + + public CompatibleBlockSettings strength(float hardness, float resistance) { + settings.strength(hardness, resistance); + return this; + } + + public CompatibleBlockSettings ticksRandomly() { + settings.ticksRandomly(); + return this; + } + + public CompatibleBlockSettings sounds(BlockSoundGroup blockSoundGroup) { + settings.sounds(blockSoundGroup); + return this; + } + + public CompatibleBlockSettings luminance(ToIntFunction luminance) { + settings.luminance(luminance); + return this; + } + + public CompatibleBlockSettings jumpVelocityMultiplier(float jumpVelocityMultiplier) { + settings.jumpVelocityMultiplier(jumpVelocityMultiplier); + return this; + } + + public CompatibleBlockSettings slipperiness(float slipperiness) { + settings.slipperiness(slipperiness); + return this; + } + + public CompatibleBlockSettings velocityMultiplier(float velocityMultiplier) { + settings.velocityMultiplier(velocityMultiplier); + return this; + } + + public CompatibleBlockSettings emissiveLighting(AbstractBlock.ContextPredicate predicate) { + settings.emissiveLighting(predicate); + return this; + } + + public CompatibleBlockSettings offset(AbstractBlock.OffsetType offsetType) { + settings.offset(offsetType); + return this; + } + + public CompatibleBlockSettings allowsSpawning(AbstractBlock.TypedContextPredicate> predicate) { + settings.allowsSpawning(predicate); + return this; + } + + @Deprecated + public AbstractBlock.Settings build() { + return settings; + + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index ad9ed8822..43bf81f8e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -26,6 +26,10 @@ public ExtendBlock(Settings settings) { super(settings); } + public ExtendBlock(CompatibleBlockSettings settings) { + super(settings.build()); + } + public void scheduledTick(BlockScheduledTickEvent event) { super.scheduledTick(event.state, event.world, event.pos, event.random); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java new file mode 100644 index 000000000..c0f459a08 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java @@ -0,0 +1,61 @@ +package ml.pkom.mcpitanlibarch.api.gui.slot; + +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; + +public class CompatibleSlot extends Slot { + public CompatibleSlot(Inventory inventory, int index, int x, int y) { + super(inventory, index, x, y); + } + + public void callSetStack(ItemStack stack) { + super.setStack(stack); + } + + public void callSetStackNoCallbacks(ItemStack stack) { + super.setStackNoCallbacks(stack); + } + + public ItemStack callGetStack() { + return super.getStack(); + } + + public ItemStack callTakeStack(int amount) { + return super.takeStack(amount); + } + + public boolean callHasStack() { + return super.hasStack(); + } + + @Deprecated + @Override + public void setStack(ItemStack stack) { + callSetStack(stack); + } + + @Deprecated + @Override + public void setStackNoCallbacks(ItemStack stack) { + callSetStackNoCallbacks(stack); + } + + @Deprecated + @Override + public ItemStack getStack() { + return callGetStack(); + } + + @Deprecated + @Override + public ItemStack takeStack(int amount) { + return callTakeStack(amount); + } + + @Deprecated + @Override + public boolean hasStack() { + return callHasStack(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java new file mode 100644 index 000000000..c45c32721 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java @@ -0,0 +1,64 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import net.minecraft.item.FoodComponent; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; + +public class CompatibleItemSettings { + private final ExtendSettings settings = new ExtendSettings(); + + public static CompatibleItemSettings of() { + return new CompatibleItemSettings(); + } + + // ~1.19.2 + public CompatibleItemSettings addGroup(ItemGroup itemGroup) { + settings.addGroup(itemGroup); + return this; + } + + // 1.19.3~ + // identifier: Item ID + public CompatibleItemSettings addGroup(ItemGroup itemGroup, Identifier identifier) { + settings.addGroup(itemGroup, identifier); + return this; + } + + public CompatibleItemSettings maxCount(int maxCount) { + settings.maxCount(maxCount); + return this; + } + + public CompatibleItemSettings maxDamage(int maxDamage) { + settings.maxDamage(maxDamage); + return this; + } + + public CompatibleItemSettings maxDamageIfAbsent(int maxDamage) { + settings.maxDamageIfAbsent(maxDamage); + return this; + } + + public CompatibleItemSettings food(FoodComponent foodComponent) { + settings.food(foodComponent); + return this; + } + + public CompatibleItemSettings rarity(Rarity rarity) { + settings.rarity(rarity); + return this; + } + + public CompatibleItemSettings recipeRemainder(Item recipeRemainder) { + settings.recipeRemainder(recipeRemainder); + return this; + } + + @Deprecated + public ExtendSettings build() { + return settings; + + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java index e38b9852d..6b1a613c3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java @@ -18,6 +18,10 @@ public ExtendItem(Settings settings) { super(settings); } + public ExtendItem(CompatibleItemSettings settings) { + super(settings.build()); + } + @Deprecated @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { From 349d101e9739d5b977bcda6f357caabd55b3ca3d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 18 Mar 2023 17:46:04 +0900 Subject: [PATCH 136/617] 1.19.3api --- .../pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java index ec685ce5d..a6202b810 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java @@ -176,7 +176,7 @@ public CompatibleBlockSettings emissiveLighting(AbstractBlock.ContextPredicate p } public CompatibleBlockSettings offset(AbstractBlock.OffsetType offsetType) { - settings.offset(offsetType); + settings.offsetType(offsetType); return this; } From 1cb796d47afe3547c9d1830497a4c84309bd9f7d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 18 Mar 2023 17:48:29 +0900 Subject: [PATCH 137/617] 1.19.2s --- .../pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java index a6202b810..7b46efba7 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java @@ -106,7 +106,7 @@ public CompatibleBlockSettings hardness(float hardness) { } public CompatibleBlockSettings noBlockBreakParticles() { - settings.noBlockBreakParticles(); + //? return this; } From 14d13b7647a37c99171bc1b754ea2dbe5b04ca07 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 18 Mar 2023 17:51:43 +0900 Subject: [PATCH 138/617] 1.18.2api --- .../mcpitanlibarch/api/block/CompatibleBlockSettings.java | 2 +- .../pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java index 7b46efba7..440553e6f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java @@ -176,7 +176,7 @@ public CompatibleBlockSettings emissiveLighting(AbstractBlock.ContextPredicate p } public CompatibleBlockSettings offset(AbstractBlock.OffsetType offsetType) { - settings.offsetType(offsetType); + // ? return this; } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java index c0f459a08..5aece980d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java @@ -14,7 +14,7 @@ public void callSetStack(ItemStack stack) { } public void callSetStackNoCallbacks(ItemStack stack) { - super.setStackNoCallbacks(stack); + //super.setStackNoCallbacks(stack); } public ItemStack callGetStack() { @@ -35,12 +35,6 @@ public void setStack(ItemStack stack) { callSetStack(stack); } - @Deprecated - @Override - public void setStackNoCallbacks(ItemStack stack) { - callSetStackNoCallbacks(stack); - } - @Deprecated @Override public ItemStack getStack() { From fae76d5da91f7da12e4ddbabc59c2bbf2831b7e5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Mar 2023 22:53:16 +0900 Subject: [PATCH 139/617] api --- .../mcpitanlibarch/api/util/BlockUtil.java | 11 ++++++++++ .../mcpitanlibarch/api/util/ItemUtil.java | 21 +++++++++++++++++++ .../mcpitanlibarch/api/util/SlotUtil.java | 18 ++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SlotUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index c7639fa7a..67b95b1e0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -1,5 +1,6 @@ package ml.pkom.mcpitanlibarch.api.util; +import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; import ml.pkom.mcpitanlibarch.api.tag.MineableToolTags; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; @@ -53,4 +54,14 @@ public static List getAllBlocks() { } return blocks; } + + @Deprecated + public static Block of(AbstractBlock.Settings settings) { + return new Block(settings); + } + + public static Block of(CompatibleBlockSettings settings) { + return of(settings.build()); + } + } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index 54c172675..c5df1ac44 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -1,6 +1,9 @@ package ml.pkom.mcpitanlibarch.api.util; +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; @@ -42,6 +45,24 @@ public static Item fromId(Identifier identifier) { return Registry.ITEM.get(identifier); } + @Deprecated + public static BlockItem ofBlock(Block block, Item.Settings settings) { + return new BlockItem(block, settings); + } + + public static BlockItem ofBlock(Block block, CompatibleItemSettings settings) { + return ofBlock(block, settings.build()); + } + + @Deprecated + public static Item of(Item.Settings settings) { + return new Item(settings); + } + + public static Item of(CompatibleItemSettings settings) { + return of(settings.build()); + } + public static List getAllItems() { List items = new ArrayList<>(); for (Item item : Registry.ITEM) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SlotUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SlotUtil.java new file mode 100644 index 000000000..ac3ea4bc4 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SlotUtil.java @@ -0,0 +1,18 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; + +public class SlotUtil { + public static void setStack(Slot slot, ItemStack stack) { + slot.setStack(stack); + } + + public static ItemStack getStack(Slot slot) { + return slot.getStack(); + } + + public static void takeStack(Slot slot, int amount) { + slot.takeStack(amount); + } +} From 8f5b86106d35eabd74dd4b3fdb0c01d7897d0ade Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Mar 2023 23:00:03 +0900 Subject: [PATCH 140/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 968c1bd33..2c82a8f0b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.5-1.18 +mod_version=1.5.6-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From eaac19b4747d5ce543cca02a99fbaf23e2205178 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 22 Mar 2023 14:10:09 +0900 Subject: [PATCH 141/617] add API --- .../client/registry/ArchRegistryClient.java | 77 +++++++++++++++++++ .../mcpitanlibarch/api/entity/Player.java | 46 +++++++++++ .../event/block/BlockScheduledTickEvent.java | 17 ++++ .../api/event/block/BlockUseEvent.java | 31 ++++++++ .../event/item/ItemAppendTooltipEvent.java | 40 ++++++++++ .../api/event/item/ItemFinishUsingEvent.java | 30 ++++++++ .../api/event/item/ItemUseEvent.java | 19 +++++ .../api/event/item/ItemUseOnBlockEvent.java | 27 +++++++ .../api/event/item/ItemUseOnEntityEvent.java | 39 ++++++++++ .../mcpitanlibarch/api/item/ExtendItem.java | 39 +++++++++- .../api/util/ScreenHandlerUtil.java | 18 +++++ 11 files changed, 381 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemAppendTooltipEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java index 431d34779..7a41a5a19 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java @@ -1,12 +1,30 @@ package ml.pkom.mcpitanlibarch.api.client.registry; +import dev.architectury.event.events.client.ClientTextureStitchEvent; +import dev.architectury.registry.client.level.entity.EntityRendererRegistry; +import dev.architectury.registry.client.particle.ParticleProviderRegistry; import dev.architectury.registry.menu.MenuRegistry; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; +import net.minecraft.client.particle.ParticleFactory; +import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.texture.Sprite; +import net.minecraft.client.texture.SpriteAtlasTexture; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleType; +import net.minecraft.screen.PlayerScreenHandler; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.random.Random; + +import java.util.List; +import java.util.function.Supplier; public class ArchRegistryClient { public static > void registerScreen(ScreenHandlerType type, ScreenFactory factory) { @@ -16,4 +34,63 @@ public static > { S create(H handler, PlayerInventory inventory, Text text); } + + public static void registerParticle(ParticleType type, ParticleFactory factory) { + ParticleProviderRegistry.register(type, factory); + } + + public static void registerParticle(ParticleType type, DeferredParticleProvider provider) { + ParticleProviderRegistry.register(type, spriteSet -> provider.create(new ExtendedSpriteSet() { + @Override + public SpriteAtlasTexture getAtlas() { + return spriteSet.getAtlas(); + } + + @Override + public List getSprites() { + return spriteSet.getSprites(); + } + + @Override + public Sprite getSprite(int age, int maxAge) { + return spriteSet.getSprite(age, maxAge); + } + + @Override + public Sprite getSprite(Random random) { + return spriteSet.getSprite(random); + } + })); + } + + public static void registerEntityRenderer(Supplier> type, EntityRendererFactory provider) { + EntityRendererRegistry.register(type, provider); + } + + @FunctionalInterface + public interface DeferredParticleProvider { + ParticleFactory create(ExtendedSpriteSet spriteSet); + } + + public interface ExtendedSpriteSet extends SpriteProvider { + SpriteAtlasTexture getAtlas(); + + List getSprites(); + } + + public void registryClientSpriteAtlasTexture(Identifier identifier) { + registryClientSprite(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, identifier); + } + + public void registryClientSpriteAtlasTexture(Sprite sprite) { + registryClientSprite(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, sprite); + } + + public void registryClientSprite(Identifier atlasId, Identifier identifier) { + ClientTextureStitchEvent.PRE.register(((atlas, spriteAdder) -> spriteAdder.accept(identifier))); + } + + public void registryClientSprite(Identifier atlasId, Sprite sprite) { + ClientTextureStitchEvent.PRE.register(((atlas, spriteAdder) -> spriteAdder.accept(sprite.getId()))); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index c851f91c0..b1523c947 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -1,5 +1,8 @@ package ml.pkom.mcpitanlibarch.api.entity; +import dev.architectury.registry.menu.ExtendedMenuProvider; +import ml.pkom.mcpitanlibarch.api.gui.ExtendedNamedScreenHandlerFactory; +import ml.pkom.mcpitanlibarch.api.util.ScreenHandlerUtil; import net.minecraft.block.BlockState; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.PlayerAbilities; @@ -7,9 +10,12 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandler; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; +import net.minecraft.util.Hand; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -17,6 +23,7 @@ import java.util.OptionalInt; import java.util.UUID; +import java.util.function.Consumer; /* PlayerEntity helper @@ -100,6 +107,29 @@ public OptionalInt openGuiScreen(World world, BlockState state, BlockPos pos) { return openGuiScreen(state.createScreenHandlerFactory(world, pos)); } + public boolean isServerPlayerEntity() { + return this.getEntity() instanceof ServerPlayerEntity; + } + + public void openExtendedMenu(NamedScreenHandlerFactory provider, Consumer bufWriter) { + if (isServerPlayerEntity()) + ScreenHandlerUtil.openExtendedMenu((ServerPlayerEntity) this.getPlayerEntity(), provider, bufWriter); + } + + public void openExtendedMenu(ExtendedMenuProvider provider) { + if (isServerPlayerEntity()) + ScreenHandlerUtil.openExtendedMenu((ServerPlayerEntity) this.getPlayerEntity(), provider); + } + + public void openExtendedMenu(ExtendedNamedScreenHandlerFactory provider) { + this.openExtendedMenu((ExtendedMenuProvider) provider); + } + + public void openMenu(NamedScreenHandlerFactory provider) { + if (isServerPlayerEntity()) + ScreenHandlerUtil.openMenu((ServerPlayerEntity) this.getPlayerEntity(), provider); + } + public void insertStack(ItemStack stack) { getInv().insertStack(stack); } @@ -194,4 +224,20 @@ public BlockPos getBlockPos() { public Vec3d getPos() { return getEntity().getPos(); } + + public ItemStack getStackInHand(Hand hand) { + return this.getEntity().getStackInHand(hand); + } + + public void heal(float amount) { + this.getEntity().heal(amount); + } + + public float getYaw() { + return this.getEntity().getYaw(); + } + + public float getPitch() { + return this.getEntity().getPitch(); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java index 183e8a7f4..1edb26048 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java @@ -19,4 +19,21 @@ public BlockScheduledTickEvent(BlockState state, ServerWorld world, BlockPos pos this.pos = pos; this.random = random; } + + public BlockState getState() { + return state; + } + + public BlockPos getPos() { + return pos; + } + + public ServerWorld getWorld() { + return world; + } + + @Deprecated + public Random getRandom() { + return random; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java index 71b78bc9c..59f3bb3a2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java @@ -4,6 +4,7 @@ import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -16,6 +17,7 @@ public class BlockUseEvent extends BaseEvent { public Player player; public Hand hand; public BlockHitResult hit; + public ItemStack stack; public BlockUseEvent(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { this.state = state; @@ -24,5 +26,34 @@ public BlockUseEvent(BlockState state, World world, BlockPos pos, PlayerEntity p this.player = new Player(player); this.hand = hand; this.hit = hit; + this.stack = this.player.getStackInHand(hand); + } + + public BlockHitResult getHit() { + return hit; + } + + public ItemStack getStack() { + return stack; + } + + public Player getPlayer() { + return player; + } + + public Hand getHand() { + return hand; + } + + public World getWorld() { + return world; + } + + public BlockState getState() { + return state; + } + + public BlockPos getPos() { + return pos; } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemAppendTooltipEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemAppendTooltipEvent.java new file mode 100644 index 000000000..a1a21932a --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemAppendTooltipEvent.java @@ -0,0 +1,40 @@ +package ml.pkom.mcpitanlibarch.api.event.item; + +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.client.item.TooltipContext; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ItemAppendTooltipEvent extends BaseEvent { + public ItemStack stack; + public World world; + public List tooltip; + public TooltipContext context; + + public ItemAppendTooltipEvent(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { + this.stack = stack; + this.world = world; + this.tooltip = tooltip; + this.context = context; + } + + public ItemStack getStack() { + return stack; + } + + public World getWorld() { + return world; + } + + public List getTooltip() { + return tooltip; + } + + public TooltipContext getContext() { + return context; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java new file mode 100644 index 000000000..a0dc5c5ac --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java @@ -0,0 +1,30 @@ +package ml.pkom.mcpitanlibarch.api.event.item; + +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemFinishUsingEvent extends BaseEvent { + public ItemStack stack; + public World world; + public LivingEntity user; + + public ItemFinishUsingEvent(ItemStack stack, World world, LivingEntity user) { + this.stack = stack; + this.world = world; + this.user = user; + } + + public ItemStack getStack() { + return stack; + } + + public World getWorld() { + return world; + } + + public LivingEntity getUser() { + return user; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java index b99647d33..7174881f9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java @@ -3,6 +3,7 @@ import ml.pkom.mcpitanlibarch.api.entity.Player; import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; import net.minecraft.world.World; @@ -11,10 +12,28 @@ public class ItemUseEvent extends BaseEvent { public World world; public Player user; public Hand hand; + public ItemStack stack; public ItemUseEvent(World world, PlayerEntity user, Hand hand) { this.world = world; this.user = new Player(user); this.hand = hand; + this.stack = user.getStackInHand(hand); + } + + public ItemStack getStack() { + return stack; + } + + public Hand getHand() { + return hand; + } + + public World getWorld() { + return world; + } + + public Player getUser() { + return user; } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java index 590a61877..fbff538a5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemUsageContext; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import javax.annotation.Nullable; @@ -17,6 +18,7 @@ public class ItemUseOnBlockEvent extends BaseEvent { public BlockHitResult hit; public ItemStack stack; public World world; + public BlockPos blockPos; public ItemUseOnBlockEvent(PlayerEntity player, Hand hand, BlockHitResult hit) { this(player.world, player, hand, player.getStackInHand(hand), hit); @@ -29,6 +31,7 @@ public ItemUseOnBlockEvent(World world, @Nullable PlayerEntity player, Hand hand this.hit = hit; this.stack = stack; this.world = world; + this.blockPos = hit.getBlockPos(); } public ItemUsageContext toIUC() { @@ -38,4 +41,28 @@ public ItemUsageContext toIUC() { public boolean isClient() { return world.isClient(); } + + public Player getPlayer() { + return player; + } + + public World getWorld() { + return world; + } + + public BlockHitResult getHit() { + return hit; + } + + public BlockPos getBlockPos() { + return blockPos; + } + + public Hand getHand() { + return hand; + } + + public ItemStack getStack() { + return stack; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java new file mode 100644 index 000000000..d27ca6563 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java @@ -0,0 +1,39 @@ +package ml.pkom.mcpitanlibarch.api.event.item; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; + +public class ItemUseOnEntityEvent extends BaseEvent { + + public ItemStack stack; + public Player user; + public LivingEntity entity; + public Hand hand; + + public ItemUseOnEntityEvent(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) { + this.stack = stack; + this.user = new Player(user); + this.hand = hand; + this.entity = entity; + } + + public ItemStack getStack() { + return stack; + } + + public Hand getHand() { + return hand; + } + + public Player getUser() { + return user; + } + + public LivingEntity getEntity() { + return entity; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java index 6b1a613c3..a95f4216d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java @@ -1,17 +1,22 @@ package ml.pkom.mcpitanlibarch.api.item; import ml.pkom.mcpitanlibarch.Dummy; -import ml.pkom.mcpitanlibarch.api.event.item.ItemUseEvent; -import ml.pkom.mcpitanlibarch.api.event.item.ItemUseOnBlockEvent; +import ml.pkom.mcpitanlibarch.api.event.item.*; import ml.pkom.mcpitanlibarch.mixin.ItemUsageContextMixin; +import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; +import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; + +import java.util.List; public class ExtendItem extends Item { public ExtendItem(Settings settings) { @@ -35,12 +40,30 @@ public ActionResult useOnBlock(ItemUsageContext context) { return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())); } + @Deprecated + @Override + public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { + return onFinishUsing(new ItemFinishUsingEvent(stack, world, user)); + } + + @Deprecated + @Override + public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) { + return onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand)); + } + @Deprecated @Override public boolean hasRecipeRemainder() { return hasRecipeRemainder(new Dummy()); } + @Deprecated + @Override + public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { + appendTooltip(new ItemAppendTooltipEvent(stack, world, tooltip, context)); + } + /** * item right click event * @@ -60,7 +83,19 @@ public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { return super.useOnBlock(event.toIUC()); } + public ItemStack onFinishUsing(ItemFinishUsingEvent event) { + return super.finishUsing(event.stack, event.world, event.user); + } + + public ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { + return super.useOnEntity(event.stack, event.user.getEntity(), event.entity, event.hand); + } + public boolean hasRecipeRemainder(Dummy dummy) { return super.hasRecipeRemainder(); } + + public void appendTooltip(ItemAppendTooltipEvent event) { + super.appendTooltip(event.stack, event.world, event.tooltip, event.context); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java index d0784238b..e384b4eb3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java @@ -1,13 +1,19 @@ package ml.pkom.mcpitanlibarch.api.util; +import dev.architectury.registry.menu.ExtendedMenuProvider; +import dev.architectury.registry.menu.MenuRegistry; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.slot.Slot; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.registry.Registry; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; public class ScreenHandlerUtil { public static DefaultedList getSlots(ScreenHandler screenHandler) { @@ -25,4 +31,16 @@ public static List> getAllScreenHandlerTypes() { } return screenHandlerTypes; } + + public static void openExtendedMenu(ServerPlayerEntity player, NamedScreenHandlerFactory provider, Consumer bufWriter) { + MenuRegistry.openExtendedMenu(player, provider, bufWriter); + } + + public static void openExtendedMenu(ServerPlayerEntity player, ExtendedMenuProvider provider) { + MenuRegistry.openExtendedMenu(player, provider); + } + + public static void openMenu(ServerPlayerEntity player, NamedScreenHandlerFactory provider) { + MenuRegistry.openMenu(player, provider); + } } From 88c707bd5cc970f0198bd99490766c06332d5130 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 22 Mar 2023 16:22:37 +0900 Subject: [PATCH 142/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2c82a8f0b..b343a33c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.6-1.18 +mod_version=1.5.7-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From e177ac7c7f12a25b36985f5bc7d7e52b2d42ecee Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 22 Mar 2023 16:23:40 +0900 Subject: [PATCH 143/617] downdate --- .../mcpitanlibarch/api/client/registry/ArchRegistryClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java index 7a41a5a19..a3c047772 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java @@ -21,9 +21,9 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.minecraft.util.math.random.Random; import java.util.List; +import java.util.Random; import java.util.function.Supplier; public class ArchRegistryClient { From 6ff9582b9571dd1d6a230936efb4f1a12134935d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 31 Mar 2023 14:08:13 +0900 Subject: [PATCH 144/617] fix api --- .../client/registry/ArchRegistryClient.java | 8 ++--- .../api/item/CreativeTabManager.java | 33 ++++++++++++++++--- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java index a3c047772..6422c587f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java @@ -78,19 +78,19 @@ public interface ExtendedSpriteSet extends SpriteProvider { List getSprites(); } - public void registryClientSpriteAtlasTexture(Identifier identifier) { + public static void registryClientSpriteAtlasTexture(Identifier identifier) { registryClientSprite(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, identifier); } - public void registryClientSpriteAtlasTexture(Sprite sprite) { + public static void registryClientSpriteAtlasTexture(Sprite sprite) { registryClientSprite(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, sprite); } - public void registryClientSprite(Identifier atlasId, Identifier identifier) { + public static void registryClientSprite(Identifier atlasId, Identifier identifier) { ClientTextureStitchEvent.PRE.register(((atlas, spriteAdder) -> spriteAdder.accept(identifier))); } - public void registryClientSprite(Identifier atlasId, Sprite sprite) { + public static void registryClientSprite(Identifier atlasId, Sprite sprite) { ClientTextureStitchEvent.PRE.register(((atlas, spriteAdder) -> spriteAdder.accept(sprite.getId()))); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java index 19ef2d843..2163de1bd 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java @@ -11,6 +11,7 @@ public class CreativeTabManager { private static final List bookingItems = new ArrayList<>(); + private static final List bookingStacks = new ArrayList<>(); // グループ予約済みアイテム public static class BookingItem { @@ -22,12 +23,30 @@ private BookingItem(ItemGroup itemGroup, Identifier identifier) { } } + // グループ予約済みアイテムスタック + public static class BookingStack { + public ItemGroup itemGroup; + public ItemStack stack; + private BookingStack(ItemGroup itemGroup, ItemStack stack) { + this.itemGroup = itemGroup; + this.stack = stack; + } + } + public static void allRegister() { - if (bookingItems.isEmpty()) return; - for (BookingItem bookingItem : bookingItems) { - bookingItem.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); - //CreativeTabRegistry.append(bookingItem.itemGroup, ItemUtil.fromId(bookingItem.identifier)); - bookingItems.remove(bookingItem); + if (!bookingItems.isEmpty()) { + for (BookingItem bookingItem : bookingItems) { + bookingItem.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); + //CreativeTabRegistry.append(bookingItem.itemGroup, ItemUtil.fromId(bookingItem.identifier)); + bookingItems.remove(bookingItem); + } + } + + if (!bookingStacks.isEmpty()) { + for (BookingStack bookingStack : bookingStacks) { + bookingStack.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, bookingStack.stack)); + bookingStacks.remove(bookingStack); + } } } @@ -45,4 +64,8 @@ public static void register(Identifier identifier) { public static void addItem(ItemGroup itemGroup, Identifier identifier) { bookingItems.add(new BookingItem(itemGroup, identifier)); } + + public static void addStack(ItemGroup itemGroup, ItemStack stack) { + bookingStacks.add(new BookingStack(itemGroup, stack)); + } } From a336737b2e992e8723c4428bcc4263232cdf0ab8 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 31 Mar 2023 14:08:13 +0900 Subject: [PATCH 145/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b343a33c6..512556125 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.7-1.18 +mod_version=1.5.8-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 4e363bf8282d9c2955747bdf8e94b7c09c39ce36 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Apr 2023 12:36:24 +0900 Subject: [PATCH 146/617] fix 1193 req --- .../api/item/ArmorEquipmentType.java | 45 +++++++++++++++++++ .../api/item/CompatibleArmorMaterial.java | 36 +++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ArmorEquipmentType.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleArmorMaterial.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ArmorEquipmentType.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ArmorEquipmentType.java new file mode 100644 index 000000000..867245177 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ArmorEquipmentType.java @@ -0,0 +1,45 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import net.minecraft.entity.EquipmentSlot; +import org.jetbrains.annotations.Nullable; + +public class ArmorEquipmentType { + // 1.19.4~ ArmorItem.Type + + public static ArmorEquipmentType HEAD = new ArmorEquipmentType(EquipmentSlot.HEAD); + public static ArmorEquipmentType CHEST = new ArmorEquipmentType(EquipmentSlot.CHEST); + public static ArmorEquipmentType LEGS = new ArmorEquipmentType(EquipmentSlot.LEGS); + public static ArmorEquipmentType FEET = new ArmorEquipmentType(EquipmentSlot.FEET); + + protected final EquipmentSlot slot; + + protected ArmorEquipmentType(EquipmentSlot slot) { + this.slot = slot; + } + + @Deprecated + public EquipmentSlot getSlot() { + return slot; + } + + @Nullable + public static ArmorEquipmentType of(EquipmentSlot slot) { + switch (slot) { + case HEAD -> { + return HEAD; + } + case CHEST -> { + return CHEST; + } + case LEGS -> { + return LEGS; + } + case FEET -> { + return FEET; + } + default -> { + return null; + } + } + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleArmorMaterial.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleArmorMaterial.java new file mode 100644 index 000000000..0fe13c286 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleArmorMaterial.java @@ -0,0 +1,36 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.item.ArmorMaterial; +import net.minecraft.recipe.Ingredient; +import net.minecraft.sound.SoundEvent; + +public interface CompatibleArmorMaterial extends ArmorMaterial { + int getDurability(ArmorEquipmentType type); + + int getProtection(ArmorEquipmentType type); + + @Override + @Deprecated + default int getDurability(EquipmentSlot slot) { + return getDurability(ArmorEquipmentType.of(slot)); + } + + @Override + @Deprecated + default int getProtectionAmount(EquipmentSlot slot) { + return getProtection(ArmorEquipmentType.of(slot)); + } + + int getEnchantability(); + + SoundEvent getEquipSound(); + + Ingredient getRepairIngredient(); + + String getName(); + + float getToughness(); + + float getKnockbackResistance(); +} From 5175480431fb58f9bc73c0a9ede2041603249d40 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Apr 2023 12:31:07 +0900 Subject: [PATCH 147/617] fix 1182 --- .../api/registry/ArchRegistry.java | 10 +++++++++- .../api/util/BlockEntityTypeUtil.java | 19 +++++++++++++++++++ .../mcpitanlibarch/api/util/BlockUtil.java | 3 +++ .../api/util/EntityTypeUtil.java | 4 ++++ .../mcpitanlibarch/api/util/ItemUtil.java | 4 ++++ .../mcpitanlibarch/api/util/MathUtil.java | 18 ++++++++++++++++++ .../api/util/ScreenHandlerUtil.java | 4 ++++ .../api/util/client/MatrixStackUtil.java | 12 ++++++++++++ 8 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/MatrixStackUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 594a3f147..c6c2aacfc 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -1,7 +1,7 @@ package ml.pkom.mcpitanlibarch.api.registry; import com.google.common.base.Suppliers; -import dev.architectury.registry.menu.MenuRegistry; +import dev.architectury.registry.fuel.FuelRegistry; import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; @@ -17,6 +17,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; +import net.minecraft.item.ItemConvertible; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; @@ -102,7 +103,14 @@ public RegistryEvent registerFluid(Identifier id, Supplier supplie return new RegistryEvent<>(FLUID.register(id, supplier)); } + public static void registerFuel(int time, ItemConvertible... item) { + FuelRegistry.register(time, item); + } + public void allRegister() { // 1.16 Register + + // ItemGroup + CreativeTabManager.allRegister(); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java new file mode 100644 index 000000000..00613c15b --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java @@ -0,0 +1,19 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public class BlockEntityTypeUtil { + public static Identifier toID(BlockEntityType entityType) { + return Registry.BLOCK_ENTITY_TYPE.getId(entityType); + } + + public static BlockEntityType fromId(Identifier identifier) { + return Registry.BLOCK_ENTITY_TYPE.get(identifier); + } + + public static int getRawId(BlockEntityType type) { + return Registry.BLOCK_ENTITY_TYPE.getRawId(type); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index 67b95b1e0..710b4aae0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -64,4 +64,7 @@ public static Block of(CompatibleBlockSettings settings) { return of(settings.build()); } + public static int getRawId(Block block) { + return Registries.BLOCK.getRawId(block); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java index 36d1ef1ff..b9048c30b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java @@ -12,4 +12,8 @@ public static Identifier toID(EntityType entityType) { public static EntityType fromId(Identifier identifier) { return Registry.ENTITY_TYPE.get(identifier); } + + public static int getRawId(EntityType type) { + return Registries.ENTITY_TYPE.getRawId(type); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index c5df1ac44..0df29fd2e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -70,4 +70,8 @@ public static List getAllItems() { } return items; } + + public static int getRawId(Item item) { + return Registries.ITEM.getRawId(item); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java index 4a20a944c..349491238 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java @@ -1,5 +1,7 @@ package ml.pkom.mcpitanlibarch.api.util; +import net.minecraft.util.math.Quaternion; +import net.minecraft.util.math.Vec3f; import java.util.Random; public class MathUtil { @@ -11,4 +13,20 @@ public static Random createRandom(long seed) { public static Random createRandom() { return new Random(); } + + public static Quaternion getRotationDegrees(RotationAxisType type, float deg) { + return type.axis.getDegreesQuaternion(deg); + } + + public static class RotationAxisType { + + public static RotationAxisType POSITIVE_X = new RotationAxisType(Vec3f.POSITIVE_X); + public static RotationAxisType POSITIVE_Y = new RotationAxisType(Vec3f.POSITIVE_Y); + public static RotationAxisType POSITIVE_Z = new RotationAxisType(Vec3f.POSITIVE_Z); + + protected final Vec3f axis; + protected RotationAxisType(Vec3f axis) { + this.axis = axis; + } + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java index e384b4eb3..0c1c6dfb1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java @@ -43,4 +43,8 @@ public static void openExtendedMenu(ServerPlayerEntity player, ExtendedMenuProvi public static void openMenu(ServerPlayerEntity player, NamedScreenHandlerFactory provider) { MenuRegistry.openMenu(player, provider); } + + public static int getRawId(ScreenHandlerType type) { + return Registries.SCREEN_HANDLER.getRawId(type); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/MatrixStackUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/MatrixStackUtil.java new file mode 100644 index 000000000..36e3e08ec --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/MatrixStackUtil.java @@ -0,0 +1,12 @@ +package ml.pkom.mcpitanlibarch.api.util.client; + +import ml.pkom.mcpitanlibarch.api.util.MathUtil; +import net.minecraft.client.util.math.MatrixStack; + +import static ml.pkom.mcpitanlibarch.api.util.MathUtil.*; + +public class MatrixStackUtil { + public static void multiply(MatrixStack matrixStack, MathUtil.RotationAxisType type, float deg) { + matrixStack.multiply(getRotationDegrees(type, deg)); + } +} From 98cbbd3f6f515cd1cedfa38641d111e634a73d98 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Apr 2023 12:46:14 +0900 Subject: [PATCH 148/617] fix 1192 req v2 --- .../main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java | 2 +- .../java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java | 2 +- .../src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java | 2 +- .../java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index 710b4aae0..3dcafdf4b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -65,6 +65,6 @@ public static Block of(CompatibleBlockSettings settings) { } public static int getRawId(Block block) { - return Registries.BLOCK.getRawId(block); + return Registry.BLOCK.getRawId(block); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java index b9048c30b..e9f00fb83 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java @@ -14,6 +14,6 @@ public static EntityType fromId(Identifier identifier) { } public static int getRawId(EntityType type) { - return Registries.ENTITY_TYPE.getRawId(type); + return Registry.ENTITY_TYPE.getRawId(type); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index 0df29fd2e..cf9752332 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -72,6 +72,6 @@ public static List getAllItems() { } public static int getRawId(Item item) { - return Registries.ITEM.getRawId(item); + return Registry.ITEM.getRawId(item); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java index 0c1c6dfb1..970d2c655 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java @@ -45,6 +45,6 @@ public static void openMenu(ServerPlayerEntity player, NamedScreenHandlerFactory } public static int getRawId(ScreenHandlerType type) { - return Registries.SCREEN_HANDLER.getRawId(type); + return Registry.SCREEN_HANDLER.getRawId(type); } } From 7675486dd65b671b765a052be41bc0ac9677556b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 1 Apr 2023 13:14:18 +0900 Subject: [PATCH 149/617] ver --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 512556125..547741c93 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.8-1.18 +mod_version=1.5.9-1.18 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api From 2c1cfc960da70257e877d9129c8cd3a823ae24ea Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 7 Apr 2023 23:27:32 +0900 Subject: [PATCH 150/617] quilt --- build.gradle | 2 +- gradle.properties | 2 +- quilt/build.gradle | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 241ca090c..d881a2906 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ allprojects { apply plugin: "maven-publish" archivesBaseName = rootProject.archives_base_name - version = rootProject.mod_version + version = rootProject.mod_version + "-" + rootProject.minecraft_version group = rootProject.maven_group repositories { diff --git a/gradle.properties b/gradle.properties index 547741c93..ff4f90acc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 archives_base_name=mcpitanlibarch -mod_version=1.5.9-1.18 +mod_version=1.6.0 maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api diff --git a/quilt/build.gradle b/quilt/build.gradle index 9f82c2a25..afc433f53 100644 --- a/quilt/build.gradle +++ b/quilt/build.gradle @@ -20,12 +20,12 @@ configurations { shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common - developmentFabric.extendsFrom common + developmentQuilt.extendsFrom common } dependencies { modImplementation "org.quiltmc:quilt-loader:${rootProject.quilt_loader_version}" - modApi "org.quiltmc.quilted-fabric-api:quilted-fabric-api:${rootProject.quilt_fabric_api_version}-${minecraft_version}" + modApi "org.quiltmc.quilted-fabric-api:quilted-fabric-api:${rootProject.quilt_fabric_api_version}-${rootProject.minecraft_version}" // Remove the next line if you don't want to depend on the API modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}" From 24c7557a5e307c63163341d241b80b9fc7d4a7a6 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 8 Apr 2023 00:13:38 +0900 Subject: [PATCH 151/617] add api --- .../api/block/CompatibleBlockSettings.java | 1 - .../client/registry/ArchRegistryClient.java | 20 +++++ .../api/entity/EntityTypeBuilder.java | 9 ++- .../api/entity/ExtendEntityType.java | 9 ++- .../api/item/CompatibleItemSettings.java | 1 - .../api/registry/ArchRegistry.java | 56 ++++++------- .../api/util/BlockEntityTypeUtil.java | 4 + .../mcpitanlibarch/api/util/BlockUtil.java | 4 + .../api/util/EntityTypeUtil.java | 4 + .../mcpitanlibarch/api/util/FluidUtil.java | 8 ++ .../mcpitanlibarch/api/util/ItemUtil.java | 4 + .../mcpitanlibarch/api/util/MathUtil.java | 1 + .../api/util/ScreenHandlerUtil.java | 4 + .../core/registry/FuelRegistry.java | 17 ++++ .../core/registry/MCPLRegistry.java | 81 +++++++++++++++++++ .../pkom/mcpitanlibarch/test/ExampleMod.java | 2 + 16 files changed, 184 insertions(+), 41 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/FuelRegistry.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java index 440553e6f..47d0968c3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java @@ -185,7 +185,6 @@ public CompatibleBlockSettings allowsSpawning(AbstractBlock.TypedContextPredicat return this; } - @Deprecated public AbstractBlock.Settings build() { return settings; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java index 6422c587f..94c2462ae 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java @@ -3,17 +3,25 @@ import dev.architectury.event.events.client.ClientTextureStitchEvent; import dev.architectury.registry.client.level.entity.EntityRendererRegistry; import dev.architectury.registry.client.particle.ParticleProviderRegistry; +import dev.architectury.registry.client.rendering.BlockEntityRendererRegistry; +import dev.architectury.registry.client.rendering.RenderTypeRegistry; import dev.architectury.registry.menu.MenuRegistry; +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; import net.minecraft.client.particle.ParticleFactory; import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.texture.Sprite; import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.fluid.Fluid; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleType; import net.minecraft.screen.PlayerScreenHandler; @@ -93,4 +101,16 @@ public static void registryClientSprite(Identifier atlasId, Identifier identifie public static void registryClientSprite(Identifier atlasId, Sprite sprite) { ClientTextureStitchEvent.PRE.register(((atlas, spriteAdder) -> spriteAdder.accept(sprite.getId()))); } + + public static void registerBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { + BlockEntityRendererRegistry.register(type, provider); + } + + public static void registerRenderTypeBlock(RenderLayer layer, Block block) { + RenderTypeRegistry.register(layer, block); + } + + public static void registerRenderTypeFluid(RenderLayer layer, Fluid fluid) { + RenderTypeRegistry.register(layer, fluid); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java index 9d22e56d4..3ce02458e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java @@ -6,11 +6,12 @@ import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; +import ml.pkom.mcpitanlibarch.api.entity.ExtendEntityType.EntityFactory; public class EntityTypeBuilder { private SpawnGroup spawnGroup; - private EntityType.EntityFactory factory; + private EntityFactory factory; private EntityDimensions entityDimensions; private boolean saveable; private boolean summonable; @@ -36,7 +37,7 @@ public EntityTypeBuilder() { } @Deprecated - public EntityTypeBuilder(SpawnGroup spawnGroup, EntityType.EntityFactory factory) { + public EntityTypeBuilder(SpawnGroup spawnGroup, EntityFactory factory) { this(); this.spawnGroup = spawnGroup; this.factory = factory; @@ -46,7 +47,7 @@ public static EntityTypeBuilder create() { return new EntityTypeBuilder<>(); } - public static EntityTypeBuilder create(SpawnGroup spawnGroup, EntityType.EntityFactory factory) { + public static EntityTypeBuilder create(SpawnGroup spawnGroup, EntityFactory factory) { return new EntityTypeBuilder<>(spawnGroup, factory); } @@ -59,7 +60,7 @@ public EntityTypeBuilder setSpawnGroup(SpawnGroup spawnGroup) { return this; } - public EntityTypeBuilder setEntityFactory(EntityType.EntityFactory factory) { + public EntityTypeBuilder setEntityFactory(ExtendEntityType.EntityFactory factory) { this.factory = factory; return this; } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java index bb72550ad..83f405683 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java @@ -6,12 +6,13 @@ import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; +import net.minecraft.world.World; public class ExtendEntityType extends EntityType { private final Boolean alwaysUpdateVelocity; - public ExtendEntityType(EntityType.EntityFactory factory, SpawnGroup spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet canSpawnBlocks, EntityDimensions entityDimensions, int maxTrackDistance, int trackTickInterval, Boolean alwaysUpdateVelocity) { - super(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval); + public ExtendEntityType(EntityFactory factory, SpawnGroup spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet canSpawnBlocks, EntityDimensions entityDimensions, int maxTrackDistance, int trackTickInterval, Boolean alwaysUpdateVelocity) { + super((factory::create), spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval); this.alwaysUpdateVelocity = alwaysUpdateVelocity; } @@ -22,4 +23,8 @@ public boolean alwaysUpdateVelocity() { return super.alwaysUpdateVelocity(); } + + public interface EntityFactory { + T create(EntityType type, World world); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java index c45c32721..7fd0a68aa 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java @@ -56,7 +56,6 @@ public CompatibleItemSettings recipeRemainder(Item recipeRemainder) { return this; } - @Deprecated public ExtendSettings build() { return settings; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index c6c2aacfc..1639f9754 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -1,16 +1,16 @@ package ml.pkom.mcpitanlibarch.api.registry; -import com.google.common.base.Suppliers; -import dev.architectury.registry.fuel.FuelRegistry; -import dev.architectury.registry.registries.Registrar; -import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; import ml.pkom.mcpitanlibarch.MCPitanLibarch; +import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; -import ml.pkom.mcpitanlibarch.api.item.ExtendSettings; -import net.minecraft.block.AbstractBlock; +import ml.pkom.mcpitanlibarch.api.util.BlockUtil; +import ml.pkom.mcpitanlibarch.api.util.ItemUtil; +import ml.pkom.mcpitanlibarch.core.registry.FuelRegistry; +import ml.pkom.mcpitanlibarch.core.registry.MCPLRegistry; import net.minecraft.block.Block; import net.minecraft.block.Material; import net.minecraft.block.entity.BlockEntityType; @@ -18,6 +18,7 @@ import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; +import net.minecraft.particle.ParticleType; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; @@ -27,26 +28,10 @@ public class ArchRegistry { - public Supplier REGISTRIES; - - public Registrar ITEMS; - public Registrar BLOCKS; - public Registrar> SCREEN_HANDLER_TYPE; - public Registrar> BLOCK_ENTITY_TYPE; - public Registrar> ENTITY_TYPE; - public Registrar SOUND_EVENT; - public Registrar FLUID; + private final MCPLRegistry mcplr; public ArchRegistry(String MOD_ID) { - REGISTRIES = Suppliers.memoize(() -> Registries.get(MOD_ID)); - - ITEMS = REGISTRIES.get().get(Registry.ITEM_KEY); - BLOCKS = REGISTRIES.get().get(Registry.BLOCK_KEY); - SCREEN_HANDLER_TYPE = REGISTRIES.get().get(Registry.MENU_KEY); - BLOCK_ENTITY_TYPE = REGISTRIES.get().get(Registry.BLOCK_ENTITY_TYPE_KEY); - ENTITY_TYPE = REGISTRIES.get().get(Registry.ENTITY_TYPE_KEY); - SOUND_EVENT = REGISTRIES.get().get(Registry.SOUND_EVENT_KEY); - FLUID = REGISTRIES.get().get(Registry.FLUID_KEY); + mcplr = new MCPLRegistry(MOD_ID); } public static ArchRegistry createRegistry(String MOD_ID) { @@ -54,19 +39,19 @@ public static ArchRegistry createRegistry(String MOD_ID) { } public RegistryEvent registerItem(Identifier id, Supplier supplier) { - if (MCPitanLibarch.itemBlackList.contains(id.toString())) supplier = () -> new Item(new ExtendSettings()); - RegistrySupplier registrySupplier = ITEMS.register(id, supplier); + if (MCPitanLibarch.itemBlackList.contains(id.toString())) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); + RegistrySupplier registrySupplier = mcplr.registryItem(id, supplier); CreativeTabManager.register(id); return new RegistryEvent<>(registrySupplier); } public RegistryEvent registerBlock(Identifier id, Supplier supplier) { - if (MCPitanLibarch.blockBlackList.contains(id.toString())) supplier = () -> new Block(AbstractBlock.Settings.of(Material.STONE)); - return new RegistryEvent<>(BLOCKS.register(id, supplier)); + if (MCPitanLibarch.blockBlackList.contains(id.toString())) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(Material.STONE)); + return new RegistryEvent<>(mcplr.registryBlock(id, supplier)); } public RegistryEvent> registerScreenHandlerType(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(SCREEN_HANDLER_TYPE.register(id, supplier)); + return new RegistryEvent<>(mcplr.registryScreenHandlerType(id, supplier)); } @Deprecated @@ -79,16 +64,16 @@ public RegistryEvent> registerMenu(Identifier id, Supplier< } public RegistryEvent> registerBlockEntityType(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(BLOCK_ENTITY_TYPE.register(id, supplier)); + return new RegistryEvent<>(mcplr.registryBlockEntityType(id, supplier)); } public RegistryEvent> registerEntity(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(ENTITY_TYPE.register(id, supplier)); + return new RegistryEvent<>(mcplr.registryEntityType(id, supplier)); } @Deprecated public RegistryEvent registerSoundEvent(Identifier id, Supplier supplier) { - return new RegistryEvent<>(SOUND_EVENT.register(id, supplier)); + return new RegistryEvent<>(mcplr.registrySoundEvent(id, supplier)); } public RegistryEvent registerSoundEvent(Identifier id) { @@ -100,7 +85,11 @@ public RegistryEvent registerSoundEvent(Identifier id, float distanc } public RegistryEvent registerFluid(Identifier id, Supplier supplier) { - return new RegistryEvent<>(FLUID.register(id, supplier)); + return new RegistryEvent<>(mcplr.registryFluid(id, supplier)); + } + + public RegistryEvent> registerParticleType(Identifier id, Supplier> supplier) { + return new RegistryEvent<>(mcplr.registryParticleType(id, supplier)); } public static void registerFuel(int time, ItemConvertible... item) { @@ -109,6 +98,7 @@ public static void registerFuel(int time, ItemConvertible... item) { public void allRegister() { // 1.16 Register + mcplr.allRegister1_16(); // ItemGroup CreativeTabManager.allRegister(); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java index 00613c15b..da98e7d2f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java @@ -16,4 +16,8 @@ public static BlockEntityType fromId(Identifier identifier) { public static int getRawId(BlockEntityType type) { return Registry.BLOCK_ENTITY_TYPE.getRawId(type); } + + public static BlockEntityType fromIndex(int index) { + return Registry.BLOCK_ENTITY_TYPE.get(index); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index 3dcafdf4b..a09daf199 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -67,4 +67,8 @@ public static Block of(CompatibleBlockSettings settings) { public static int getRawId(Block block) { return Registry.BLOCK.getRawId(block); } + + public static Block fromIndex(int index) { + return Registry.BLOCK.get(index); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java index e9f00fb83..e1af4e49b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java @@ -16,4 +16,8 @@ public static EntityType fromId(Identifier identifier) { public static int getRawId(EntityType type) { return Registry.ENTITY_TYPE.getRawId(type); } + + public static EntityType fromIndex(int index) { + return Registry.ENTITY_TYPE.get(index); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java index 1495f051d..3bd2481e8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java @@ -12,4 +12,12 @@ public static Identifier toID(Fluid fluid) { public static Fluid fromId(Identifier identifier) { return Registry.FLUID.get(identifier); } + + public static int getRawId(Fluid fluid) { + return Registry.FLUID.getRawId(fluid); + } + + public static Fluid fromIndex(int index) { + return Registry.FLUID.get(index); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index cf9752332..fd306721e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -74,4 +74,8 @@ public static List getAllItems() { public static int getRawId(Item item) { return Registry.ITEM.getRawId(item); } + + public static Item fromIndex(int index) { + return Registry.ITEM.get(index); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java index 349491238..de82e535f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java @@ -14,6 +14,7 @@ public static Random createRandom() { return new Random(); } + @Deprecated public static Quaternion getRotationDegrees(RotationAxisType type, float deg) { return type.axis.getDegreesQuaternion(deg); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java index 970d2c655..2c78e2a1d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java @@ -47,4 +47,8 @@ public static void openMenu(ServerPlayerEntity player, NamedScreenHandlerFactory public static int getRawId(ScreenHandlerType type) { return Registry.SCREEN_HANDLER.getRawId(type); } + + public static ScreenHandlerType fromIndex(int index) { + return Registry.SCREEN_HANDLER.get(index); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/FuelRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/FuelRegistry.java new file mode 100644 index 000000000..b1d4be253 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/FuelRegistry.java @@ -0,0 +1,17 @@ +package ml.pkom.mcpitanlibarch.core.registry; + +import net.minecraft.item.ItemConvertible; +import net.minecraft.item.ItemStack; + +public class FuelRegistry { + private FuelRegistry() { + + } + + public static void register(int time, ItemConvertible... item) { + dev.architectury.registry.fuel.FuelRegistry.register(time, item); + } + public static int get(ItemStack stack) { + return dev.architectury.registry.fuel.FuelRegistry.get(stack); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java new file mode 100644 index 000000000..f8757bb4e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java @@ -0,0 +1,81 @@ +package ml.pkom.mcpitanlibarch.core.registry; + +import com.google.common.base.Suppliers; +import dev.architectury.registry.registries.Registrar; +import dev.architectury.registry.registries.Registries; +import dev.architectury.registry.registries.RegistrySupplier; +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.EntityType; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; +import net.minecraft.particle.ParticleType; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.function.Supplier; + +@Deprecated +public class MCPLRegistry { + + public Supplier REGISTRIES; + + public Registrar ITEMS; + public Registrar BLOCKS; + public Registrar> SCREEN_HANDLER_TYPE; + public Registrar> BLOCK_ENTITY_TYPE; + public Registrar> ENTITY_TYPE; + public Registrar SOUND_EVENT; + public Registrar FLUID; + public Registrar> PARTICLE_TYPE; + + public MCPLRegistry(String MOD_ID) { + REGISTRIES = Suppliers.memoize(() -> Registries.get(MOD_ID)); + + ITEMS = REGISTRIES.get().get(Registry.ITEM_KEY); + BLOCKS = REGISTRIES.get().get(Registry.BLOCK_KEY); + SCREEN_HANDLER_TYPE = REGISTRIES.get().get(Registry.MENU_KEY); + BLOCK_ENTITY_TYPE = REGISTRIES.get().get(Registry.BLOCK_ENTITY_TYPE_KEY); + ENTITY_TYPE = REGISTRIES.get().get(Registry.ENTITY_TYPE_KEY); + SOUND_EVENT = REGISTRIES.get().get(Registry.SOUND_EVENT_KEY); + FLUID = REGISTRIES.get().get(Registry.FLUID_KEY); + } + + public RegistrySupplier registryItem(Identifier id, Supplier supplier) { + return ITEMS.register(id, supplier); + } + + public RegistrySupplier registryBlock(Identifier id, Supplier supplier) { + return BLOCKS.register(id, supplier); + } + + public RegistrySupplier> registryScreenHandlerType(Identifier id, Supplier> supplier) { + return SCREEN_HANDLER_TYPE.register(id, supplier); + } + + public RegistrySupplier> registryBlockEntityType(Identifier id, Supplier> supplier) { + return BLOCK_ENTITY_TYPE.register(id, supplier); + } + + public RegistrySupplier> registryEntityType(Identifier id, Supplier> supplier) { + return ENTITY_TYPE.register(id, supplier); + } + + public RegistrySupplier registrySoundEvent(Identifier id, Supplier supplier) { + return SOUND_EVENT.register(id, supplier); + } + + public RegistrySupplier registryFluid(Identifier id, Supplier supplier) { + return FLUID.register(id, supplier); + } + + public RegistrySupplier> registryParticleType(Identifier id, Supplier> supplier) { + return PARTICLE_TYPE.register(id, supplier); + } + + public void allRegister1_16() { + + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java index 8d671d797..31ed9945c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java @@ -41,6 +41,8 @@ public static Identifier id(String id) { public static RegistryEvent EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER; public static void init() { + //EntityTypeBuilder.create().setSpawnGroup(SpawnGroup.AMBIENT).setEntityFactory(((type, world) -> new ZombieEntity((EntityType) type, world))); + EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new Item(new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS, id("example_item")))); EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new Block(AbstractBlock.Settings.of(Material.STONE))); EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); From b58763c6e3f616542e8d0a0b1b6273d393bf76c9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 8 Apr 2023 00:33:05 +0900 Subject: [PATCH 152/617] fix api 2 --- .../java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java index f8757bb4e..ca9b0a4ca 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java @@ -41,6 +41,7 @@ public MCPLRegistry(String MOD_ID) { ENTITY_TYPE = REGISTRIES.get().get(Registry.ENTITY_TYPE_KEY); SOUND_EVENT = REGISTRIES.get().get(Registry.SOUND_EVENT_KEY); FLUID = REGISTRIES.get().get(Registry.FLUID_KEY); + PARTICLE_TYPE = REGISTRIES.get().get(Registry.PARTICLE_TYPE); } public RegistrySupplier registryItem(Identifier id, Supplier supplier) { From e1127f89f862c3e0768b01110b05c7ff9b98cc41 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 8 Apr 2023 16:30:45 +0900 Subject: [PATCH 153/617] add api --- build.gradle | 16 ++++- common/build.gradle | 2 +- .../client/registry/ArchRegistryClient.java | 70 ++++++++++++++++++- fabric/build.gradle | 2 +- forge/build.gradle | 2 +- gradle.properties | 3 - info.properties | 3 + php/build.bat | 53 ++++++++++++++ 8 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 info.properties create mode 100644 php/build.bat diff --git a/build.gradle b/build.gradle index d881a2906..9e153e2d4 100644 --- a/build.gradle +++ b/build.gradle @@ -26,14 +26,24 @@ subprojects { } } +def loadProperties(filename) { + def props = new Properties() + file(filename).withInputStream { + props.load(it) + } + return props +} + +ext.info = loadProperties("$rootDir/info.properties") + allprojects { apply plugin: "java" apply plugin: "architectury-plugin" apply plugin: "maven-publish" - archivesBaseName = rootProject.archives_base_name - version = rootProject.mod_version + "-" + rootProject.minecraft_version - group = rootProject.maven_group + archivesBaseName = info.archives_base_name + version = info.mod_version + "-" + rootProject.minecraft_version + group = info.maven_group repositories { // Add repositories to retrieve artifacts from in here. diff --git a/common/build.gradle b/common/build.gradle index 93b656026..4752123ad 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -17,7 +17,7 @@ loom { publishing { publications { mavenCommon(MavenPublication) { - artifactId = rootProject.archives_base_name + artifactId = info.archives_base_name from components.java } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java index 94c2462ae..e40b59594 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java @@ -6,16 +6,27 @@ import dev.architectury.registry.client.rendering.BlockEntityRendererRegistry; import dev.architectury.registry.client.rendering.RenderTypeRegistry; import dev.architectury.registry.menu.MenuRegistry; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; +import net.minecraft.client.model.ModelPart; import net.minecraft.client.particle.ParticleFactory; import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.block.BlockRenderManager; +import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; +import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.model.EntityModelLayer; +import net.minecraft.client.render.entity.model.EntityModelLoader; +import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.texture.Sprite; import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.entity.Entity; @@ -34,6 +45,7 @@ import java.util.Random; import java.util.function.Supplier; +@Environment(EnvType.CLIENT) public class ArchRegistryClient { public static > void registerScreen(ScreenHandlerType type, ScreenFactory factory) { MenuRegistry.registerScreenFactory(type, factory::create); @@ -102,10 +114,64 @@ public static void registryClientSprite(Identifier atlasId, Sprite sprite) { ClientTextureStitchEvent.PRE.register(((atlas, spriteAdder) -> spriteAdder.accept(sprite.getId()))); } - public static void registerBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { - BlockEntityRendererRegistry.register(type, provider); + public static void registerBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { + BlockEntityRendererRegistry.register(type, ctx -> provider.create(new BlockEntityRendererFactory.Context( + ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getItemRenderer(), ctx.getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() + ))); } + @FunctionalInterface + public interface BlockEntityRendererFactory { + BlockEntityRenderer create(BlockEntityRendererFactory.Context ctx); + + class Context { + private final BlockEntityRenderDispatcher renderDispatcher; + private final BlockRenderManager renderManager; + private final ItemRenderer itemRenderer; + private final EntityRenderDispatcher entityRenderDispatcher; + private final EntityModelLoader layerRenderDispatcher; + private final TextRenderer textRenderer; + + public Context(BlockEntityRenderDispatcher renderDispatcher, BlockRenderManager renderManager, ItemRenderer itemRenderer, EntityRenderDispatcher entityRenderDispatcher, EntityModelLoader layerRenderDispatcher, TextRenderer textRenderer) { + this.renderDispatcher = renderDispatcher; + this.renderManager = renderManager; + this.itemRenderer = itemRenderer; + this.entityRenderDispatcher = entityRenderDispatcher; + this.layerRenderDispatcher = layerRenderDispatcher; + this.textRenderer = textRenderer; + } + + public BlockEntityRenderDispatcher getRenderDispatcher() { + return this.renderDispatcher; + } + + public BlockRenderManager getRenderManager() { + return this.renderManager; + } + + public EntityRenderDispatcher getEntityRenderDispatcher() { + return this.entityRenderDispatcher; + } + + public ItemRenderer getItemRenderer() { + return this.itemRenderer; + } + + public EntityModelLoader getLayerRenderDispatcher() { + return this.layerRenderDispatcher; + } + + public ModelPart getLayerModelPart(EntityModelLayer modelLayer) { + return this.layerRenderDispatcher.getModelPart(modelLayer); + } + + public TextRenderer getTextRenderer() { + return this.textRenderer; + } + } + } + + public static void registerRenderTypeBlock(RenderLayer layer, Block block) { RenderTypeRegistry.register(layer, block); } diff --git a/fabric/build.gradle b/fabric/build.gradle index a2d3ed01c..7c6b990b2 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -75,7 +75,7 @@ components.java { publishing { publications { mavenFabric(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name + artifactId = info.archives_base_name + "-" + project.name from components.java } } diff --git a/forge/build.gradle b/forge/build.gradle index 025f6ec4f..09991120d 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -80,7 +80,7 @@ components.java { publishing { publications { mavenForge(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name + artifactId = info.archives_base_name + "-" + project.name from components.java } } diff --git a/gradle.properties b/gradle.properties index ff4f90acc..24a115f2b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,6 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 -archives_base_name=mcpitanlibarch -mod_version=1.6.0 -maven_group=ml.pkom # https://www.curseforge.com/minecraft/mc-mods/architectury-api architectury_version=4.9.84 diff --git a/info.properties b/info.properties new file mode 100644 index 000000000..7e7ee6d6e --- /dev/null +++ b/info.properties @@ -0,0 +1,3 @@ +archives_base_name=mcpitanlibarch +mod_version=1.6.1 +maven_group=ml.pkom \ No newline at end of file diff --git a/php/build.bat b/php/build.bat new file mode 100644 index 000000000..876b0f055 --- /dev/null +++ b/php/build.bat @@ -0,0 +1,53 @@ +cd "../" + +git fetch origin +git checkout 1.19.4 +gradlew build +gradlew generatePomFileForMavenCommonPublication +gradlew generatePomFileForMavenForgePublication +gradlew generatePomFileForMavenFabricPublication + +git fetch origin +git checkout 1.19.3 +gradlew build +gradlew generatePomFileForMavenCommonPublication +gradlew generatePomFileForMavenForgePublication +gradlew generatePomFileForMavenFabricPublication + +git fetch origin +git checkout 1.19.2 +gradlew build +gradlew generatePomFileForMavenCommonPublication +gradlew generatePomFileForMavenForgePublication +gradlew generatePomFileForMavenFabricPublication + +git fetch origin +git checkout 1.18.2 +gradlew build +gradlew generatePomFileForMavenCommonPublication +gradlew generatePomFileForMavenForgePublication +gradlew generatePomFileForMavenFabricPublication + +git fetch origin +git checkout 1.17.1 +gradlew build +gradlew generatePomFileForMavenCommonPublication +gradlew generatePomFileForMavenForgePublication +gradlew generatePomFileForMavenFabricPublication + +git fetch origin +git checkout 1.16.5 +gradlew build +gradlew generatePomFileForMavenCommonPublication +gradlew generatePomFileForMavenForgePublication +gradlew generatePomFileForMavenFabricPublication + +git fetch origin +git checkout 1.16.5 + +cd "./php" + +start "./upload_maven.bat" +start "./upload_curseforge.bat" +start "./upload_modrinth.bat" +pause \ No newline at end of file From a4ccbacc5e418629197e88029dbbfca118507986 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 8 Apr 2023 16:43:26 +0900 Subject: [PATCH 154/617] fix api --- .../api/client/registry/ArchRegistryClient.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java index e40b59594..fac7865a6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java @@ -116,7 +116,7 @@ public static void registryClientSprite(Identifier atlasId, Sprite sprite) { public static void registerBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { BlockEntityRendererRegistry.register(type, ctx -> provider.create(new BlockEntityRendererFactory.Context( - ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getItemRenderer(), ctx.getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() + ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() ))); } @@ -127,16 +127,12 @@ public interface BlockEntityRendererFactory { class Context { private final BlockEntityRenderDispatcher renderDispatcher; private final BlockRenderManager renderManager; - private final ItemRenderer itemRenderer; - private final EntityRenderDispatcher entityRenderDispatcher; private final EntityModelLoader layerRenderDispatcher; private final TextRenderer textRenderer; - public Context(BlockEntityRenderDispatcher renderDispatcher, BlockRenderManager renderManager, ItemRenderer itemRenderer, EntityRenderDispatcher entityRenderDispatcher, EntityModelLoader layerRenderDispatcher, TextRenderer textRenderer) { + public Context(BlockEntityRenderDispatcher renderDispatcher, BlockRenderManager renderManager, EntityModelLoader layerRenderDispatcher, TextRenderer textRenderer) { this.renderDispatcher = renderDispatcher; this.renderManager = renderManager; - this.itemRenderer = itemRenderer; - this.entityRenderDispatcher = entityRenderDispatcher; this.layerRenderDispatcher = layerRenderDispatcher; this.textRenderer = textRenderer; } @@ -149,14 +145,6 @@ public BlockRenderManager getRenderManager() { return this.renderManager; } - public EntityRenderDispatcher getEntityRenderDispatcher() { - return this.entityRenderDispatcher; - } - - public ItemRenderer getItemRenderer() { - return this.itemRenderer; - } - public EntityModelLoader getLayerRenderDispatcher() { return this.layerRenderDispatcher; } From d3a9078560914dea93f2a90b136ae6ba74be953d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 9 Apr 2023 22:52:15 +0900 Subject: [PATCH 155/617] add api --- .../api/item/ExtendItemProvider.java | 73 ++++++++++++++ .../pkom/mcpitanlibarch/mixin/ItemMixin.java | 95 +++++++++++++++++++ .../mcpitanlibarch-common.mixins.json | 1 + info.properties | 2 +- php/build.bat | 81 ++++++++++------ 5 files changed, 221 insertions(+), 31 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemMixin.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java new file mode 100644 index 000000000..904eb1934 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java @@ -0,0 +1,73 @@ +package ml.pkom.mcpitanlibarch.api.item; + +import ml.pkom.mcpitanlibarch.Dummy; +import ml.pkom.mcpitanlibarch.api.event.item.*; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.TypedActionResult; + +public interface ExtendItemProvider { + + /** + * item right click event + * + * @param event ItemUseEvent + * @return ActionResultType + */ + default TypedActionResult onRightClick(ItemUseEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * item right click event on block + * @param event ItemUseOnBlockEvent + * @return ActionResultType + */ + default ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * using finish with item + * @param event ItemFinishUsingEvent + * @return ItemStack + */ + default ItemStack onFinishUsing(ItemFinishUsingEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * on click with item on entity + * @param event ItemUseOnEntityEvent + * @return ActionResult + */ + default ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * item has recipe remainder + * @param dummy Dummy + * @return boolean + */ + default boolean hasRecipeRemainder(Options options) { + options.cancel = false; + return false; + } + + /** + * add tooltip + * @param event ItemAppendTooltipEvent + */ + default void appendTooltip(ItemAppendTooltipEvent event, Options options) { + options.cancel = true; + } + + public static class Options { + public boolean cancel = true; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemMixin.java new file mode 100644 index 000000000..e34dedfda --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemMixin.java @@ -0,0 +1,95 @@ +package ml.pkom.mcpitanlibarch.mixin; + +import ml.pkom.mcpitanlibarch.api.event.item.*; +import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider.Options; +import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.List; + +@Mixin(Item.class) +public class ItemMixin { + @Inject(method = "use", at = @At("HEAD"), cancellable = true) + private void use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + TypedActionResult returnValue = provider.onRightClick(new ItemUseEvent(world, user, hand), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "useOnBlock", at = @At("HEAD"), cancellable = true) + private void useOnBlock(ItemUsageContext context, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; + Options options = new Options(); + ActionResult returnValue = provider.onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit()), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "useOnEntity", at = @At("HEAD"), cancellable = true) + private void useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + ActionResult returnValue = provider.onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand), options); + + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "finishUsing", at = @At("HEAD"), cancellable = true) + private void finishUsing(ItemStack stack, World world, LivingEntity user, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + ItemStack returnValue = provider.onFinishUsing(new ItemFinishUsingEvent(stack, world, user), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "hasRecipeRemainder", at = @At("HEAD"), cancellable = true) + private void hasRecipeRemainder(CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + boolean returnValue = provider.hasRecipeRemainder(options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "appendTooltip", at = @At("HEAD"), cancellable = true) + private void appendTooltip(ItemStack stack, World world, List tooltip, TooltipContext context, CallbackInfo ci) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + provider.appendTooltip(new ItemAppendTooltipEvent(stack, world, tooltip, context), options); + if (options.cancel) + ci.cancel(); + } + } + +} diff --git a/common/src/main/resources/mcpitanlibarch-common.mixins.json b/common/src/main/resources/mcpitanlibarch-common.mixins.json index cad714586..0aaea7d9c 100644 --- a/common/src/main/resources/mcpitanlibarch-common.mixins.json +++ b/common/src/main/resources/mcpitanlibarch-common.mixins.json @@ -4,6 +4,7 @@ "package": "ml.pkom.mcpitanlibarch.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ + "ItemMixin", "ItemUsageContextMixin" ], "client": [ diff --git a/info.properties b/info.properties index 7e7ee6d6e..3c730849c 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.1 +mod_version=1.6.2 maven_group=ml.pkom \ No newline at end of file diff --git a/php/build.bat b/php/build.bat index 876b0f055..e088c6fd1 100644 --- a/php/build.bat +++ b/php/build.bat @@ -1,53 +1,74 @@ -cd "../" +cd "..\" git fetch origin git checkout 1.19.4 -gradlew build -gradlew generatePomFileForMavenCommonPublication -gradlew generatePomFileForMavenForgePublication -gradlew generatePomFileForMavenFabricPublication +call gradlew.bat build +call gradlew.bat generatePomFileForMavenCommonPublication +call gradlew.bat generatePomFileForMavenForgePublication +call gradlew.bat generatePomFileForMavenFabricPublication +copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.19.4.pom" +copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.19.4.pom" +copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.19.4.pom" git fetch origin git checkout 1.19.3 -gradlew build -gradlew generatePomFileForMavenCommonPublication -gradlew generatePomFileForMavenForgePublication -gradlew generatePomFileForMavenFabricPublication +call gradlew.bat build +call gradlew.bat generatePomFileForMavenCommonPublication +call gradlew.bat generatePomFileForMavenForgePublication +call gradlew.bat generatePomFileForMavenFabricPublication +copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.19.3.pom" +copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.19.3.pom" +copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.19.3.pom" git fetch origin git checkout 1.19.2 -gradlew build -gradlew generatePomFileForMavenCommonPublication -gradlew generatePomFileForMavenForgePublication -gradlew generatePomFileForMavenFabricPublication +call gradlew.bat build +call gradlew.bat generatePomFileForMavenCommonPublication +call gradlew.bat generatePomFileForMavenForgePublication +call gradlew.bat generatePomFileForMavenFabricPublication +copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.19.2.pom" +copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.19.2.pom" +copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.19.2.pom" git fetch origin git checkout 1.18.2 -gradlew build -gradlew generatePomFileForMavenCommonPublication -gradlew generatePomFileForMavenForgePublication -gradlew generatePomFileForMavenFabricPublication +call gradlew.bat build +call gradlew.bat generatePomFileForMavenCommonPublication +call gradlew.bat generatePomFileForMavenForgePublication +call gradlew.bat generatePomFileForMavenFabricPublication +copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.18.2.pom" +copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.18.2.pom" +copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.18.2.pom" git fetch origin git checkout 1.17.1 -gradlew build -gradlew generatePomFileForMavenCommonPublication -gradlew generatePomFileForMavenForgePublication -gradlew generatePomFileForMavenFabricPublication +call gradlew.bat build +call gradlew.bat generatePomFileForMavenCommonPublication +call gradlew.bat generatePomFileForMavenForgePublication +call gradlew.bat generatePomFileForMavenFabricPublication +copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.17.1.pom" +copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.17.1.pom" +copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.17.1.pom" git fetch origin git checkout 1.16.5 -gradlew build -gradlew generatePomFileForMavenCommonPublication -gradlew generatePomFileForMavenForgePublication -gradlew generatePomFileForMavenFabricPublication +copy /y gradlew.bat build +copy /y gradlew.bat generatePomFileForMavenCommonPublication +copy /y gradlew.bat generatePomFileForMavenForgePublication +copy /y gradlew.bat generatePomFileForMavenFabricPublication +copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.16.5.pom" +copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.16.5.pom" +copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.16.5.pom" git fetch origin -git checkout 1.16.5 +git checkout 1.19.4 + +cd ".\php" -cd "./php" +copy /y "C:\Users\ptms76\Documents\php\*.bat" ".\" +copy /y "C:\Users\ptms76\Documents\php\*.php" ".\" -start "./upload_maven.bat" -start "./upload_curseforge.bat" -start "./upload_modrinth.bat" +start upload_maven.bat +start upload_curseforge.bat +start upload_modrinth.bat pause \ No newline at end of file From fdc85f9570bfeac410c9393c1ec150acd135a0bb Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 11 Apr 2023 18:14:49 +0900 Subject: [PATCH 156/617] add api --- .../client/registry/KeybindingRegistry.java | 38 +++++++ .../event/v0/AttackEntityEventRegistry.java | 25 +++++ .../api/event/v0/ClientTickEventRegistry.java | 35 ++++++ .../api/util/EquipMaterialUtil.java | 103 ++++++++++++++++++ info.properties | 2 +- 5 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/KeybindingRegistry.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/AttackEntityEventRegistry.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/ClientTickEventRegistry.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EquipMaterialUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/KeybindingRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/KeybindingRegistry.java new file mode 100644 index 000000000..a2c8a38b4 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/KeybindingRegistry.java @@ -0,0 +1,38 @@ +package ml.pkom.mcpitanlibarch.api.client.registry; + +import dev.architectury.registry.client.keymappings.KeyMappingRegistry; +import ml.pkom.mcpitanlibarch.api.event.v0.ClientTickEventRegistry; +import ml.pkom.mcpitanlibarch.api.network.ClientNetworking; +import ml.pkom.mcpitanlibarch.api.network.PacketByteUtil; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.util.Identifier; + +public class KeybindingRegistry { + public static void register(KeyBinding keyBinding) { + KeyMappingRegistry.register(keyBinding); + } + + public static void register(KeyBinding keyBinding, ClientTickEventRegistry.Client client) { + register(keyBinding); + ClientTickEventRegistry.registerPost(client); + } + + public static void registerOnLevel(KeyBinding keyBinding, ClientTickEventRegistry.ClientLevel level) { + register(keyBinding); + ClientTickEventRegistry.registerLevelPost(level); + } + + public static void registerWithNetwork(KeyBinding keyBinding, Identifier identifier) { + register(keyBinding, client -> { + if (keyBinding.wasPressed()) + ClientNetworking.send(identifier, PacketByteUtil.create()); + }); + } + + public static void registerOnLevelWithNetwork(KeyBinding keyBinding, Identifier identifier) { + registerOnLevel(keyBinding, client -> { + if (keyBinding.wasPressed()) + ClientNetworking.send(identifier, PacketByteUtil.create()); + }); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/AttackEntityEventRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/AttackEntityEventRegistry.java new file mode 100644 index 000000000..8e8cf7638 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/AttackEntityEventRegistry.java @@ -0,0 +1,25 @@ +package ml.pkom.mcpitanlibarch.api.event.v0; + +import dev.architectury.event.EventResult; +import dev.architectury.event.events.common.PlayerEvent; +import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; + +public class AttackEntityEventRegistry { + public static void register(AttackEntity attackEntity) { + PlayerEvent.ATTACK_ENTITY.register(attackEntity::attack); + } + + public interface AttackEntity { + default EventResult attack(PlayerEntity player, World level, Entity target, Hand hand, @Nullable EntityHitResult result) { + return attack(new Player(player), level, target, hand, result); + } + + EventResult attack(Player player, World level, Entity target, Hand hand, @Nullable EntityHitResult result); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/ClientTickEventRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/ClientTickEventRegistry.java new file mode 100644 index 000000000..c6635138d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/ClientTickEventRegistry.java @@ -0,0 +1,35 @@ +package ml.pkom.mcpitanlibarch.api.event.v0; + +import dev.architectury.event.events.client.ClientTickEvent; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.world.ClientWorld; + +public class ClientTickEventRegistry { + public static void registerPost(Client client) { + ClientTickEvent.CLIENT_POST.register(client::tick); + } + + public static void registerPre(Client client) { + ClientTickEvent.CLIENT_PRE.register(client::tick); + } + + public static void registerLevelPost(ClientLevel world) { + ClientTickEvent.CLIENT_LEVEL_POST.register(world::tick); + } + + public static void registerLevelPre(ClientLevel world) { + ClientTickEvent.CLIENT_LEVEL_PRE.register(world::tick); + } + + @Environment(EnvType.CLIENT) + public interface Client { + void tick(MinecraftClient instance); + } + + @Environment(EnvType.CLIENT) + public interface ClientLevel { + void tick(ClientWorld instance); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EquipMaterialUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EquipMaterialUtil.java new file mode 100644 index 000000000..b29b6daed --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EquipMaterialUtil.java @@ -0,0 +1,103 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import ml.pkom.mcpitanlibarch.api.item.ArmorEquipmentType; +import ml.pkom.mcpitanlibarch.api.item.CompatibleArmorMaterial; +import net.minecraft.item.ToolMaterial; +import net.minecraft.recipe.Ingredient; +import net.minecraft.sound.SoundEvent; + +public class EquipMaterialUtil { + public static ToolMaterial createToolMaterial(int durability, float miningSpeedMultiplier, float attackDamage, int miningLevel, int enchantability, Ingredient repairIngredient) { + return new ToolMaterial() { + @Override + public int getDurability() { + return durability; + } + + @Override + public float getMiningSpeedMultiplier() { + return miningSpeedMultiplier; + } + + @Override + public float getAttackDamage() { + return attackDamage; + } + + @Override + public int getMiningLevel() { + return miningLevel; + } + + @Override + public int getEnchantability() { + return enchantability; + } + + @Override + public Ingredient getRepairIngredient() { + return repairIngredient; + } + }; + } + + public static int toInt(ArmorEquipmentType type) { + switch (type.getSlot()) { + case HEAD: + return 0; + case CHEST: + return 1; + case LEGS: + return 2; + case FEET: + return 3; + default: + return 0; + } + } + + public static CompatibleArmorMaterial createArmorMaterial(int[] durability, int[] protection, int enchantability, SoundEvent equipSound, Ingredient repairIngredient, String name, float toughness, float knockbackResistance) { + + return new CompatibleArmorMaterial() { + @Override + public int getDurability(ArmorEquipmentType type) { + return durability[toInt(type)]; + } + + @Override + public int getProtection(ArmorEquipmentType type) { + return protection[toInt(type)]; + } + + @Override + public int getEnchantability() { + return enchantability; + } + + @Override + public SoundEvent getEquipSound() { + return equipSound; + } + + @Override + public Ingredient getRepairIngredient() { + return repairIngredient; + } + + @Override + public String getName() { + return name; + } + + @Override + public float getToughness() { + return toughness; + } + + @Override + public float getKnockbackResistance() { + return knockbackResistance; + } + }; + } +} diff --git a/info.properties b/info.properties index 3c730849c..c23a3d388 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.2 +mod_version=1.6.3 maven_group=ml.pkom \ No newline at end of file From 346fa1f1cf351b97882044f9f464d1236e0c9c17 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 11 Apr 2023 18:35:27 +0900 Subject: [PATCH 157/617] gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 24a115f2b..93cdcb97e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3G minecraft_version=1.18.2 # https://www.curseforge.com/minecraft/mc-mods/architectury-api -architectury_version=4.9.84 +architectury_version=4.11.90 # https://fabricmc.net/develop/ fabric_loader_version=0.14.10 From 2798171aab935a0399b449abc66c5006cfed00d6 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 27 May 2023 23:13:47 +0900 Subject: [PATCH 158/617] support to 1.20 --- .../api/block/CompatibleBlockSettings.java | 62 +++++- .../api/block/CompatibleMaterial.java | 206 ++++++++++++++++++ .../mcpitanlibarch/api/block/ExtendBlock.java | 17 +- .../api/client/SimpleHandledScreen.java | 50 +++-- .../api/client/render/DrawObjectDM.java | 33 +++ .../handledscreen/DrawBackgroundArgs.java | 48 ++++ .../handledscreen/DrawForegroundArgs.java | 38 ++++ .../DrawMouseoverTooltipArgs.java | 38 ++++ .../render/handledscreen/RenderArgs.java | 48 ++++ .../api/entity/ExtendEntity.java | 5 + .../mcpitanlibarch/api/entity/Player.java | 2 +- .../api/event/ServerCommandEvent.java | 2 +- .../api/event/block/OutlineShapeEvent.java | 37 ++++ .../api/event/item/ItemUseOnBlockEvent.java | 2 +- .../api/registry/ArchRegistry.java | 4 +- .../api/util/InventoryUtil.java | 4 +- .../api/util/ItemStackUtil.java | 23 ++ .../pkom/mcpitanlibarch/test/ExampleMod.java | 8 +- .../mcpitanlibarch/test/ExampleScreen.java | 16 +- info.properties | 2 +- quilt/build.gradle | 2 +- 21 files changed, 596 insertions(+), 51 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawBackgroundArgs.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawForegroundArgs.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/RenderArgs.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/OutlineShapeEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java index 47d0968c3..be81a6b03 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java @@ -1,6 +1,7 @@ package ml.pkom.mcpitanlibarch.api.block; import net.minecraft.block.*; +import net.minecraft.block.piston.PistonBehavior; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.util.DyeColor; @@ -10,35 +11,62 @@ public class CompatibleBlockSettings { private final AbstractBlock.Settings settings; - public CompatibleBlockSettings(Material material, MapColor mapColor) { - this.settings = AbstractBlock.Settings.of(material, mapColor); + public CompatibleBlockSettings() { + this.settings = AbstractBlock.Settings.create(); + } + + private static CompatibleBlockSettings copyCompatibleMaterial(CompatibleMaterial material, CompatibleBlockSettings settings) { + settings.mapColor(material.getColor()); + if (material.isLiquid()) + settings.settings.liquid(); + if (material.isSolid()) + settings.settings.solid(); + if (material.isReplaceable()) + settings.settings.replaceable(); + if (material.isSolid()) + settings.settings.solid(); + if (material.isBurnable()) + settings.settings.burnable(); + settings.settings.pistonBehavior(material.getPistonBehavior()); + return settings; + } + + public CompatibleBlockSettings(CompatibleMaterial material, MapColor mapColor) { + this.settings = AbstractBlock.Settings.create(); + copyCompatibleMaterial(material, this); + mapColor(mapColor); } - public CompatibleBlockSettings(Material material, DyeColor dyeColor) { - this.settings = AbstractBlock.Settings.of(material, dyeColor); + public CompatibleBlockSettings(CompatibleMaterial material, DyeColor dyeColor) { + this.settings = AbstractBlock.Settings.create(); + copyCompatibleMaterial(material, this); + mapColor(dyeColor); } - public CompatibleBlockSettings(Material material) { - this.settings = AbstractBlock.Settings.of(material); + public CompatibleBlockSettings(CompatibleMaterial material) { + this.settings = AbstractBlock.Settings.create(); + copyCompatibleMaterial(material, this); } - public CompatibleBlockSettings(Material material, Function mapColor) { - this.settings = AbstractBlock.Settings.of(material, mapColor); + public CompatibleBlockSettings(CompatibleMaterial material, Function mapColor) { + this.settings = AbstractBlock.Settings.create(); + copyCompatibleMaterial(material, this); + mapColor(mapColor); } - public static CompatibleBlockSettings of(Material material, MapColor mapColor) { + public static CompatibleBlockSettings of(CompatibleMaterial material, MapColor mapColor) { return new CompatibleBlockSettings(material, mapColor); } - public static CompatibleBlockSettings of(Material material, DyeColor dyeColor) { + public static CompatibleBlockSettings of(CompatibleMaterial material, DyeColor dyeColor) { return new CompatibleBlockSettings(material, dyeColor); } - public static CompatibleBlockSettings of(Material material) { + public static CompatibleBlockSettings of(CompatibleMaterial material) { return new CompatibleBlockSettings(material); } - public static CompatibleBlockSettings of(Material material, Function mapColor) { + public static CompatibleBlockSettings of(CompatibleMaterial material, Function mapColor) { return new CompatibleBlockSettings(material, mapColor); } @@ -80,6 +108,16 @@ public CompatibleBlockSettings mapColor(MapColor color) { return this; } + public CompatibleBlockSettings mapColor(DyeColor color) { + settings.mapColor(color); + return this; + } + + public CompatibleBlockSettings mapColor(Function color) { + settings.mapColor(color); + return this; + } + public CompatibleBlockSettings dropsLike(Block source) { settings.dropsLike(source); return this; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java new file mode 100644 index 000000000..6a6fb0384 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java @@ -0,0 +1,206 @@ +package ml.pkom.mcpitanlibarch.api.block; + +import net.minecraft.block.MapColor; +import net.minecraft.block.piston.PistonBehavior; + +public final class CompatibleMaterial { + public static final CompatibleMaterial AIR; + public static final CompatibleMaterial STRUCTURE_VOID; + public static final CompatibleMaterial PORTAL; + public static final CompatibleMaterial CARPET; + public static final CompatibleMaterial PLANT; + public static final CompatibleMaterial UNDERWATER_PLANT; + public static final CompatibleMaterial REPLACEABLE_PLANT; + public static final CompatibleMaterial NETHER_SHOOTS; + public static final CompatibleMaterial REPLACEABLE_UNDERWATER_PLANT; + public static final CompatibleMaterial WATER; + public static final CompatibleMaterial BUBBLE_COLUMN; + public static final CompatibleMaterial LAVA; + public static final CompatibleMaterial SNOW_LAYER; + public static final CompatibleMaterial FIRE; + public static final CompatibleMaterial DECORATION; + public static final CompatibleMaterial COBWEB; + public static final CompatibleMaterial SCULK; + public static final CompatibleMaterial REDSTONE_LAMP; + public static final CompatibleMaterial ORGANIC_PRODUCT; + public static final CompatibleMaterial SOIL; + public static final CompatibleMaterial SOLID_ORGANIC; + public static final CompatibleMaterial DENSE_ICE; + public static final CompatibleMaterial AGGREGATE; + public static final CompatibleMaterial SPONGE; + public static final CompatibleMaterial SHULKER_BOX; + public static final CompatibleMaterial WOOD; + public static final CompatibleMaterial NETHER_WOOD; + public static final CompatibleMaterial BAMBOO_SAPLING; + public static final CompatibleMaterial BAMBOO; + public static final CompatibleMaterial WOOL; + public static final CompatibleMaterial TNT; + public static final CompatibleMaterial LEAVES; + public static final CompatibleMaterial GLASS; + public static final CompatibleMaterial ICE; + public static final CompatibleMaterial CACTUS; + public static final CompatibleMaterial STONE; + public static final CompatibleMaterial METAL; + public static final CompatibleMaterial SNOW_BLOCK; + public static final CompatibleMaterial REPAIR_STATION; + public static final CompatibleMaterial BARRIER; + public static final CompatibleMaterial PISTON; + public static final CompatibleMaterial MOSS_BLOCK; + public static final CompatibleMaterial GOURD; + public static final CompatibleMaterial EGG; + public static final CompatibleMaterial CAKE; + public static final CompatibleMaterial AMETHYST; + public static final CompatibleMaterial POWDER_SNOW; + private final MapColor color; + private final PistonBehavior pistonBehavior; + private final boolean burnable; + private final boolean liquid; + private final boolean replaceable; + private final boolean solid; + + public CompatibleMaterial(MapColor color, boolean liquid, boolean solid, boolean burnable, boolean replaceable, PistonBehavior pistonBehavior) { + this.color = color; + this.liquid = liquid; + this.solid = solid; + this.burnable = burnable; + this.replaceable = replaceable; + this.pistonBehavior = pistonBehavior; + } + + public boolean isLiquid() { + return this.liquid; + } + + public boolean isSolid() { + return this.solid; + } + + public boolean isBurnable() { + return this.burnable; + } + + public boolean isReplaceable() { + return this.replaceable; + } + + public PistonBehavior getPistonBehavior() { + return this.pistonBehavior; + } + + public MapColor getColor() { + return this.color; + } + + static { + AIR = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().replaceable().build(); + STRUCTURE_VOID = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().replaceable().build(); + PORTAL = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().blocksPistons().build(); + CARPET = (new Builder(MapColor.WHITE_GRAY)).allowsMovement().lightPassesThrough().notSolid().burnable().build(); + PLANT = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().build(); + UNDERWATER_PLANT = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().build(); + REPLACEABLE_PLANT = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().burnable().build(); + NETHER_SHOOTS = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().build(); + REPLACEABLE_UNDERWATER_PLANT = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().build(); + WATER = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().build(); + BUBBLE_COLUMN = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().build(); + LAVA = (new Builder(MapColor.BRIGHT_RED)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().build(); + SNOW_LAYER = (new Builder(MapColor.WHITE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().build(); + FIRE = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().build(); + DECORATION = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().build(); + COBWEB = (new Builder(MapColor.WHITE_GRAY)).allowsMovement().lightPassesThrough().destroyedByPiston().build(); + SCULK = (new Builder(MapColor.BLACK)).build(); + REDSTONE_LAMP = (new Builder(MapColor.CLEAR)).build(); + ORGANIC_PRODUCT = (new Builder(MapColor.LIGHT_BLUE_GRAY)).build(); + SOIL = (new Builder(MapColor.DIRT_BROWN)).build(); + SOLID_ORGANIC = (new Builder(MapColor.PALE_GREEN)).build(); + DENSE_ICE = (new Builder(MapColor.PALE_PURPLE)).build(); + AGGREGATE = (new Builder(MapColor.PALE_YELLOW)).build(); + SPONGE = (new Builder(MapColor.YELLOW)).build(); + SHULKER_BOX = (new Builder(MapColor.PURPLE)).build(); + WOOD = (new Builder(MapColor.OAK_TAN)).burnable().build(); + NETHER_WOOD = (new Builder(MapColor.OAK_TAN)).build(); + BAMBOO_SAPLING = (new Builder(MapColor.OAK_TAN)).burnable().destroyedByPiston().allowsMovement().build(); + BAMBOO = (new Builder(MapColor.OAK_TAN)).burnable().destroyedByPiston().build(); + WOOL = (new Builder(MapColor.WHITE_GRAY)).burnable().build(); + TNT = (new Builder(MapColor.BRIGHT_RED)).burnable().lightPassesThrough().build(); + LEAVES = (new Builder(MapColor.DARK_GREEN)).burnable().lightPassesThrough().destroyedByPiston().build(); + GLASS = (new Builder(MapColor.CLEAR)).lightPassesThrough().build(); + ICE = (new Builder(MapColor.PALE_PURPLE)).lightPassesThrough().build(); + CACTUS = (new Builder(MapColor.DARK_GREEN)).lightPassesThrough().destroyedByPiston().build(); + STONE = (new Builder(MapColor.STONE_GRAY)).build(); + METAL = (new Builder(MapColor.IRON_GRAY)).build(); + SNOW_BLOCK = (new Builder(MapColor.WHITE)).build(); + REPAIR_STATION = (new Builder(MapColor.IRON_GRAY)).blocksPistons().build(); + BARRIER = (new Builder(MapColor.CLEAR)).blocksPistons().build(); + PISTON = (new Builder(MapColor.STONE_GRAY)).blocksPistons().build(); + MOSS_BLOCK = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().build(); + GOURD = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().build(); + EGG = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().build(); + CAKE = (new Builder(MapColor.CLEAR)).destroyedByPiston().build(); + AMETHYST = (new Builder(MapColor.PURPLE)).build(); + POWDER_SNOW = (new Builder(MapColor.WHITE)).notSolid().allowsMovement().build(); + } + + public static class Builder { + private PistonBehavior pistonBehavior; + private boolean blocksMovement; + private boolean burnable; + private boolean liquid; + private boolean replaceable; + private boolean solid; + private final MapColor color; + private boolean blocksLight; + + public Builder(MapColor color) { + this.pistonBehavior = PistonBehavior.NORMAL; + this.blocksMovement = true; + this.solid = true; + this.blocksLight = true; + this.color = color; + } + + public Builder liquid() { + this.liquid = true; + return this; + } + + public Builder notSolid() { + this.solid = false; + return this; + } + + public Builder allowsMovement() { + this.blocksMovement = false; + return this; + } + + Builder lightPassesThrough() { + this.blocksLight = false; + return this; + } + + protected Builder burnable() { + this.burnable = true; + return this; + } + + public Builder replaceable() { + this.replaceable = true; + return this; + } + + protected Builder destroyedByPiston() { + this.pistonBehavior = PistonBehavior.DESTROY; + return this; + } + + protected Builder blocksPistons() { + this.pistonBehavior = PistonBehavior.BLOCK; + return this; + } + + public CompatibleMaterial build() { + return new CompatibleMaterial(this.color, this.liquid, this.solid, this.burnable, this.replaceable, this.pistonBehavior); + } + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index 43bf81f8e..5346b5f7d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -2,10 +2,12 @@ import ml.pkom.mcpitanlibarch.api.event.block.BlockScheduledTickEvent; import ml.pkom.mcpitanlibarch.api.event.block.BlockUseEvent; +import ml.pkom.mcpitanlibarch.api.event.block.OutlineShapeEvent; import ml.pkom.mcpitanlibarch.api.event.block.ScreenHandlerCreateEvent; import ml.pkom.mcpitanlibarch.api.util.TextUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandler; @@ -16,11 +18,14 @@ import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; import net.minecraft.world.World; -import javax.annotation.Nullable; import java.util.Random; +import javax.annotation.Nullable; + public class ExtendBlock extends Block { public ExtendBlock(Settings settings) { super(settings); @@ -30,6 +35,16 @@ public ExtendBlock(CompatibleBlockSettings settings) { super(settings.build()); } + public VoxelShape getOutlineShape(OutlineShapeEvent event) { + return super.getOutlineShape(event.state, event.world, event.pos, event.context); + } + + @Deprecated + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return super.getOutlineShape(state, world, pos, context); + } + public void scheduledTick(BlockScheduledTickEvent event) { super.scheduledTick(event.state, event.world, event.pos, event.random); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 32e89a72d..111be873d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -1,16 +1,22 @@ package ml.pkom.mcpitanlibarch.api.client; +import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawBackgroundArgs; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawForegroundArgs; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawMouseoverTooltipArgs; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.RenderArgs; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; public abstract class SimpleHandledScreen extends HandledScreen { @@ -31,35 +37,39 @@ protected T addDrawableChild_compati } @Override - protected void drawBackground(MatrixStack matrices, float delta, int mouseX, int mouseY) { - drawBackgroundOverride(matrices, delta, mouseX, mouseY); + protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { + DrawObjectDM drawObjectDM = new DrawObjectDM(context); + drawBackgroundOverride(new DrawBackgroundArgs(drawObjectDM, delta, mouseX, mouseY)); } - public abstract void drawBackgroundOverride(MatrixStack matrices, float delta, int mouseX, int mouseY); + public abstract void drawBackgroundOverride(DrawBackgroundArgs args); @Override - protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { - drawForegroundOverride(matrices, mouseX, mouseY); + protected void drawForeground(DrawContext context, int mouseX, int mouseY) { + DrawObjectDM drawObjectDM = new DrawObjectDM(context); + drawForegroundOverride(new DrawForegroundArgs(drawObjectDM, mouseX, mouseY)); } - protected void drawForegroundOverride(MatrixStack matrices, int mouseX, int mouseY) { - super.drawForeground(matrices, mouseX, mouseY); + protected void drawForegroundOverride(DrawForegroundArgs args) { + super.drawForeground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY); } - public void callDrawTexture(MatrixStack matrices, int x, int y, int u, int v, int width, int height) { - super.drawTexture(matrices, x, y, u, v, width, height); + public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x, int y, int u, int v, int width, int height) { + //ScreenUtil.setBackground(GUI); + //super.drawTexture(matrices, x, y, u, v, width, height); + drawObjectDM.getContext().drawTexture(texture, x, y, u, v, width, height); } - public void callRenderBackground(MatrixStack matrices) { - super.renderBackground(matrices); + public void callRenderBackground(DrawObjectDM drawObjectDM) { + super.renderBackground(drawObjectDM.getContext()); } - public void callDrawMouseoverTooltip(MatrixStack matrices, int x, int y) { - super.drawMouseoverTooltip(matrices, x, y); + public void callDrawMouseoverTooltip(DrawMouseoverTooltipArgs args) { + super.drawMouseoverTooltip(args.drawObjectDM.getContext(), args.mouseX, args.mouseY); } - public void renderOverride(MatrixStack matrices, int mouseX, int mouseY, float delta) { - super.render(matrices, mouseX, mouseY, delta); + public void renderOverride(RenderArgs args) { + super.render(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); } public void resizeOverride(MinecraftClient client, int width, int height) { @@ -88,7 +98,7 @@ public void fixScreen() { this.x = super.x; //(this.width - this.backgroundWidth) / 2; this.y = super.y; //(this.height - this.backgroundHeight) / 2; this.textRenderer = super.textRenderer; - this.itemRenderer = super.itemRenderer; + this.itemRenderer = MinecraftClient.getInstance().getItemRenderer(); this.width = super.width; this.height = super.height; } @@ -110,7 +120,6 @@ public void setTextRenderer(TextRenderer textRenderer) { public void setItemRenderer(ItemRenderer itemRenderer) { this.itemRenderer = itemRenderer; - super.itemRenderer = itemRenderer; } public void setWidth(int width) { @@ -142,8 +151,9 @@ public int getBackgroundHeight() { } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - renderOverride(matrices, mouseX, mouseY, delta); + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + DrawObjectDM drawObjectDM = new DrawObjectDM(context); + renderOverride(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java new file mode 100644 index 000000000..2be57f7ae --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java @@ -0,0 +1,33 @@ +package ml.pkom.mcpitanlibarch.api.client.render; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.util.math.MatrixStack; + +public class DrawObjectDM { + private MatrixStack stack; + private DrawContext context; + + public DrawObjectDM(DrawContext context) { + this.context = context; + } + + public DrawObjectDM(MatrixStack stack) { + this.stack = stack; + } + + public DrawContext getContext() { + return context; + } + + public MatrixStack getStack() { + return stack; + } + + public void setContext(DrawContext context) { + this.context = context; + } + + public void setStack(MatrixStack stack) { + this.stack = stack; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawBackgroundArgs.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawBackgroundArgs.java new file mode 100644 index 000000000..66370378b --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawBackgroundArgs.java @@ -0,0 +1,48 @@ +package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; + +import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; + +public class DrawBackgroundArgs { + public DrawObjectDM drawObjectDM; + public float delta; + public int mouseX, mouseY; + + public DrawBackgroundArgs(DrawObjectDM drawObjectDM, float delta, int mouseX, int mouseY) { + setDrawObjectDM(drawObjectDM); + setDelta(delta); + setMouseX(mouseX); + setMouseY(mouseY); + } + + public void setDrawObjectDM(DrawObjectDM drawObjectDM) { + this.drawObjectDM = drawObjectDM; + } + + public void setDelta(float delta) { + this.delta = delta; + } + + public void setMouseX(int mouseX) { + this.mouseX = mouseX; + } + + public void setMouseY(int mouseY) { + this.mouseY = mouseY; + } + + public DrawObjectDM getDrawObjectDM() { + return drawObjectDM; + } + + public float getDelta() { + return delta; + } + + public int getMouseX() { + return mouseX; + } + + public int getMouseY() { + return mouseY; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawForegroundArgs.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawForegroundArgs.java new file mode 100644 index 000000000..d4b8b854b --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawForegroundArgs.java @@ -0,0 +1,38 @@ +package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; + +import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; + +public class DrawForegroundArgs { + public DrawObjectDM drawObjectDM; + public int mouseX, mouseY; + + public DrawForegroundArgs(DrawObjectDM drawObjectDM, int mouseX, int mouseY) { + setDrawObjectDM(drawObjectDM); + setMouseX(mouseX); + setMouseY(mouseY); + } + + public void setDrawObjectDM(DrawObjectDM drawObjectDM) { + this.drawObjectDM = drawObjectDM; + } + + public void setMouseX(int mouseX) { + this.mouseX = mouseX; + } + + public void setMouseY(int mouseY) { + this.mouseY = mouseY; + } + + public DrawObjectDM getDrawObjectDM() { + return drawObjectDM; + } + + public int getMouseX() { + return mouseX; + } + + public int getMouseY() { + return mouseY; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java new file mode 100644 index 000000000..2e2c65aca --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java @@ -0,0 +1,38 @@ +package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; + +import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; + +public class DrawMouseoverTooltipArgs { + public DrawObjectDM drawObjectDM; + public int mouseX, mouseY; + + public DrawMouseoverTooltipArgs(DrawObjectDM drawObjectDM, int mouseX, int mouseY) { + setDrawObjectDM(drawObjectDM); + setMouseX(mouseX); + setMouseY(mouseY); + } + + public void setDrawObjectDM(DrawObjectDM drawObjectDM) { + this.drawObjectDM = drawObjectDM; + } + + public void setMouseX(int mouseX) { + this.mouseX = mouseX; + } + + public void setMouseY(int mouseY) { + this.mouseY = mouseY; + } + + public DrawObjectDM getDrawObjectDM() { + return drawObjectDM; + } + + public int getMouseX() { + return mouseX; + } + + public int getMouseY() { + return mouseY; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/RenderArgs.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/RenderArgs.java new file mode 100644 index 000000000..aa6664254 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/RenderArgs.java @@ -0,0 +1,48 @@ +package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; + +import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; + +public class RenderArgs { + public DrawObjectDM drawObjectDM; + public float delta; + public int mouseX, mouseY; + + public RenderArgs(DrawObjectDM drawObjectDM, int mouseX, int mouseY, float delta) { + setDrawObjectDM(drawObjectDM); + setDelta(delta); + setMouseX(mouseX); + setMouseY(mouseY); + } + + public void setDrawObjectDM(DrawObjectDM drawObjectDM) { + this.drawObjectDM = drawObjectDM; + } + + public void setDelta(float delta) { + this.delta = delta; + } + + public void setMouseX(int mouseX) { + this.mouseX = mouseX; + } + + public void setMouseY(int mouseY) { + this.mouseY = mouseY; + } + + public DrawObjectDM getDrawObjectDM() { + return drawObjectDM; + } + + public float getDelta() { + return delta; + } + + public int getMouseX() { + return mouseX; + } + + public int getMouseY() { + return mouseY; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntity.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntity.java index e4e7126c2..46325e4d3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntity.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntity.java @@ -58,4 +58,9 @@ public NbtCompound fromTag(NbtCompound nbt) { this.readNbt(NbtTag.from(nbt)); return nbt; } + + @Override + public World getWorld() { + return super.getWorld(); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index b1523c947..34b4f0f13 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -166,7 +166,7 @@ public boolean isCreative() { } public World getWorld() { - return getEntity().world; + return getEntity().getWorld(); } public ScreenHandler getCurrentScreenHandler() { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java index 46260a71f..f702c656d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java @@ -58,7 +58,7 @@ public StringRange getRange() { } public void sendSuccess(Text message, boolean broadcastToOps) { - context.getSource().sendFeedback(message, broadcastToOps); + context.getSource().sendFeedback(() -> message, broadcastToOps); } public void sendFailure(Text message) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/OutlineShapeEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/OutlineShapeEvent.java new file mode 100644 index 000000000..ad8722a0f --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/OutlineShapeEvent.java @@ -0,0 +1,37 @@ +package ml.pkom.mcpitanlibarch.api.event.block; + +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; + +public class OutlineShapeEvent extends BaseEvent { + public BlockState state; + public BlockView world; + public BlockPos pos; + public ShapeContext context; + + public OutlineShapeEvent(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + this.state = state; + this.world = world; + this.pos = pos; + this.context = context; + } + + public BlockPos getPos() { + return pos; + } + + public BlockState getState() { + return state; + } + + public BlockView getWorld() { + return world; + } + + public ShapeContext getContext() { + return context; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java index fbff538a5..1aedf1b7b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java @@ -21,7 +21,7 @@ public class ItemUseOnBlockEvent extends BaseEvent { public BlockPos blockPos; public ItemUseOnBlockEvent(PlayerEntity player, Hand hand, BlockHitResult hit) { - this(player.world, player, hand, player.getStackInHand(hand), hit); + this(player.getWorld(), player, hand, player.getStackInHand(hand), hit); } public ItemUseOnBlockEvent(World world, @Nullable PlayerEntity player, Hand hand, ItemStack stack, BlockHitResult hit) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 1639f9754..afb59f84f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -3,6 +3,7 @@ import dev.architectury.registry.registries.RegistrySupplier; import ml.pkom.mcpitanlibarch.MCPitanLibarch; import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; +import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; @@ -12,7 +13,6 @@ import ml.pkom.mcpitanlibarch.core.registry.FuelRegistry; import ml.pkom.mcpitanlibarch.core.registry.MCPLRegistry; import net.minecraft.block.Block; -import net.minecraft.block.Material; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; @@ -46,7 +46,7 @@ public RegistryEvent registerItem(Identifier id, Supplier supplier) } public RegistryEvent registerBlock(Identifier id, Supplier supplier) { - if (MCPitanLibarch.blockBlackList.contains(id.toString())) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(Material.STONE)); + if (MCPitanLibarch.blockBlackList.contains(id.toString())) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); return new RegistryEvent<>(mcplr.registryBlock(id, supplier)); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java index 97d6fceb5..3f58b6f97 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java @@ -3,6 +3,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.collection.DefaultedList; +import java.util.Objects; + public class InventoryUtil { public static boolean insertItem(ItemStack insertStack, DefaultedList inventory) { return insertItem(insertStack, inventory, false); @@ -37,6 +39,6 @@ public static boolean canMergeItems(ItemStack first, ItemStack second) { if (first.getCount() + second.getCount() > first.getMaxCount()) { return false; } - return ItemStack.areNbtEqual(first, second); + return ItemStackUtil.areNbtEqual(first, second); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java new file mode 100644 index 000000000..961b651e4 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java @@ -0,0 +1,23 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.item.ItemStack; + +import java.util.Objects; + +public class ItemStackUtil { + public static ItemStack copy(ItemStack stack) { + return stack.copy(); + } + + public static ItemStack copyWithCount(ItemStack stack, int count) { + return stack.copyWithCount(count); + } + + public static boolean areItemsEqual(ItemStack left, ItemStack right) { + return ItemStack.areItemsEqual(left, right); + } + + public static boolean areNbtEqual(ItemStack left, ItemStack right) { + return Objects.equals(left.getNbt(), right.getNbt()); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java index 31ed9945c..898fbb80c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java @@ -1,5 +1,8 @@ package ml.pkom.mcpitanlibarch.test; +import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; +import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; +import ml.pkom.mcpitanlibarch.api.block.ExtendBlock; import ml.pkom.mcpitanlibarch.api.command.CommandRegistry; import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; import ml.pkom.mcpitanlibarch.api.item.DefaultItemGroups; @@ -7,7 +10,6 @@ import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; -import net.minecraft.block.Material; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.screen.ScreenHandlerType; @@ -44,12 +46,12 @@ public static void init() { //EntityTypeBuilder.create().setSpawnGroup(SpawnGroup.AMBIENT).setEntityFactory(((type, world) -> new ZombieEntity((EntityType) type, world))); EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new Item(new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS, id("example_item")))); - EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new Block(AbstractBlock.Settings.of(Material.STONE))); + EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new ExtendBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE))); EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); - EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(AbstractBlock.Settings.of(Material.STONE))); + EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE).build())); EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> new BlockItem(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); registry.allRegister(); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java index 320974312..1dd4fab98 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java @@ -1,6 +1,9 @@ package ml.pkom.mcpitanlibarch.test; import ml.pkom.mcpitanlibarch.api.client.SimpleHandledScreen; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawBackgroundArgs; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawMouseoverTooltipArgs; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.RenderArgs; import ml.pkom.mcpitanlibarch.api.util.client.ScreenUtil; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.client.util.math.MatrixStack; @@ -27,15 +30,14 @@ public void initOverride() { } @Override - public void drawBackgroundOverride(MatrixStack matrices, float delta, int mouseX, int mouseY) { - ScreenUtil.setBackground(GUI); - callDrawTexture(matrices, x, y, 0, 0, this.backgroundWidth, this.backgroundHeight); + public void drawBackgroundOverride(DrawBackgroundArgs args) { + callDrawTexture(args.drawObjectDM, GUI, x, y, 0, 0, this.backgroundWidth, this.backgroundHeight); } @Override - public void renderOverride(MatrixStack matrices, int mouseX, int mouseY, float delta) { - this.callRenderBackground(matrices); - super.renderOverride(matrices, mouseX, mouseY, delta); - this.callDrawMouseoverTooltip(matrices, mouseX, mouseY); + public void renderOverride(RenderArgs args) { + this.callRenderBackground(args.drawObjectDM); + super.renderOverride(args); + this.callDrawMouseoverTooltip(new DrawMouseoverTooltipArgs(args.drawObjectDM, args.mouseX, args.mouseY)); } } diff --git a/info.properties b/info.properties index c23a3d388..52d3dff67 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.3 +mod_version=1.6.4 maven_group=ml.pkom \ No newline at end of file diff --git a/quilt/build.gradle b/quilt/build.gradle index afc433f53..ee067a98e 100644 --- a/quilt/build.gradle +++ b/quilt/build.gradle @@ -32,7 +32,7 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionQuilt")) { transitive false } - shadowCommon 'org.yaml:snakeyaml:1.33' + shadowCommon 'org.yaml:snakeyaml:2.0' } From f93c0adf067bc7506ee30b67545ae06cbe8c3940 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 27 May 2023 23:31:27 +0900 Subject: [PATCH 159/617] add api to 1.20 --- .../api/block/CompatibleBlockSettings.java | 37 ++++--------------- .../api/block/CompatibleMaterial.java | 13 +++++++ .../api/client/SimpleHandledScreen.java | 31 ++++++++-------- .../api/client/render/DrawObjectDM.java | 16 +------- .../api/event/ServerCommandEvent.java | 2 +- .../api/util/ItemStackUtil.java | 2 +- 6 files changed, 39 insertions(+), 62 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java index be81a6b03..677ff2634 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java @@ -12,46 +12,23 @@ public class CompatibleBlockSettings { private final AbstractBlock.Settings settings; public CompatibleBlockSettings() { - this.settings = AbstractBlock.Settings.create(); - } - - private static CompatibleBlockSettings copyCompatibleMaterial(CompatibleMaterial material, CompatibleBlockSettings settings) { - settings.mapColor(material.getColor()); - if (material.isLiquid()) - settings.settings.liquid(); - if (material.isSolid()) - settings.settings.solid(); - if (material.isReplaceable()) - settings.settings.replaceable(); - if (material.isSolid()) - settings.settings.solid(); - if (material.isBurnable()) - settings.settings.burnable(); - settings.settings.pistonBehavior(material.getPistonBehavior()); - return settings; + this.settings = AbstractBlock.Settings.of(Material.STONE); } public CompatibleBlockSettings(CompatibleMaterial material, MapColor mapColor) { - this.settings = AbstractBlock.Settings.create(); - copyCompatibleMaterial(material, this); - mapColor(mapColor); + this.settings = AbstractBlock.Settings.of(material.getMaterial(), mapColor); } public CompatibleBlockSettings(CompatibleMaterial material, DyeColor dyeColor) { - this.settings = AbstractBlock.Settings.create(); - copyCompatibleMaterial(material, this); - mapColor(dyeColor); + this.settings = AbstractBlock.Settings.of(material.getMaterial(), dyeColor); } public CompatibleBlockSettings(CompatibleMaterial material) { - this.settings = AbstractBlock.Settings.create(); - copyCompatibleMaterial(material, this); + this.settings = AbstractBlock.Settings.of(material.getMaterial()); } public CompatibleBlockSettings(CompatibleMaterial material, Function mapColor) { - this.settings = AbstractBlock.Settings.create(); - copyCompatibleMaterial(material, this); - mapColor(mapColor); + this.settings = AbstractBlock.Settings.of(material.getMaterial(), mapColor); } public static CompatibleBlockSettings of(CompatibleMaterial material, MapColor mapColor) { @@ -109,12 +86,12 @@ public CompatibleBlockSettings mapColor(MapColor color) { } public CompatibleBlockSettings mapColor(DyeColor color) { - settings.mapColor(color); + settings.mapColor(color.getMapColor()); return this; } + @Deprecated public CompatibleBlockSettings mapColor(Function color) { - settings.mapColor(color); return this; } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java index 6a6fb0384..6b13782c5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java @@ -1,6 +1,7 @@ package ml.pkom.mcpitanlibarch.api.block; import net.minecraft.block.MapColor; +import net.minecraft.block.Material; import net.minecraft.block.piston.PistonBehavior; public final class CompatibleMaterial { @@ -57,6 +58,7 @@ public final class CompatibleMaterial { private final boolean liquid; private final boolean replaceable; private final boolean solid; + private Material material; public CompatibleMaterial(MapColor color, boolean liquid, boolean solid, boolean burnable, boolean replaceable, PistonBehavior pistonBehavior) { this.color = color; @@ -65,6 +67,17 @@ public CompatibleMaterial(MapColor color, boolean liquid, boolean solid, boolean this.burnable = burnable; this.replaceable = replaceable; this.pistonBehavior = pistonBehavior; + this.material = Material.STONE; + } + + private CompatibleMaterial(Material material, MapColor color, boolean liquid, boolean solid, boolean burnable, boolean replaceable, PistonBehavior pistonBehavior) { + this(material.getColor(), material.isLiquid(), material.isSolid(), material.isBurnable(), material.isReplaceable(), material.getPistonBehavior()); + this.material = material; + } + + @Deprecated + public Material getMaterial() { + return material; } public boolean isLiquid() { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 111be873d..90444ba17 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -5,14 +5,15 @@ import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawForegroundArgs; import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawMouseoverTooltipArgs; import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.RenderArgs; +import ml.pkom.mcpitanlibarch.api.util.client.ScreenUtil; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; @@ -37,39 +38,38 @@ protected T addDrawableChild_compati } @Override - protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { - DrawObjectDM drawObjectDM = new DrawObjectDM(context); + protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mouseY) { + DrawObjectDM drawObjectDM = new DrawObjectDM(stack); drawBackgroundOverride(new DrawBackgroundArgs(drawObjectDM, delta, mouseX, mouseY)); } public abstract void drawBackgroundOverride(DrawBackgroundArgs args); @Override - protected void drawForeground(DrawContext context, int mouseX, int mouseY) { - DrawObjectDM drawObjectDM = new DrawObjectDM(context); + protected void drawForeground(MatrixStack stack, int mouseX, int mouseY) { + DrawObjectDM drawObjectDM = new DrawObjectDM(stack); drawForegroundOverride(new DrawForegroundArgs(drawObjectDM, mouseX, mouseY)); } protected void drawForegroundOverride(DrawForegroundArgs args) { - super.drawForeground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY); + super.drawForeground(args.drawObjectDM.getStack(), args.mouseX, args.mouseY); } public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x, int y, int u, int v, int width, int height) { - //ScreenUtil.setBackground(GUI); - //super.drawTexture(matrices, x, y, u, v, width, height); - drawObjectDM.getContext().drawTexture(texture, x, y, u, v, width, height); + ScreenUtil.setBackground(texture); + drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height); } public void callRenderBackground(DrawObjectDM drawObjectDM) { - super.renderBackground(drawObjectDM.getContext()); + super.renderBackground(drawObjectDM.getStack()); } public void callDrawMouseoverTooltip(DrawMouseoverTooltipArgs args) { - super.drawMouseoverTooltip(args.drawObjectDM.getContext(), args.mouseX, args.mouseY); + super.drawMouseoverTooltip(args.drawObjectDM.getStack(), args.mouseX, args.mouseY); } public void renderOverride(RenderArgs args) { - super.render(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + super.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); } public void resizeOverride(MinecraftClient client, int width, int height) { @@ -98,7 +98,7 @@ public void fixScreen() { this.x = super.x; //(this.width - this.backgroundWidth) / 2; this.y = super.y; //(this.height - this.backgroundHeight) / 2; this.textRenderer = super.textRenderer; - this.itemRenderer = MinecraftClient.getInstance().getItemRenderer(); + this.itemRenderer = super.itemRenderer; this.width = super.width; this.height = super.height; } @@ -120,6 +120,7 @@ public void setTextRenderer(TextRenderer textRenderer) { public void setItemRenderer(ItemRenderer itemRenderer) { this.itemRenderer = itemRenderer; + super.itemRenderer = itemRenderer; } public void setWidth(int width) { @@ -151,8 +152,8 @@ public int getBackgroundHeight() { } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - DrawObjectDM drawObjectDM = new DrawObjectDM(context); + public void render(MatrixStack stack, int mouseX, int mouseY, float delta) { + DrawObjectDM drawObjectDM = new DrawObjectDM(stack); renderOverride(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java index 2be57f7ae..b0d77a58f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java @@ -1,32 +1,18 @@ package ml.pkom.mcpitanlibarch.api.client.render; -import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; public class DrawObjectDM { private MatrixStack stack; - private DrawContext context; - - public DrawObjectDM(DrawContext context) { - this.context = context; - } public DrawObjectDM(MatrixStack stack) { this.stack = stack; } - public DrawContext getContext() { - return context; - } - public MatrixStack getStack() { return stack; } - - public void setContext(DrawContext context) { - this.context = context; - } - + public void setStack(MatrixStack stack) { this.stack = stack; } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java index f702c656d..46260a71f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java @@ -58,7 +58,7 @@ public StringRange getRange() { } public void sendSuccess(Text message, boolean broadcastToOps) { - context.getSource().sendFeedback(() -> message, broadcastToOps); + context.getSource().sendFeedback(message, broadcastToOps); } public void sendFailure(Text message) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java index 961b651e4..5877cbd8a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java @@ -18,6 +18,6 @@ public static boolean areItemsEqual(ItemStack left, ItemStack right) { } public static boolean areNbtEqual(ItemStack left, ItemStack right) { - return Objects.equals(left.getNbt(), right.getNbt()); + return ItemStack.areNbtEqual(left, right); } } From 23343b249a39d4ed263f42417766dc0b063c80d9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 27 May 2023 23:39:47 +0900 Subject: [PATCH 160/617] set material --- .../api/block/CompatibleMaterial.java | 102 +++++++++--------- 1 file changed, 54 insertions(+), 48 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java index 6b13782c5..7390db661 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java @@ -105,53 +105,53 @@ public MapColor getColor() { } static { - AIR = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().replaceable().build(); - STRUCTURE_VOID = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().replaceable().build(); - PORTAL = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().blocksPistons().build(); - CARPET = (new Builder(MapColor.WHITE_GRAY)).allowsMovement().lightPassesThrough().notSolid().burnable().build(); - PLANT = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().build(); - UNDERWATER_PLANT = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().build(); - REPLACEABLE_PLANT = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().burnable().build(); - NETHER_SHOOTS = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().build(); - REPLACEABLE_UNDERWATER_PLANT = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().build(); - WATER = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().build(); - BUBBLE_COLUMN = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().build(); - LAVA = (new Builder(MapColor.BRIGHT_RED)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().build(); - SNOW_LAYER = (new Builder(MapColor.WHITE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().build(); - FIRE = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().build(); - DECORATION = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().build(); - COBWEB = (new Builder(MapColor.WHITE_GRAY)).allowsMovement().lightPassesThrough().destroyedByPiston().build(); - SCULK = (new Builder(MapColor.BLACK)).build(); - REDSTONE_LAMP = (new Builder(MapColor.CLEAR)).build(); - ORGANIC_PRODUCT = (new Builder(MapColor.LIGHT_BLUE_GRAY)).build(); - SOIL = (new Builder(MapColor.DIRT_BROWN)).build(); - SOLID_ORGANIC = (new Builder(MapColor.PALE_GREEN)).build(); - DENSE_ICE = (new Builder(MapColor.PALE_PURPLE)).build(); - AGGREGATE = (new Builder(MapColor.PALE_YELLOW)).build(); - SPONGE = (new Builder(MapColor.YELLOW)).build(); - SHULKER_BOX = (new Builder(MapColor.PURPLE)).build(); - WOOD = (new Builder(MapColor.OAK_TAN)).burnable().build(); - NETHER_WOOD = (new Builder(MapColor.OAK_TAN)).build(); - BAMBOO_SAPLING = (new Builder(MapColor.OAK_TAN)).burnable().destroyedByPiston().allowsMovement().build(); - BAMBOO = (new Builder(MapColor.OAK_TAN)).burnable().destroyedByPiston().build(); - WOOL = (new Builder(MapColor.WHITE_GRAY)).burnable().build(); - TNT = (new Builder(MapColor.BRIGHT_RED)).burnable().lightPassesThrough().build(); - LEAVES = (new Builder(MapColor.DARK_GREEN)).burnable().lightPassesThrough().destroyedByPiston().build(); - GLASS = (new Builder(MapColor.CLEAR)).lightPassesThrough().build(); - ICE = (new Builder(MapColor.PALE_PURPLE)).lightPassesThrough().build(); - CACTUS = (new Builder(MapColor.DARK_GREEN)).lightPassesThrough().destroyedByPiston().build(); - STONE = (new Builder(MapColor.STONE_GRAY)).build(); - METAL = (new Builder(MapColor.IRON_GRAY)).build(); - SNOW_BLOCK = (new Builder(MapColor.WHITE)).build(); - REPAIR_STATION = (new Builder(MapColor.IRON_GRAY)).blocksPistons().build(); - BARRIER = (new Builder(MapColor.CLEAR)).blocksPistons().build(); - PISTON = (new Builder(MapColor.STONE_GRAY)).blocksPistons().build(); - MOSS_BLOCK = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().build(); - GOURD = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().build(); - EGG = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().build(); - CAKE = (new Builder(MapColor.CLEAR)).destroyedByPiston().build(); - AMETHYST = (new Builder(MapColor.PURPLE)).build(); - POWDER_SNOW = (new Builder(MapColor.WHITE)).notSolid().allowsMovement().build(); + AIR = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().replaceable().material(Material.AIR).build(); + STRUCTURE_VOID = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().replaceable().material(Material.STRUCTURE_VOID).build(); + PORTAL = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().blocksPistons().material(Material.PORTAL).build(); + CARPET = (new Builder(MapColor.WHITE_GRAY)).allowsMovement().lightPassesThrough().notSolid().burnable().material(Material.CARPET).build(); + PLANT = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().material(Material.PLANT).build(); + UNDERWATER_PLANT = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().material(Material.UNDERWATER_PLANT).build(); + REPLACEABLE_PLANT = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().burnable().material(Material.REPLACEABLE_PLANT).build(); + NETHER_SHOOTS = (new Builder(MapColor.DARK_GREEN)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().material(Material.NETHER_SHOOTS).build(); + REPLACEABLE_UNDERWATER_PLANT = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().material(Material.REPLACEABLE_UNDERWATER_PLANT).build(); + WATER = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().material(Material.WATER).build(); + BUBBLE_COLUMN = (new Builder(MapColor.WATER_BLUE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().material(Material.BUBBLE_COLUMN).build(); + LAVA = (new Builder(MapColor.BRIGHT_RED)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().liquid().material(Material.LAVA).build(); + SNOW_LAYER = (new Builder(MapColor.WHITE)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().material(Material.SNOW_LAYER).build(); + FIRE = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().replaceable().material(Material.FIRE).build(); + DECORATION = (new Builder(MapColor.CLEAR)).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().material(Material.DECORATION).build(); + COBWEB = (new Builder(MapColor.WHITE_GRAY)).allowsMovement().lightPassesThrough().destroyedByPiston().material(Material.COBWEB).build(); + SCULK = (new Builder(MapColor.BLACK)).material(Material.SCULK).build(); + REDSTONE_LAMP = (new Builder(MapColor.CLEAR)).material(Material.REDSTONE_LAMP).build(); + ORGANIC_PRODUCT = (new Builder(MapColor.LIGHT_BLUE_GRAY)).material(Material.ORGANIC_PRODUCT).build(); + SOIL = (new Builder(MapColor.DIRT_BROWN)).material(Material.SOIL).build(); + SOLID_ORGANIC = (new Builder(MapColor.PALE_GREEN)).material(Material.SOLID_ORGANIC).build(); + DENSE_ICE = (new Builder(MapColor.PALE_PURPLE)).material(Material.DENSE_ICE).build(); + AGGREGATE = (new Builder(MapColor.PALE_YELLOW)).material(Material.AGGREGATE).build(); + SPONGE = (new Builder(MapColor.YELLOW)).material(Material.SPONGE).build(); + SHULKER_BOX = (new Builder(MapColor.PURPLE)).material(Material.SHULKER_BOX).build(); + WOOD = (new Builder(MapColor.OAK_TAN)).burnable().material(Material.WOOD).build(); + NETHER_WOOD = (new Builder(MapColor.OAK_TAN)).material(Material.NETHER_WOOD).build(); + BAMBOO_SAPLING = (new Builder(MapColor.OAK_TAN)).burnable().destroyedByPiston().allowsMovement().material(Material.BAMBOO_SAPLING).build(); + BAMBOO = (new Builder(MapColor.OAK_TAN)).burnable().destroyedByPiston().material(Material.BAMBOO).build(); + WOOL = (new Builder(MapColor.WHITE_GRAY)).burnable().material(Material.WOOL).build(); + TNT = (new Builder(MapColor.BRIGHT_RED)).burnable().lightPassesThrough().material(Material.TNT).build(); + LEAVES = (new Builder(MapColor.DARK_GREEN)).burnable().lightPassesThrough().destroyedByPiston().material(Material.LEAVES).build(); + GLASS = (new Builder(MapColor.CLEAR)).lightPassesThrough().material(Material.GLASS).build(); + ICE = (new Builder(MapColor.PALE_PURPLE)).lightPassesThrough().material(Material.ICE).build(); + CACTUS = (new Builder(MapColor.DARK_GREEN)).lightPassesThrough().destroyedByPiston().material(Material.CACTUS).build(); + STONE = (new Builder(MapColor.STONE_GRAY)).material(Material.STONE).build(); + METAL = (new Builder(MapColor.IRON_GRAY)).material(Material.METAL).build(); + SNOW_BLOCK = (new Builder(MapColor.WHITE)).material(Material.SNOW_BLOCK).build(); + REPAIR_STATION = (new Builder(MapColor.IRON_GRAY)).blocksPistons().material(Material.REPAIR_STATION).build(); + BARRIER = (new Builder(MapColor.CLEAR)).blocksPistons().material(Material.BARRIER).build(); + PISTON = (new Builder(MapColor.STONE_GRAY)).blocksPistons().material(Material.PISTON).build(); + MOSS_BLOCK = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().material(Material.MOSS_BLOCK).build(); + GOURD = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().material(Material.GOURD).build(); + EGG = (new Builder(MapColor.DARK_GREEN)).destroyedByPiston().material(Material.EGG).build(); + CAKE = (new Builder(MapColor.CLEAR)).destroyedByPiston().material(Material.CAKE).build(); + AMETHYST = (new Builder(MapColor.PURPLE)).material(Material.AMETHYST).build(); + POWDER_SNOW = (new Builder(MapColor.WHITE)).notSolid().allowsMovement().material(Material.POWDER_SNOW).build(); } public static class Builder { @@ -163,6 +163,7 @@ public static class Builder { private boolean solid; private final MapColor color; private boolean blocksLight; + private Material material = Material.STONE; public Builder(MapColor color) { this.pistonBehavior = PistonBehavior.NORMAL; @@ -212,8 +213,13 @@ protected Builder blocksPistons() { return this; } + protected Builder material(Material material) { + this.material = material; + return this; + } + public CompatibleMaterial build() { - return new CompatibleMaterial(this.color, this.liquid, this.solid, this.burnable, this.replaceable, this.pistonBehavior); + return new CompatibleMaterial(material, this.color, this.liquid, this.solid, this.burnable, this.replaceable, this.pistonBehavior); } } } From 3853dbbb825396a7b303961fa6755c293188d66a Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 27 May 2023 23:48:31 +0900 Subject: [PATCH 161/617] port to 1.19.2 --- .../java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java index 5877cbd8a..e4765aa5a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java @@ -10,7 +10,9 @@ public static ItemStack copy(ItemStack stack) { } public static ItemStack copyWithCount(ItemStack stack, int count) { - return stack.copyWithCount(count); + ItemStack copy = stack.copy(); + copy.setCount(count); + return copy; } public static boolean areItemsEqual(ItemStack left, ItemStack right) { From 2fe10e5d282515704c9dba602408178a82caa09c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 11 Jun 2023 23:15:58 +0900 Subject: [PATCH 162/617] Fix CompatibleSlot --- .../api/gui/slot/CompatibleSlot.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java index 5aece980d..3e67fdf41 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java @@ -52,4 +52,28 @@ public ItemStack takeStack(int amount) { public boolean hasStack() { return callHasStack(); } + + public Inventory callGetInventory() { + return inventory; + } + + public int callGetIndex() { + return super.getIndex(); + } + + public int callGetId() { + return super.id; + } + + public int callGetX() { + return super.x; + } + + public int callGetY() { + return super.y; + } + + public void callMarkDirty() { + super.markDirty(); + } } From 6b537575497c16662c9fe2a0fb0e44ceb48a1e89 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 11 Jun 2023 23:22:40 +0900 Subject: [PATCH 163/617] 1.6.5 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 52d3dff67..c540a3300 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.4 +mod_version=1.6.5 maven_group=ml.pkom \ No newline at end of file From be81622498d23f2019386676783ed5d0e6b9ff10 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 12 Jun 2023 17:20:41 +0900 Subject: [PATCH 164/617] 1.6.6 RendererUtil.drawText 119 --- .../api/util/client/ScreenUtil.java | 17 +++++++++++++++++ info.properties | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index bf0c763dd..0b7565521 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -2,12 +2,15 @@ import ml.pkom.mcpitanlibarch.api.client.gui.widget.RedrawableTexturedButtonWidget; import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; +import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -84,4 +87,18 @@ public static void setFocused(TextFieldWidget widget, boolean focused) { widget.setTextFieldFocused(focused); } } + + public static class RendererUtil { + public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, Text text, int x, int y, int color) { + return renderer.draw(drawObjectDM.getStack(), text, x, y, color); + } + + public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, String text, int x, int y, int color) { + return renderer.draw(drawObjectDM.getStack(), text, x, y, color); + } + + public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, OrderedText text, int x, int y, int color) { + return renderer.draw(drawObjectDM.getStack(), text, x, y, color); + } + } } diff --git a/info.properties b/info.properties index c540a3300..b1797ba28 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.5 +mod_version=1.6.6 maven_group=ml.pkom \ No newline at end of file From adfa712f4ddc5f642bc1c113932ed7474d27ad8b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Jun 2023 23:19:28 +0900 Subject: [PATCH 165/617] add RendererUtil.drawTexture add ItemGroup Register --- .../api/registry/ArchRegistry.java | 8 ++++++ .../api/util/client/ScreenUtil.java | 11 ++++++++ .../core/registry/MCPLRegistry1_20.java | 26 +++++++++++++++++++ info.properties | 2 +- 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index afb59f84f..de4f810bd 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -12,12 +12,14 @@ import ml.pkom.mcpitanlibarch.api.util.ItemUtil; import ml.pkom.mcpitanlibarch.core.registry.FuelRegistry; import ml.pkom.mcpitanlibarch.core.registry.MCPLRegistry; +import ml.pkom.mcpitanlibarch.core.registry.MCPLRegistry1_20; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; +import net.minecraft.item.ItemGroup; import net.minecraft.particle.ParticleType; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.SoundEvent; @@ -29,9 +31,11 @@ public class ArchRegistry { private final MCPLRegistry mcplr; + private final MCPLRegistry1_20 mcplr1_20; public ArchRegistry(String MOD_ID) { mcplr = new MCPLRegistry(MOD_ID); + mcplr1_20 = new MCPLRegistry1_20(mcplr); } public static ArchRegistry createRegistry(String MOD_ID) { @@ -92,6 +96,10 @@ public RegistryEvent> registerParticleType(Identifier id, Suppli return new RegistryEvent<>(mcplr.registryParticleType(id, supplier)); } + public RegistryEvent registerItemGroup(Identifier id, Supplier supplier) { + return new RegistryEvent<>(null); + } + public static void registerFuel(int time, ItemConvertible... item) { FuelRegistry.register(time, item); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index 0b7565521..ba2abe786 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -7,6 +7,7 @@ import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; @@ -100,5 +101,15 @@ public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, Str public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, OrderedText text, int x, int y, int color) { return renderer.draw(drawObjectDM.getStack(), text, x, y, color); } + + public static void drawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x, int y, float u, float v, int width, int height, int textureWidth, int textureHeight) { + RenderUtil.setShaderTexture(0, texture); + DrawableHelper.drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height, textureWidth, textureHeight); + } + + public static void drawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x, int y, float u, float v, int width, int height) { + RenderUtil.setShaderTexture(0, texture); + DrawableHelper.drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height, 256, 256); + } } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java new file mode 100644 index 000000000..d270444a6 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java @@ -0,0 +1,26 @@ +package ml.pkom.mcpitanlibarch.core.registry; + +import dev.architectury.registry.registries.Registrar; +import dev.architectury.registry.registries.RegistrySupplier; +import net.minecraft.item.ItemGroup; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.util.Identifier; + +import java.util.function.Supplier; + +@Deprecated +public class MCPLRegistry1_20 { + private final MCPLRegistry mcplr; + + //public Registrar ITEM_GROUP; + + + public MCPLRegistry1_20(MCPLRegistry mcplr) { + this.mcplr = mcplr; + //ITEM_GROUP = mcplr.REGISTRIES.get().get(RegistryKeys.ITEM_GROUP); + } + + public RegistrySupplier registryItemGroup(Identifier id, Supplier supplier) { + return null; + } +} diff --git a/info.properties b/info.properties index b1797ba28..bcd7a571e 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.6 +mod_version=1.6.7 maven_group=ml.pkom \ No newline at end of file From 26ae6088d495c88dab3764a411f33c816bdf7ef6 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Jun 2023 23:23:03 +0900 Subject: [PATCH 166/617] fix 1.19.2 --- .../ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java index d270444a6..761219dbd 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java @@ -1,9 +1,7 @@ package ml.pkom.mcpitanlibarch.core.registry; -import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.item.ItemGroup; -import net.minecraft.registry.RegistryKeys; import net.minecraft.util.Identifier; import java.util.function.Supplier; From e7676d5dd00f456e651adb59e6741cc1f78d6abe Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 13 Jun 2023 23:24:41 +0900 Subject: [PATCH 167/617] add rendererutil to renderutilapi --- .../java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java index 13a6a9b7a..bf21dc9d5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java @@ -28,4 +28,6 @@ public static void enableTexture() { public static void disableTexture() { RenderSystem.disableTexture(); } + + public static class RendererUtil extends ScreenUtil.RendererUtil {} } \ No newline at end of file From 0b2b6d2d4cd06bfe9ea26ac9f20cb9fc7f7890eb Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 14 Jun 2023 18:10:33 +0900 Subject: [PATCH 168/617] add TextFieldUtil, ClickableWidgetUtil func --- .../mcpitanlibarch/api/util/client/ScreenUtil.java | 12 ++++++++++++ info.properties | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index ba2abe786..5ff566855 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -3,12 +3,14 @@ import ml.pkom.mcpitanlibarch.api.client.gui.widget.RedrawableTexturedButtonWidget; import ml.pkom.mcpitanlibarch.api.util.TextUtil; import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.RenderArgs; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.text.OrderedText; @@ -87,6 +89,16 @@ public static class TextFieldUtil { public static void setFocused(TextFieldWidget widget, boolean focused) { widget.setTextFieldFocused(focused); } + + public static void render(TextFieldWidget widget, RenderArgs args) { + widget.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); + } + } + + public static class ClickableWidgetUtil { + public static void render(ClickableWidget widget, RenderArgs args) { + widget.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); + } } public static class RendererUtil { diff --git a/info.properties b/info.properties index bcd7a571e..e92ce0f4a 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.7 +mod_version=1.6.8 maven_group=ml.pkom \ No newline at end of file From 417dc0147e9a68842123baeb88da52dd41472d42 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 14 Jun 2023 21:57:27 +0900 Subject: [PATCH 169/617] ignore --- php/build.bat | 74 --------------------------------------- php/upload_curseforge.bat | 2 -- php/upload_maven.bat | 2 -- 3 files changed, 78 deletions(-) delete mode 100644 php/build.bat delete mode 100644 php/upload_curseforge.bat delete mode 100644 php/upload_maven.bat diff --git a/php/build.bat b/php/build.bat deleted file mode 100644 index e088c6fd1..000000000 --- a/php/build.bat +++ /dev/null @@ -1,74 +0,0 @@ -cd "..\" - -git fetch origin -git checkout 1.19.4 -call gradlew.bat build -call gradlew.bat generatePomFileForMavenCommonPublication -call gradlew.bat generatePomFileForMavenForgePublication -call gradlew.bat generatePomFileForMavenFabricPublication -copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.19.4.pom" -copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.19.4.pom" -copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.19.4.pom" - -git fetch origin -git checkout 1.19.3 -call gradlew.bat build -call gradlew.bat generatePomFileForMavenCommonPublication -call gradlew.bat generatePomFileForMavenForgePublication -call gradlew.bat generatePomFileForMavenFabricPublication -copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.19.3.pom" -copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.19.3.pom" -copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.19.3.pom" - -git fetch origin -git checkout 1.19.2 -call gradlew.bat build -call gradlew.bat generatePomFileForMavenCommonPublication -call gradlew.bat generatePomFileForMavenForgePublication -call gradlew.bat generatePomFileForMavenFabricPublication -copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.19.2.pom" -copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.19.2.pom" -copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.19.2.pom" - -git fetch origin -git checkout 1.18.2 -call gradlew.bat build -call gradlew.bat generatePomFileForMavenCommonPublication -call gradlew.bat generatePomFileForMavenForgePublication -call gradlew.bat generatePomFileForMavenFabricPublication -copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.18.2.pom" -copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.18.2.pom" -copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.18.2.pom" - -git fetch origin -git checkout 1.17.1 -call gradlew.bat build -call gradlew.bat generatePomFileForMavenCommonPublication -call gradlew.bat generatePomFileForMavenForgePublication -call gradlew.bat generatePomFileForMavenFabricPublication -copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.17.1.pom" -copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.17.1.pom" -copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.17.1.pom" - -git fetch origin -git checkout 1.16.5 -copy /y gradlew.bat build -copy /y gradlew.bat generatePomFileForMavenCommonPublication -copy /y gradlew.bat generatePomFileForMavenForgePublication -copy /y gradlew.bat generatePomFileForMavenFabricPublication -copy /y ".\common\build\publications\mavenCommon\pom-default.xml" ".\common\build\publications\mavenCommon\mcpitanlibarch-1.16.5.pom" -copy /y ".\fabric\build\publications\mavenFabric\pom-default.xml" ".\fabric\build\publications\mavenFabric\mcpitanlibarch-1.16.5.pom" -copy /y ".\forge\build\publications\mavenForge\pom-default.xml" ".\forge\build\publications\mavenForge\mcpitanlibarch-1.16.5.pom" - -git fetch origin -git checkout 1.19.4 - -cd ".\php" - -copy /y "C:\Users\ptms76\Documents\php\*.bat" ".\" -copy /y "C:\Users\ptms76\Documents\php\*.php" ".\" - -start upload_maven.bat -start upload_curseforge.bat -start upload_modrinth.bat -pause \ No newline at end of file diff --git a/php/upload_curseforge.bat b/php/upload_curseforge.bat deleted file mode 100644 index 668dab2c9..000000000 --- a/php/upload_curseforge.bat +++ /dev/null @@ -1,2 +0,0 @@ -php upload_curseforge.php -pause \ No newline at end of file diff --git a/php/upload_maven.bat b/php/upload_maven.bat deleted file mode 100644 index 34860da53..000000000 --- a/php/upload_maven.bat +++ /dev/null @@ -1,2 +0,0 @@ -php upload_maven.php -pause \ No newline at end of file From baee0e58bfef04148037fcbf27339696b7c09680 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 14 Jun 2023 23:05:01 +0900 Subject: [PATCH 170/617] setPassEvents --- .../pkom/mcpitanlibarch/api/util/client/ScreenUtil.java | 8 ++++++++ info.properties | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index 5ff566855..52d1cd9c7 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -9,6 +9,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.TextFieldWidget; @@ -17,6 +18,8 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; + @Environment(EnvType.CLIENT) public class ScreenUtil { public static void setBackground(Identifier GUI, float f, float g, float h, float i) { @@ -37,6 +40,11 @@ public static void setRepeatEvents(boolean isRepeatEvents) { MinecraftClient.getInstance().keyboard.setRepeatEvents(isRepeatEvents); } + // ~1.19.4 + public static void setPassEvents(Screen screen, boolean isPassEvents) { + screen.passEvents = isPassEvents; + } + public static ButtonWidget createButtonWidget(int x, int y, int width, int height, Text message, ButtonWidget.PressAction onPress) { return createButtonWidget(x, y, width, height, message, onPress, ButtonWidget.EMPTY); } diff --git a/info.properties b/info.properties index e92ce0f4a..e1ab2e852 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.8 +mod_version=1.6.9 maven_group=ml.pkom \ No newline at end of file From a524d9b2da45b377361418e1889c86f56cfd2940 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 23 Jun 2023 21:58:59 +0900 Subject: [PATCH 171/617] add api --- .../ml/pkom/mcpitanlibarch/api/entity/Player.java | 6 ++++++ .../ml/pkom/mcpitanlibarch/api/util/WorldUtil.java | 11 ++++++++++- info.properties | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index 34b4f0f13..8d846d6d5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -14,6 +14,8 @@ import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandler; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.collection.DefaultedList; @@ -240,4 +242,8 @@ public float getYaw() { public float getPitch() { return this.getEntity().getPitch(); } + + public void playSound(SoundEvent event, SoundCategory category, float volume, float pitch) { + getEntity().playSound(event, category, volume, pitch); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index 1ad902ea6..cc84db62d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -1,15 +1,22 @@ package ml.pkom.mcpitanlibarch.api.util; +import ml.pkom.mcpitanlibarch.api.entity.Player; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.ExperienceOrbEntity; import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; import net.minecraft.item.ItemStack; import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; + +import java.util.Objects; public class WorldUtil { public static boolean hasSkyLight(World world) { @@ -65,9 +72,11 @@ public static void spawnExperienceOrb(World world, BlockPos pos, int amount) { spawnExperienceOrb(world, Vec3d.ofCenter(pos), amount); } - public static void spawnEntity(World world, Entity entity) { world.spawnEntity(entity); } + public static void playSound(World world, @Nullable Player player, BlockPos pos, SoundEvent sound, SoundCategory category, float volume, float pitch) { + world.playSound(Objects.requireNonNullElse(player, null).getEntity(), pos, sound, category, volume, pitch); + } } diff --git a/info.properties b/info.properties index e1ab2e852..35e08b3e2 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.9 +mod_version=1.6.10 maven_group=ml.pkom \ No newline at end of file From c476f28cd7c8e96f03c669390025ee2c510c26cc Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 23 Jun 2023 22:02:25 +0900 Subject: [PATCH 172/617] back of(Material) [Deprecated] --- .../api/block/CompatibleBlockSettings.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java index 677ff2634..945d67ee7 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java @@ -27,6 +27,11 @@ public CompatibleBlockSettings(CompatibleMaterial material) { this.settings = AbstractBlock.Settings.of(material.getMaterial()); } + @Deprecated + public CompatibleBlockSettings(Material material) { + this.settings = AbstractBlock.Settings.of(material); + } + public CompatibleBlockSettings(CompatibleMaterial material, Function mapColor) { this.settings = AbstractBlock.Settings.of(material.getMaterial(), mapColor); } @@ -39,6 +44,11 @@ public static CompatibleBlockSettings of(CompatibleMaterial material, DyeColor d return new CompatibleBlockSettings(material, dyeColor); } + @Deprecated + public static CompatibleBlockSettings of(Material material) { + return new CompatibleBlockSettings(material); + } + public static CompatibleBlockSettings of(CompatibleMaterial material) { return new CompatibleBlockSettings(material); } From 634045a2694ac276f9382d06492d404515e54223 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 24 Jun 2023 22:48:18 +0900 Subject: [PATCH 173/617] add apis --- .../api/client/SimpleHandledScreen.java | 28 ++++++++++++--- .../render/handledscreen/KeyEventArgs.java | 35 +++++++++++++++++++ info.properties | 2 +- 3 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/KeyEventArgs.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 90444ba17..db0d04c70 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -1,11 +1,8 @@ package ml.pkom.mcpitanlibarch.api.client; import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawBackgroundArgs; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawForegroundArgs; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawMouseoverTooltipArgs; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.RenderArgs; import ml.pkom.mcpitanlibarch.api.util.client.ScreenUtil; +import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.*; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.Drawable; @@ -37,6 +34,7 @@ protected T addDrawableChild_compati // addButton } + @Deprecated @Override protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mouseY) { DrawObjectDM drawObjectDM = new DrawObjectDM(stack); @@ -45,6 +43,7 @@ protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mo public abstract void drawBackgroundOverride(DrawBackgroundArgs args); + @Deprecated @Override protected void drawForeground(MatrixStack stack, int mouseX, int mouseY) { DrawObjectDM drawObjectDM = new DrawObjectDM(stack); @@ -78,6 +77,7 @@ public void resizeOverride(MinecraftClient client, int width, int height) { public void initOverride() { } + @Deprecated @Override protected void init() { super.init(); @@ -85,6 +85,7 @@ protected void init() { initOverride(); } + @Deprecated @Override public void resize(MinecraftClient client, int width, int height) { super.resize(client, width, height); @@ -151,11 +152,30 @@ public int getBackgroundHeight() { return super.backgroundHeight; } + @Deprecated @Override public void render(MatrixStack stack, int mouseX, int mouseY, float delta) { DrawObjectDM drawObjectDM = new DrawObjectDM(stack); renderOverride(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); } + public boolean keyReleased(KeyEventArgs args) { + return super.keyReleased(args.keyCode, args.scanCode, args.modifiers); + } + + public boolean keyPressed(KeyEventArgs args) { + return super.keyPressed(args.keyCode, args.scanCode, args.modifiers); + } + + @Deprecated + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + return this.keyReleased(new KeyEventArgs(keyCode, scanCode, modifiers)); + } + @Deprecated + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + return this.keyPressed(new KeyEventArgs(keyCode, scanCode, modifiers)); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/KeyEventArgs.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/KeyEventArgs.java new file mode 100644 index 000000000..905a7f1b3 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/KeyEventArgs.java @@ -0,0 +1,35 @@ +package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; + +public class KeyEventArgs { + public int keyCode, scanCode, modifiers; + + public KeyEventArgs(int keyCode, int scanCode, int modifiers) { + setKeyCode(keyCode); + setScanCode(scanCode); + setModifiers(modifiers); + } + + public void setKeyCode(int keyCode) { + this.keyCode = keyCode; + } + + public void setModifiers(int modifiers) { + this.modifiers = modifiers; + } + + public void setScanCode(int scanCode) { + this.scanCode = scanCode; + } + + public int getKeyCode() { + return keyCode; + } + + public int getModifiers() { + return modifiers; + } + + public int getScanCode() { + return scanCode; + } +} diff --git a/info.properties b/info.properties index 35e08b3e2..9f2ca7442 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.6.10 +mod_version=1.7.0 maven_group=ml.pkom \ No newline at end of file From 9b3f9ab29c8e44d89fd1128698f7654eb142a5d6 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sun, 16 Jul 2023 23:32:18 +0900 Subject: [PATCH 174/617] add apis --- .../mcpitanlibarch/api/entity/Player.java | 27 ++++++++++ .../api/gui/SimpleScreenHandler.java | 34 +++++++++++- .../api/util/DamageSourceUtil.java | 40 ++++++++++++++ .../mcpitanlibarch/api/util/EntityUtil.java | 10 ++++ .../mcpitanlibarch/api/util/PlayerUtil.java | 53 +++++++++++++++++++ .../mcpitanlibarch/api/util/WorldUtil.java | 3 +- .../api/util/client/ScreenUtil.java | 2 - .../core/player/ItemCooldown.java | 20 +++++++ info.properties | 2 +- 9 files changed, 185 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/core/player/ItemCooldown.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index 8d846d6d5..8af9ae802 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -3,11 +3,15 @@ import dev.architectury.registry.menu.ExtendedMenuProvider; import ml.pkom.mcpitanlibarch.api.gui.ExtendedNamedScreenHandlerFactory; import ml.pkom.mcpitanlibarch.api.util.ScreenHandlerUtil; +import ml.pkom.mcpitanlibarch.core.player.ItemCooldown; import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.player.ItemCooldownManager; import net.minecraft.entity.player.PlayerAbilities; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.PacketByteBuf; @@ -16,6 +20,8 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; +import net.minecraft.stat.Stat; +import net.minecraft.stat.StatType; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.collection.DefaultedList; @@ -186,6 +192,9 @@ public ItemStack getCursorStack() { public boolean isClient() { return getWorld().isClient(); } + public boolean isServer() { + return !isClient(); + } public void readCustomDataFromNbt(NbtCompound nbt) { getEntity().readCustomDataFromNbt(nbt); @@ -246,4 +255,22 @@ public float getPitch() { public void playSound(SoundEvent event, SoundCategory category, float volume, float pitch) { getEntity().playSound(event, category, volume, pitch); } + + public ItemCooldown itemCooldown = new ItemCooldown(this); + + public ItemCooldown getItemCooldown() { + return itemCooldown; + } + + public ItemCooldownManager getItemCooldownManager() { + return getEntity().getItemCooldownManager(); + } + + public void incrementStat(Stat stat) { + getEntity().incrementStat(stat); + } + + public void incrementStat(StatType type, T object) { + getEntity().incrementStat(type.getOrCreateStat(object)); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java index 30d563ea5..54f48dfb8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java @@ -202,11 +202,11 @@ public ItemStack transferSlot(PlayerEntity player, int slot) { @Deprecated @Override public Slot getSlot(int index) { - return super.getSlot(index); + return callGetSlot(index); } public Slot callGetSlot(int index) { - return getSlot(index); + return super.getSlot(index); } @Deprecated @@ -218,4 +218,34 @@ public void onSlotClick(int slotIndex, int button, SlotActionType actionType, Pl public void overrideOnSlotClick(int slotIndex, int button, SlotActionType actionType, Player player) { super.onSlotClick(slotIndex, button, actionType, player.getPlayerEntity()); } + + @Override + @Deprecated + public void setCursorStack(ItemStack stack) { + callSetCursorStack(stack); + } + + public void callSetCursorStack(ItemStack stack) { + super.setCursorStack(stack); + } + + @Override + @Deprecated + public void setStackInSlot(int slot, int revision, ItemStack stack) { + callSetStackInSlot(slot, revision, stack); + } + + public void callSetStackInSlot(int slot, int revision, ItemStack stack) { + super.setStackInSlot(slot, revision, stack); + } + + @Override + @Deprecated + public int getRevision() { + return callGetRevision(); + } + + public int callGetRevision() { + return super.getRevision(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java new file mode 100644 index 000000000..e4d6e13a9 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java @@ -0,0 +1,40 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; + +public class DamageSourceUtil { + public DamageSource thrownProjectile(Entity projectile, Entity attacker, Entity source) { + return thrownProjectile(projectile, attacker); + } + + public DamageSource thrownProjectile(Entity projectile, Entity attacker) { + return DamageSource.thrownProjectile(projectile, attacker); + } + + public DamageSource playerAttack(Player attacker, Entity source) { + return playerAttack(attacker); + } + + public DamageSource playerAttack(Player attacker) { + return DamageSource.player(attacker.getPlayerEntity()); + } + + public DamageSource mobAttack(LivingEntity attacker, Entity source) { + return mobAttack(attacker); + } + + public DamageSource mobAttack(LivingEntity attacker) { + return DamageSource.mob(attacker); + } + + public DamageSource mobProjectile(Entity projectile, LivingEntity attacker, Entity source) { + return mobProjectile(projectile, attacker); + } + + public DamageSource mobProjectile(Entity projectile, LivingEntity attacker) { + return DamageSource.mobProjectile(projectile, attacker); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java new file mode 100644 index 000000000..ef0f072a8 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java @@ -0,0 +1,10 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +public class EntityUtil { + public static World getWorld(Entity entity) { + return entity.getWorld(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java new file mode 100644 index 000000000..af4905dc9 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java @@ -0,0 +1,53 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class PlayerUtil { + + public static Player getPlayerByUUID(MinecraftServer server, UUID uuid) { + return new Player(server.getPlayerManager().getPlayer(uuid)); + } + + public static Player getPlayerByName(MinecraftServer server, String name) { + return new Player(server.getPlayerManager().getPlayer(name)); + } + + public static List getPlayersByIP(MinecraftServer server, String ip) { + List players = new ArrayList<>(); + for (PlayerEntity p: server.getPlayerManager().getPlayersByIp(ip)) { + players.add(new Player(p)); + } + return players; + } + + public static List getPlayers(MinecraftServer server) { + List players = new ArrayList<>(); + for (PlayerEntity p : server.getPlayerManager().getPlayerList()) { + players.add(new Player(p)); + } + return players; + } + + public static Player getPlayerByUUID(World world, UUID uuid) { + return getPlayerByUUID(world.getServer(), uuid); + } + + public static Player getPlayerByName(World world, String name) { + return getPlayerByName(world.getServer(), name); + } + + public static boolean isExistByUUID(MinecraftServer server, UUID uuid) { + return server.getPlayerManager().getPlayer(uuid) != null; + } + + public static boolean isExistByUUID(World world, UUID uuid) { + return isExistByUUID(world.getServer(), uuid); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index cc84db62d..92dd35242 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -77,6 +77,7 @@ public static void spawnEntity(World world, Entity entity) { } public static void playSound(World world, @Nullable Player player, BlockPos pos, SoundEvent sound, SoundCategory category, float volume, float pitch) { - world.playSound(Objects.requireNonNullElse(player, null).getEntity(), pos, sound, category, volume, pitch); + PlayerEntity entity = player == null ? null : player.getEntity(); + world.playSound(entity, pos, sound, category, volume, pitch); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index 52d1cd9c7..d749ffa74 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -18,8 +18,6 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import org.jetbrains.annotations.Nullable; - @Environment(EnvType.CLIENT) public class ScreenUtil { public static void setBackground(Identifier GUI, float f, float g, float h, float i) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/player/ItemCooldown.java b/common/src/main/java/ml/pkom/mcpitanlibarch/core/player/ItemCooldown.java new file mode 100644 index 000000000..fcdb43b9d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/core/player/ItemCooldown.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.core.player; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.minecraft.item.Item; + +public class ItemCooldown { + public final Player player; + + public ItemCooldown(Player player) { + this.player = player; + } + + public boolean isCoolingDown(Item item) { + return player.getItemCooldownManager().isCoolingDown(item); + } + + public void set(Item item, int duration) { + player.getItemCooldownManager().set(item, duration); + } +} diff --git a/info.properties b/info.properties index 9f2ca7442..c0f166d92 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.0 +mod_version=1.7.1 maven_group=ml.pkom \ No newline at end of file From cb7f30dee4b51ee87da610f4b060d78355765941 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Mon, 17 Jul 2023 17:22:10 +0900 Subject: [PATCH 175/617] Add APIs Fix APIs --- .../api/item/CreativeTabManager.java | 9 ++--- .../api/timer/MinecraftServerTimerAccess.java | 7 ++++ .../api/timer/ServerWorldTimerAccess.java | 7 ++++ .../mcpitanlibarch/api/timer/TimerItem.java | 14 +++++++ .../api/util/DamageSourceUtil.java | 16 ++++---- .../mcpitanlibarch/api/util/TimerUtil.java | 18 +++++++++ .../mixin/MinecraftServerTimer.java | 38 +++++++++++++++++++ .../mixin/ServerWorldTimer.java | 38 +++++++++++++++++++ .../mcpitanlibarch-common.mixins.json | 4 +- info.properties | 2 +- 10 files changed, 138 insertions(+), 15 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/MinecraftServerTimerAccess.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/ServerWorldTimerAccess.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/TimerItem.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TimerUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/mixin/MinecraftServerTimer.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ServerWorldTimer.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java index 2163de1bd..744d060a9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java @@ -10,8 +10,8 @@ import java.util.List; public class CreativeTabManager { - private static final List bookingItems = new ArrayList<>(); - private static final List bookingStacks = new ArrayList<>(); + private static List bookingItems = new ArrayList<>(); + private static List bookingStacks = new ArrayList<>(); // グループ予約済みアイテム public static class BookingItem { @@ -37,16 +37,15 @@ public static void allRegister() { if (!bookingItems.isEmpty()) { for (BookingItem bookingItem : bookingItems) { bookingItem.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); - //CreativeTabRegistry.append(bookingItem.itemGroup, ItemUtil.fromId(bookingItem.identifier)); - bookingItems.remove(bookingItem); } + bookingItems = new ArrayList<>(); } if (!bookingStacks.isEmpty()) { for (BookingStack bookingStack : bookingStacks) { bookingStack.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, bookingStack.stack)); - bookingStacks.remove(bookingStack); } + bookingStacks = new ArrayList<>(); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/MinecraftServerTimerAccess.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/MinecraftServerTimerAccess.java new file mode 100644 index 000000000..f7e41c65f --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/MinecraftServerTimerAccess.java @@ -0,0 +1,7 @@ +package ml.pkom.mcpitanlibarch.api.timer; + +import java.util.function.Supplier; + +public interface MinecraftServerTimerAccess { + void addTimer(long ticksUntilSomething, Supplier supplier); +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/ServerWorldTimerAccess.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/ServerWorldTimerAccess.java new file mode 100644 index 000000000..a26c7e689 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/ServerWorldTimerAccess.java @@ -0,0 +1,7 @@ +package ml.pkom.mcpitanlibarch.api.timer; + +import java.util.function.Supplier; + +public interface ServerWorldTimerAccess { + void addTimer(long ticksUntilSomething, Supplier supplier); +} \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/TimerItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/TimerItem.java new file mode 100644 index 000000000..25311a365 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/TimerItem.java @@ -0,0 +1,14 @@ +package ml.pkom.mcpitanlibarch.api.timer; + +import java.util.function.Supplier; + +public class TimerItem { + public long ticksUntilSomething; + + public Supplier executeSupplier; + + public TimerItem(long ticksUntilSomething, Supplier executeSupplier) { + this.ticksUntilSomething = ticksUntilSomething; + this.executeSupplier = executeSupplier; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java index e4d6e13a9..04b47a975 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java @@ -6,35 +6,35 @@ import net.minecraft.entity.damage.DamageSource; public class DamageSourceUtil { - public DamageSource thrownProjectile(Entity projectile, Entity attacker, Entity source) { + public static DamageSource thrownProjectile(Entity projectile, Entity attacker, Entity source) { return thrownProjectile(projectile, attacker); } - public DamageSource thrownProjectile(Entity projectile, Entity attacker) { + public static DamageSource thrownProjectile(Entity projectile, Entity attacker) { return DamageSource.thrownProjectile(projectile, attacker); } - public DamageSource playerAttack(Player attacker, Entity source) { + public static DamageSource playerAttack(Player attacker, Entity source) { return playerAttack(attacker); } - public DamageSource playerAttack(Player attacker) { + public static DamageSource playerAttack(Player attacker) { return DamageSource.player(attacker.getPlayerEntity()); } - public DamageSource mobAttack(LivingEntity attacker, Entity source) { + public static DamageSource mobAttack(LivingEntity attacker, Entity source) { return mobAttack(attacker); } - public DamageSource mobAttack(LivingEntity attacker) { + public static DamageSource mobAttack(LivingEntity attacker) { return DamageSource.mob(attacker); } - public DamageSource mobProjectile(Entity projectile, LivingEntity attacker, Entity source) { + public static DamageSource mobProjectile(Entity projectile, LivingEntity attacker, Entity source) { return mobProjectile(projectile, attacker); } - public DamageSource mobProjectile(Entity projectile, LivingEntity attacker) { + public static DamageSource mobProjectile(Entity projectile, LivingEntity attacker) { return DamageSource.mobProjectile(projectile, attacker); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TimerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TimerUtil.java new file mode 100644 index 000000000..2db5369a1 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TimerUtil.java @@ -0,0 +1,18 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import ml.pkom.mcpitanlibarch.api.timer.MinecraftServerTimerAccess; +import ml.pkom.mcpitanlibarch.api.timer.ServerWorldTimerAccess; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.world.ServerWorld; + +import java.util.function.Supplier; + +public class TimerUtil { + public static void addTimer(ServerWorld world, long ticksUntilSomething, Supplier supplier) { + ((ServerWorldTimerAccess) world).addTimer(ticksUntilSomething, supplier); + } + + public static void addTimer(MinecraftServer server, long ticksUntilSomething, Supplier supplier) { + ((MinecraftServerTimerAccess) server).addTimer(ticksUntilSomething, supplier); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/MinecraftServerTimer.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/MinecraftServerTimer.java new file mode 100644 index 000000000..56add9d0d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/MinecraftServerTimer.java @@ -0,0 +1,38 @@ +package ml.pkom.mcpitanlibarch.mixin; + +import ml.pkom.mcpitanlibarch.api.timer.MinecraftServerTimerAccess; +import ml.pkom.mcpitanlibarch.api.timer.TimerItem; +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +@Mixin(MinecraftServer.class) +public class MinecraftServerTimer implements MinecraftServerTimerAccess { + @Unique + private final List timerItems = new ArrayList<>(); + + @Inject(method = "tick", at = @At("TAIL")) + private void onTick(CallbackInfo ci) { + if (timerItems.isEmpty()) return; + List items = new ArrayList<>(timerItems); + + for (TimerItem item : items) { + if (--item.ticksUntilSomething == 0L) { + if (item.executeSupplier.get()) + timerItems.remove(item); + } + } + } + + @Override + public void addTimer(long ticksUntilSomething, Supplier executeSupplier) { + timerItems.add(new TimerItem(ticksUntilSomething, executeSupplier)); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ServerWorldTimer.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ServerWorldTimer.java new file mode 100644 index 000000000..283a28321 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ServerWorldTimer.java @@ -0,0 +1,38 @@ +package ml.pkom.mcpitanlibarch.mixin; + +import ml.pkom.mcpitanlibarch.api.timer.ServerWorldTimerAccess; +import ml.pkom.mcpitanlibarch.api.timer.TimerItem; +import net.minecraft.server.world.ServerWorld; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +@Mixin(ServerWorld.class) +public class ServerWorldTimer implements ServerWorldTimerAccess { + @Unique + private final List timerItems = new ArrayList<>(); + + @Inject(method = "tick", at = @At("TAIL")) + private void onTick(CallbackInfo ci) { + if (timerItems.isEmpty()) return; + List items = new ArrayList<>(timerItems); + + for (TimerItem item : items) { + if (--item.ticksUntilSomething == 0L) { + if (item.executeSupplier.get()) + timerItems.remove(item); + } + } + } + + @Override + public void addTimer(long ticksUntilSomething, Supplier executeSupplier) { + timerItems.add(new TimerItem(ticksUntilSomething, executeSupplier)); + } +} diff --git a/common/src/main/resources/mcpitanlibarch-common.mixins.json b/common/src/main/resources/mcpitanlibarch-common.mixins.json index 0aaea7d9c..c3b102ae3 100644 --- a/common/src/main/resources/mcpitanlibarch-common.mixins.json +++ b/common/src/main/resources/mcpitanlibarch-common.mixins.json @@ -5,7 +5,9 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "ItemMixin", - "ItemUsageContextMixin" + "ItemUsageContextMixin", + "MinecraftServerTimer", + "ServerWorldTimer" ], "client": [ ], diff --git a/info.properties b/info.properties index c0f166d92..2c10fc370 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.1 +mod_version=1.7.2 maven_group=ml.pkom \ No newline at end of file From 0fa633473de004c26450b404f2918482a57ae474 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 18 Jul 2023 16:18:09 +0900 Subject: [PATCH 176/617] Add APIs --- .../api/util/WorldRandomUtil.java | 37 +++++++++++++++++++ info.properties | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java new file mode 100644 index 000000000..4fd31349c --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java @@ -0,0 +1,37 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.world.World; + +public class WorldRandomUtil { + public static int nextInt(World world) { + return world.getRandom().nextInt(); + } + + public static int nextInt(World world, int bound) { + return world.getRandom().nextInt(bound); + } + + public static long nextLong(World world) { + return world.getRandom().nextLong(); + } + + public static double nextDouble(World world) { + return world.getRandom().nextDouble(); + } + + public static double nextGaussian(World world) { + return world.getRandom().nextGaussian(); + } + + public static float nextFloat(World world) { + return world.getRandom().nextFloat(); + } + + public static int nextBetween(World world, int min, int max) { + return world.getRandom().nextBetween(min, max); + } + + public static int nextBetweenExclusive(World world, int min, int max) { + return world.getRandom().nextBetweenExclusive(min, max); + } +} diff --git a/info.properties b/info.properties index 2c10fc370..53bf047af 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.2 +mod_version=1.7.3 maven_group=ml.pkom \ No newline at end of file From 9190994908a3d76a7e8127ec8bc971dbe166dc89 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 18 Jul 2023 16:26:52 +0900 Subject: [PATCH 177/617] Fix APIs --- .../ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java index 4fd31349c..bb1714dfe 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java @@ -28,10 +28,14 @@ public static float nextFloat(World world) { } public static int nextBetween(World world, int min, int max) { - return world.getRandom().nextBetween(min, max); + return nextInt(world, max - min + 1) + min; } public static int nextBetweenExclusive(World world, int min, int max) { - return world.getRandom().nextBetweenExclusive(min, max); + if (min >= max) { + throw new IllegalArgumentException("bound - origin is non positive"); + } else { + return min + nextInt(world, max - min); + } } } From 21f80e2a2ae41dd0317d8d85fce0c6dae3097358 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 18 Jul 2023 22:50:00 +0900 Subject: [PATCH 178/617] Add APIs --- .../mcpitanlibarch/api/util/EntityUtil.java | 23 +++++++++++++++++++ info.properties | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java index ef0f072a8..d9fd03a75 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java @@ -1,10 +1,33 @@ package ml.pkom.mcpitanlibarch.api.util; +import ml.pkom.mcpitanlibarch.api.entity.Player; import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; import net.minecraft.world.World; public class EntityUtil { public static World getWorld(Entity entity) { return entity.getWorld(); } + + public static boolean damage(Entity entity, DamageSource damageSource, float amount) { + return entity.damage(damageSource, amount); + } + + public static boolean damageWithThrownProjectile(float damageAmount, Entity projectile, Entity attacker) { + return projectile.damage(DamageSourceUtil.thrownProjectile(projectile, attacker), damageAmount); + } + + public static boolean damageWithMobProjectile(float damageAmount, Entity projectile, LivingEntity attacker) { + return projectile.damage(DamageSourceUtil.mobProjectile(projectile, attacker), damageAmount); + } + + public static boolean damageWithMobAttack(float damageAmount, Entity source, LivingEntity attacker) { + return source.damage(DamageSourceUtil.mobAttack(attacker, source), damageAmount); + } + + public static boolean damageWithPlayerAttack(float damageAmount, Entity source, Player attacker) { + return source.damage(DamageSourceUtil.playerAttack(attacker, source), damageAmount); + } } diff --git a/info.properties b/info.properties index 53bf047af..4ac0871a7 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.3 +mod_version=1.7.4 maven_group=ml.pkom \ No newline at end of file From 85b8df283f0ec6757d6bcf2d3ee47da5986cda74 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 18 Jul 2023 23:24:53 +0900 Subject: [PATCH 179/617] Add APIs --- .../mcpitanlibarch/api/util/EntityUtil.java | 20 +++++++++---------- .../mcpitanlibarch/api/util/WorldUtil.java | 4 ++++ info.properties | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java index d9fd03a75..32fbee46f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java @@ -11,23 +11,23 @@ public static World getWorld(Entity entity) { return entity.getWorld(); } - public static boolean damage(Entity entity, DamageSource damageSource, float amount) { - return entity.damage(damageSource, amount); + public static boolean damage(Entity target, DamageSource damageSource, float amount) { + return target.damage(damageSource, amount); } - public static boolean damageWithThrownProjectile(float damageAmount, Entity projectile, Entity attacker) { - return projectile.damage(DamageSourceUtil.thrownProjectile(projectile, attacker), damageAmount); + public static boolean damageWithThrownProjectile(Entity target, float damageAmount, Entity projectile, Entity attacker) { + return target.damage(DamageSourceUtil.thrownProjectile(projectile, attacker), damageAmount); } - public static boolean damageWithMobProjectile(float damageAmount, Entity projectile, LivingEntity attacker) { - return projectile.damage(DamageSourceUtil.mobProjectile(projectile, attacker), damageAmount); + public static boolean damageWithMobProjectile(Entity target, float damageAmount, Entity projectile, LivingEntity attacker) { + return target.damage(DamageSourceUtil.mobProjectile(projectile, attacker), damageAmount); } - public static boolean damageWithMobAttack(float damageAmount, Entity source, LivingEntity attacker) { - return source.damage(DamageSourceUtil.mobAttack(attacker, source), damageAmount); + public static boolean damageWithMobAttack(Entity target, float damageAmount, Entity source, LivingEntity attacker) { + return target.damage(DamageSourceUtil.mobAttack(attacker, source), damageAmount); } - public static boolean damageWithPlayerAttack(float damageAmount, Entity source, Player attacker) { - return source.damage(DamageSourceUtil.playerAttack(attacker, source), damageAmount); + public static boolean damageWithPlayerAttack(Entity target, float damageAmount, Entity source, Player attacker) { + return target.damage(DamageSourceUtil.playerAttack(attacker, source), damageAmount); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index 92dd35242..3ae1ff24f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -80,4 +80,8 @@ public static void playSound(World world, @Nullable Player player, BlockPos pos, PlayerEntity entity = player == null ? null : player.getEntity(); world.playSound(entity, pos, sound, category, volume, pitch); } + + public static void sendEntityStatus(World world, Entity entity, byte status) { + world.sendEntityStatus(entity, status); + } } diff --git a/info.properties b/info.properties index 4ac0871a7..f44f98037 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.4 +mod_version=1.7.5 maven_group=ml.pkom \ No newline at end of file From 5be7d74267bb47c42d095eb2c7f2a70fadb9b684 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sun, 13 Aug 2023 22:42:05 +0900 Subject: [PATCH 180/617] Add API --- .../api/network/PacketByteUtil.java | 67 +++++++++++++++++++ info.properties | 2 +- 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java index 963404a2e..86d0c2841 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java @@ -1,7 +1,17 @@ package ml.pkom.mcpitanlibarch.api.network; +import com.google.common.collect.Maps; import io.netty.buffer.Unpooled; +import net.minecraft.nbt.NbtCompound; import net.minecraft.network.PacketByteBuf; +import net.minecraft.text.Text; +import net.minecraft.util.math.BlockPos; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.function.BiConsumer; +import java.util.function.Function; public class PacketByteUtil { public static PacketByteBuf create() { @@ -12,4 +22,61 @@ public static PacketByteBuf create() { public static PacketByteBuf empty() { return new PacketByteBuf(Unpooled.EMPTY_BUFFER); } + + public static Map readMap(PacketByteBuf buf, Function keyParser, Function valueParser) { + return buf.readMap(keyParser::apply, valueParser::apply); + } + + public static void writeMap(PacketByteBuf buf, Map map) { + writeMap(buf, map, PacketByteUtil::writeVar, PacketByteUtil::writeVar); + } + + public static void writeMap(PacketByteBuf buf, Map map, BiConsumer keySerializer, BiConsumer valueSerializer) { + buf.writeMap(map, keySerializer::accept, valueSerializer::accept); + } + + public static void writeVar(PacketByteBuf buf, Object obj) { + if (obj instanceof String) { + String s = (String) obj; + buf.writeString(s); + } + if (obj instanceof Integer) { + int i = (int) obj; + buf.writeInt(i); + } + if (obj instanceof Long) { + long l = (long) obj; + buf.writeLong(l); + } + if (obj instanceof Short) { + short s = (short) obj; + buf.writeShort(s); + } + if (obj instanceof Boolean) { + boolean b = (boolean) obj; + buf.writeBoolean(b); + } + if (obj instanceof Byte) { + byte b = (byte) obj; + buf.writeByte(b); + } + if (obj instanceof NbtCompound) { + NbtCompound nbt = (NbtCompound) obj; + buf.writeNbt(nbt); + } + if (obj instanceof UUID) { + UUID uuid = (UUID) obj; + buf.writeUuid(uuid); + } + if (obj instanceof Text) { + Text text = (Text) obj; + buf.writeText(text); + } + if (obj instanceof BlockPos) { + BlockPos pos = (BlockPos) obj; + buf.writeBlockPos(pos); + } + } } + + diff --git a/info.properties b/info.properties index f44f98037..a96b3d873 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.5 +mod_version=1.7.6 maven_group=ml.pkom \ No newline at end of file From 649fd12544f4f29994eb2d6bc1d227970da8d951 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sun, 13 Aug 2023 23:01:55 +0900 Subject: [PATCH 181/617] fix 118 --- .../ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java index 86d0c2841..037beace9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java @@ -24,7 +24,7 @@ public static PacketByteBuf empty() { } public static Map readMap(PacketByteBuf buf, Function keyParser, Function valueParser) { - return buf.readMap(keyParser::apply, valueParser::apply); + return buf.readMap(keyParser, valueParser); } public static void writeMap(PacketByteBuf buf, Map map) { @@ -32,7 +32,7 @@ public static void writeMap(PacketByteBuf buf, Map map) { } public static void writeMap(PacketByteBuf buf, Map map, BiConsumer keySerializer, BiConsumer valueSerializer) { - buf.writeMap(map, keySerializer::accept, valueSerializer::accept); + buf.writeMap(map, keySerializer, valueSerializer); } public static void writeVar(PacketByteBuf buf, Object obj) { From f874a55f14ca2793a17d5bdc4ce52accc077ae44 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 19 Aug 2023 12:23:28 +0900 Subject: [PATCH 182/617] writeVar (Identifier, ItemStack, Float) --- .../api/network/PacketByteUtil.java | 16 ++++++++++++++-- info.properties | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java index 037beace9..7a75d2705 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java @@ -1,13 +1,13 @@ package ml.pkom.mcpitanlibarch.api.network; -import com.google.common.collect.Maps; import io.netty.buffer.Unpooled; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.PacketByteBuf; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; -import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.function.BiConsumer; @@ -64,6 +64,18 @@ public static void writeVar(PacketByteBuf buf, Object obj) { NbtCompound nbt = (NbtCompound) obj; buf.writeNbt(nbt); } + if (obj instanceof ItemStack) { + ItemStack stack = (ItemStack) obj; + buf.writeItemStack(stack); + } + if (obj instanceof Identifier) { + Identifier identifier = (Identifier) obj; + buf.writeIdentifier(identifier); + } + if (obj instanceof Float) { + Float f = (Float) obj; + buf.writeFloat(f); + } if (obj instanceof UUID) { UUID uuid = (UUID) obj; buf.writeUuid(uuid); diff --git a/info.properties b/info.properties index a96b3d873..e2d82e6e4 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.6 +mod_version=1.7.7 maven_group=ml.pkom \ No newline at end of file From b2f51a523456754761d89dd6f3428b27e5a2a544 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 26 Aug 2023 23:55:20 +0900 Subject: [PATCH 183/617] support Map in writeVar --- .../ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java | 4 ++++ info.properties | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java index 7a75d2705..5c1e81ea3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java @@ -88,6 +88,10 @@ public static void writeVar(PacketByteBuf buf, Object obj) { BlockPos pos = (BlockPos) obj; buf.writeBlockPos(pos); } + if (obj instanceof Map) { + Map map = (Map) obj; + writeMap(buf, map); + } } } diff --git a/info.properties b/info.properties index e2d82e6e4..76ae2e708 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.7 +mod_version=1.7.8 maven_group=ml.pkom \ No newline at end of file From 0874f52154980a98d8ed075af9ddf61aaba57bbb Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 14 Oct 2023 14:13:47 +0900 Subject: [PATCH 184/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 76ae2e708..7be188f2f 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.8 +mod_version=1.7.9 maven_group=ml.pkom \ No newline at end of file From 9250f08fc155997df3ba8e3a768972776fe2044c Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 14 Oct 2023 14:12:59 +0900 Subject: [PATCH 185/617] fix 1194-1 --- .../api/client/SimpleHandledScreen.java | 7 +++ .../CompatibleTexturedButtonWidget.java | 50 +++++++++++++++++++ .../RedrawableTexturedButtonWidget.java | 3 +- .../api/util/client/ScreenUtil.java | 11 ++-- 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index db0d04c70..252166f04 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -59,8 +59,15 @@ public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height); } + @Deprecated public void callRenderBackground(DrawObjectDM drawObjectDM) { super.renderBackground(drawObjectDM.getStack()); + callRenderBackground(new RenderArgs(drawObjectDM, 0, 0, 0)); + } + + + public void callRenderBackground(RenderArgs args) { + super.renderBackground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); } public void callDrawMouseoverTooltip(DrawMouseoverTooltipArgs args) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java new file mode 100644 index 000000000..639556672 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java @@ -0,0 +1,50 @@ +package ml.pkom.mcpitanlibarch.api.client.gui.widget; + +import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ButtonTextures; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.TexturedButtonWidget; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +public class CompatibleTexturedButtonWidget extends TexturedButtonWidget { + private final Identifier texture; + private final int u; + private final int v; + private final int hoveredVOffset; + private final int textureWidth; + private final int textureHeight; + + public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, ButtonWidget.PressAction pressAction) { + this(x, y, width, height, u, v, height, texture, 256, 256, pressAction); + } + + public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, ButtonWidget.PressAction pressAction) { + this(x, y, width, height, u, v, hoveredVOffset, texture, 256, 256, pressAction); + } + + public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction) { + this(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, TextUtil.empty()); + } + + public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text text) { + super(x, y, width, height, new ButtonTextures(texture, texture), pressAction, text); + this.textureWidth = textureWidth; + this.textureHeight = textureHeight; + this.u = u; + this.v = v; + this.hoveredVOffset = hoveredVOffset; + this.texture = texture; + } + + public void setPos(int x, int y) { + setX(x); + setY(y); + } + + @Override + public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { + context.drawTexture(texture, this.getX(), this.getY(), u, v + (isSelected() ? hoveredVOffset : 0), this.width, this.height, textureWidth, textureHeight); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java index e03f27473..2b41f698b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java @@ -3,10 +3,11 @@ import ml.pkom.mcpitanlibarch.api.util.client.RenderUtil; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -public class RedrawableTexturedButtonWidget extends TexturedButtonWidget { +public class RedrawableTexturedButtonWidget extends CompatibleTexturedButtonWidget { public Identifier texture; public int u; public int v; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index d749ffa74..d21e1182e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -1,5 +1,6 @@ package ml.pkom.mcpitanlibarch.api.util.client; +import ml.pkom.mcpitanlibarch.api.client.gui.widget.CompatibleTexturedButtonWidget; import ml.pkom.mcpitanlibarch.api.client.gui.widget.RedrawableTexturedButtonWidget; import ml.pkom.mcpitanlibarch.api.util.TextUtil; import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; @@ -51,20 +52,20 @@ public static ButtonWidget createButtonWidget(int x, int y, int width, int heigh return new ButtonWidget(x, y, width , height, message, onPress, tooltipSupplier); } - public static TexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, ButtonWidget.PressAction pressAction) { + public static CompatibleTexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, ButtonWidget.PressAction pressAction) { return createTexturedButtonWidget(x, y, width, height, u, v, height, texture, pressAction); } - public static TexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, ButtonWidget.PressAction pressAction) { + public static CompatibleTexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, ButtonWidget.PressAction pressAction) { return createTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, 256, 256, pressAction); } - public static TexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction) { + public static CompatibleTexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction) { return createTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, Texts.empty()); } - public static TexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text message) { - return new TexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, message); + public static CompatibleTexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text message) { + return new CompatibleTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, message); } public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, ButtonWidget.PressAction pressAction) { From 491ca9f47e864252a0482f54dc1cc603129f29a8 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 14 Oct 2023 14:18:27 +0900 Subject: [PATCH 186/617] fix 1193 --- .../api/client/SimpleHandledScreen.java | 2 +- .../CompatibleTexturedButtonWidget.java | 21 +------------------ .../RedrawableTexturedButtonWidget.java | 1 - 3 files changed, 2 insertions(+), 22 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 252166f04..9579a167a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -67,7 +67,7 @@ public void callRenderBackground(DrawObjectDM drawObjectDM) { public void callRenderBackground(RenderArgs args) { - super.renderBackground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + super.renderBackground(args.drawObjectDM.getStack()); } public void callDrawMouseoverTooltip(DrawMouseoverTooltipArgs args) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java index 639556672..0dc6412e5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java @@ -1,20 +1,12 @@ package ml.pkom.mcpitanlibarch.api.client.gui.widget; import ml.pkom.mcpitanlibarch.api.util.TextUtil; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ButtonTextures; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.text.Text; import net.minecraft.util.Identifier; public class CompatibleTexturedButtonWidget extends TexturedButtonWidget { - private final Identifier texture; - private final int u; - private final int v; - private final int hoveredVOffset; - private final int textureWidth; - private final int textureHeight; public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, ButtonWidget.PressAction pressAction) { this(x, y, width, height, u, v, height, texture, 256, 256, pressAction); @@ -29,22 +21,11 @@ public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u } public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text text) { - super(x, y, width, height, new ButtonTextures(texture, texture), pressAction, text); - this.textureWidth = textureWidth; - this.textureHeight = textureHeight; - this.u = u; - this.v = v; - this.hoveredVOffset = hoveredVOffset; - this.texture = texture; + super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text); } public void setPos(int x, int y) { setX(x); setY(y); } - - @Override - public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { - context.drawTexture(texture, this.getX(), this.getY(), u, v + (isSelected() ? hoveredVOffset : 0), this.width, this.height, textureWidth, textureHeight); - } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java index 2b41f698b..c0ee341d5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java @@ -3,7 +3,6 @@ import ml.pkom.mcpitanlibarch.api.util.client.RenderUtil; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Identifier; From 92b4e5d1ae883be74b35dc890b11b7080f0369e1 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 14 Oct 2023 14:34:07 +0900 Subject: [PATCH 187/617] fix 1193 --- .../api/client/gui/widget/CompatibleTexturedButtonWidget.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java index 0dc6412e5..c68572003 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java @@ -25,7 +25,7 @@ public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u } public void setPos(int x, int y) { - setX(x); - setY(y); + this.x = x; + this.y = y; } } From 979b025170e14e370a0d7cd7d99e75026791cde5 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 7 Nov 2023 18:03:57 +0900 Subject: [PATCH 188/617] version & addDrawableCTBW --- .../mcpitanlibarch/api/client/SimpleHandledScreen.java | 7 ++++++- info.properties | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java index 9579a167a..435a334c9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java @@ -1,5 +1,6 @@ package ml.pkom.mcpitanlibarch.api.client; +import ml.pkom.mcpitanlibarch.api.client.gui.widget.CompatibleTexturedButtonWidget; import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; import ml.pkom.mcpitanlibarch.api.util.client.ScreenUtil; import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.*; @@ -29,11 +30,15 @@ public SimpleHandledScreen(ScreenHandler handler, PlayerInventory inventory, Tex this.handler = handler; } - protected T addDrawableChild_compatibility(T drawableElement) { + public T addDrawableChild_compatibility(T drawableElement) { return super.addDrawableChild(drawableElement); // addButton } + public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWidget widget) { + return addDrawableChild_compatibility(widget); + } + @Deprecated @Override protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mouseY) { diff --git a/info.properties b/info.properties index 7be188f2f..b19cb8d00 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.7.9 +mod_version=1.8.0 maven_group=ml.pkom \ No newline at end of file From fa5dd0bc50151c75565047eea4e0b9070a5fe37c Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 7 Nov 2023 18:27:48 +0900 Subject: [PATCH 189/617] gradle --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 93cdcb97e..ed81f7bfa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ yarn_mappings=1.18.2+build.4 fabric_api_version=0.58.0+1.18.2 # https://files.minecraftforge.net/net/minecraftforge/forge/ -forge_version=1.18.2-40.1.80 +forge_version=1.18.2-40.2.0 # https://lambdaurora.dev/tools/import_quilt.html quilt_loader_version=0.18.4-pre.3 From 085a789be42f8f6ba1e349c15dd943d25b2b2600 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 7 Nov 2023 22:18:34 +0900 Subject: [PATCH 190/617] add APIs --- .../api/event/v0/EventRegistry.java | 17 ++++++++++-- .../event/v0/event/ItemStackActionEvent.java | 27 +++++++++++++++++++ .../event/v0/event/ServerConnectionEvent.java | 15 +++++++++++ .../mcpitanlibarch/api/util/PlayerUtil.java | 21 +++++++++++++++ .../mcpitanlibarch/api/util/RecipeUtil.java | 16 ++++++++++- .../mcpitanlibarch/mixin/ItemStackMixin.java | 18 +++++++++++++ .../mcpitanlibarch-common.mixins.json | 1 + info.properties | 2 +- 8 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ServerConnectionEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java index 704ac494f..7112e8336 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java @@ -2,6 +2,9 @@ import dev.architectury.event.events.common.LifecycleEvent; import dev.architectury.event.events.common.PlayerEvent; +import ml.pkom.mcpitanlibarch.api.event.v0.event.ItemStackActionEvent; +import ml.pkom.mcpitanlibarch.api.event.v0.event.ServerConnectionEvent; +import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; @@ -12,11 +15,11 @@ public class EventRegistry { public static class ServerConnection { // Architectury: PlayerEvent public static void join(PlayerJoin state) { - PlayerEvent.PLAYER_JOIN.register(state::join); + ServerConnectionEvent.join(state); } public static void quit(PlayerQuit state) { - PlayerEvent.PLAYER_QUIT.register(state::quit); + ServerConnectionEvent.quit(state); } public interface PlayerJoin { @@ -28,6 +31,16 @@ public interface PlayerQuit { } } + public static class ItemStackAction { + public static void damage(ItemStackDamageState state) { + ItemStackActionEvent.register(state); + } + + public interface ItemStackDamageState { + void onDamage(ItemStack stack); + } + } + public static class ServerLifecycle { // Architectury: LifecycleEvent public static void serverStarted(ServerState state) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java new file mode 100644 index 000000000..890d3aa43 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java @@ -0,0 +1,27 @@ +package ml.pkom.mcpitanlibarch.api.event.v0.event; + +import ml.pkom.mcpitanlibarch.api.event.v0.EventRegistry; +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class ItemStackActionEvent { + private static final List states = new ArrayList<>(); + + public static void register(EventRegistry.ItemStackAction.ItemStackDamageState state) { + states.add(state); + } + + public static void call(ItemStack stack) { + if (states.isEmpty()) return; + for (EventRegistry.ItemStackAction.ItemStackDamageState state : states) { + state.onDamage(stack); + } + } + + public static void unregister(EventRegistry.ItemStackAction.ItemStackDamageState state) { + states.remove(state); + } + +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ServerConnectionEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ServerConnectionEvent.java new file mode 100644 index 000000000..2c13972bf --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ServerConnectionEvent.java @@ -0,0 +1,15 @@ +package ml.pkom.mcpitanlibarch.api.event.v0.event; + +import dev.architectury.event.events.common.PlayerEvent; +import ml.pkom.mcpitanlibarch.api.event.v0.EventRegistry; + +public class ServerConnectionEvent { + // Architectury: PlayerEvent + public static void join(EventRegistry.ServerConnection.PlayerJoin state) { + PlayerEvent.PLAYER_JOIN.register(state::join); + } + + public static void quit(EventRegistry.ServerConnection.PlayerQuit state) { + PlayerEvent.PLAYER_QUIT.register(state::quit); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java index af4905dc9..6d8823b66 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java @@ -3,6 +3,7 @@ import ml.pkom.mcpitanlibarch.api.entity.Player; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; +import net.minecraft.text.Text; import net.minecraft.world.World; import java.util.ArrayList; @@ -50,4 +51,24 @@ public static boolean isExistByUUID(MinecraftServer server, UUID uuid) { public static boolean isExistByUUID(World world, UUID uuid) { return isExistByUUID(world.getServer(), uuid); } + + public static boolean isExistByName(MinecraftServer server, String name) { + return server.getPlayerManager().getPlayer(name) != null; + } + + public static boolean isExistByName(World world, String name) { + return isExistByName(world.getServer(), name); + } + + public static boolean isExistByIP(MinecraftServer server, String ip) { + return !server.getPlayerManager().getPlayersByIp(ip).isEmpty(); + } + + public static boolean isExistByIP(World world, String ip) { + return isExistByIP(world.getServer(), ip); + } + + public static void sendMessage(Player player, String message) { + player.sendMessage(TextUtil.literal(message)); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java index 65ea734a2..e990b71db 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java @@ -4,11 +4,16 @@ import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeEntry; import net.minecraft.recipe.ShapelessRecipe; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + public class RecipeUtil { public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { return createShapelessRecipe(id, group, output, input); @@ -22,11 +27,20 @@ public static ItemStack craft(Recipe recipe, C inventor return recipe.craft(inventory); } - public static ItemStack getOutput(Recipe recipe, World world) { return recipe.getOutput(); } + public static List> getAllRecipes(World world) { + Collection> recipes = world.getRecipeManager().values(); + List> outRecipes = new ArrayList<>(); + for (RecipeEntry recipeEntry : recipes) { + Recipe recipe = recipeEntry.value(); + outRecipes.add(recipe); + } + return outRecipes; + } + public enum CompatibilityCraftingRecipeCategory { BUILDING, REDSTONE, diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java new file mode 100644 index 000000000..a04e69c0b --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java @@ -0,0 +1,18 @@ +package ml.pkom.mcpitanlibarch.mixin; + +import ml.pkom.mcpitanlibarch.api.event.v0.event.ItemStackActionEvent; +import net.minecraft.item.ItemStack; +import net.minecraft.server.network.ServerPlayerEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ItemStack.class) +public abstract class ItemStackMixin { + + @Inject(method = "damage(ILnet/minecraft/util/math/random/Random;Lnet/minecraft/server/network/ServerPlayerEntity;)Z", at = @At("HEAD"), cancellable = true) + public void damage(int amount, net.minecraft.util.math.random.Random random, ServerPlayerEntity player, CallbackInfoReturnable cir) { + ItemStackActionEvent.call((ItemStack) (Object) this); + } +} diff --git a/common/src/main/resources/mcpitanlibarch-common.mixins.json b/common/src/main/resources/mcpitanlibarch-common.mixins.json index c3b102ae3..d8e6da905 100644 --- a/common/src/main/resources/mcpitanlibarch-common.mixins.json +++ b/common/src/main/resources/mcpitanlibarch-common.mixins.json @@ -5,6 +5,7 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "ItemMixin", + "ItemStackMixin", "ItemUsageContextMixin", "MinecraftServerTimer", "ServerWorldTimer" diff --git a/info.properties b/info.properties index b19cb8d00..30f252fa1 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.0 +mod_version=1.8.1 maven_group=ml.pkom \ No newline at end of file From 82171813c2860d10d5656a1aaf70859c395f5b62 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 7 Nov 2023 22:23:55 +0900 Subject: [PATCH 191/617] add APIs-2 --- .../ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java | 10 ++-------- .../ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java | 3 ++- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java index e990b71db..83a4dd299 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java @@ -4,7 +4,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; -import net.minecraft.recipe.RecipeEntry; import net.minecraft.recipe.ShapelessRecipe; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; @@ -32,13 +31,8 @@ public static ItemStack getOutput(Recipe recipe, World } public static List> getAllRecipes(World world) { - Collection> recipes = world.getRecipeManager().values(); - List> outRecipes = new ArrayList<>(); - for (RecipeEntry recipeEntry : recipes) { - Recipe recipe = recipeEntry.value(); - outRecipes.add(recipe); - } - return outRecipes; + Collection> recipes = world.getRecipeManager().values(); + return recipes.stream().toList(); } public enum CompatibilityCraftingRecipeCategory { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java index a04e69c0b..5152ea7e2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java @@ -3,6 +3,7 @@ import ml.pkom.mcpitanlibarch.api.event.v0.event.ItemStackActionEvent; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.math.random.Random; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -12,7 +13,7 @@ public abstract class ItemStackMixin { @Inject(method = "damage(ILnet/minecraft/util/math/random/Random;Lnet/minecraft/server/network/ServerPlayerEntity;)Z", at = @At("HEAD"), cancellable = true) - public void damage(int amount, net.minecraft.util.math.random.Random random, ServerPlayerEntity player, CallbackInfoReturnable cir) { + public void damage(int amount, Random random, ServerPlayerEntity player, CallbackInfoReturnable cir) { ItemStackActionEvent.call((ItemStack) (Object) this); } } From 4ca4b4fcc8d893303e9cbdbe017915dc31f82883 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Tue, 7 Nov 2023 22:52:24 +0900 Subject: [PATCH 192/617] add APIs-3 --- .../java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java index 5152ea7e2..2999e2ee5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java @@ -3,16 +3,17 @@ import ml.pkom.mcpitanlibarch.api.event.v0.event.ItemStackActionEvent; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.math.random.Random; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Random; + @Mixin(ItemStack.class) public abstract class ItemStackMixin { - @Inject(method = "damage(ILnet/minecraft/util/math/random/Random;Lnet/minecraft/server/network/ServerPlayerEntity;)Z", at = @At("HEAD"), cancellable = true) + @Inject(method = "damage(ILjava/util/Random;Lnet/minecraft/server/network/ServerPlayerEntity;)Z", at = @At("HEAD"), cancellable = true) public void damage(int amount, Random random, ServerPlayerEntity player, CallbackInfoReturnable cir) { ItemStackActionEvent.call((ItemStack) (Object) this); } From 375e60bcc9c7c8416d5945228760bf328f515612 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Wed, 8 Nov 2023 00:02:42 +0900 Subject: [PATCH 193/617] add APIs --- .../api/event/v0/event/ItemStackActionEvent.java | 7 +++++++ .../java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java | 2 ++ 2 files changed, 9 insertions(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java index 890d3aa43..6afbab852 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java @@ -7,6 +7,13 @@ import java.util.List; public class ItemStackActionEvent { + + public static Boolean returnValue = null; + + public static void setReturnValue(boolean setReturnValue) { + ItemStackActionEvent.returnValue = setReturnValue; + } + private static final List states = new ArrayList<>(); public static void register(EventRegistry.ItemStackAction.ItemStackDamageState state) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java index 2999e2ee5..aeddf1763 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java @@ -16,5 +16,7 @@ public abstract class ItemStackMixin { @Inject(method = "damage(ILjava/util/Random;Lnet/minecraft/server/network/ServerPlayerEntity;)Z", at = @At("HEAD"), cancellable = true) public void damage(int amount, Random random, ServerPlayerEntity player, CallbackInfoReturnable cir) { ItemStackActionEvent.call((ItemStack) (Object) this); + if (ItemStackActionEvent.returnValue != null) + cir.setReturnValue(ItemStackActionEvent.returnValue); } } From 9e09189d559e227fadb19c86811db83de3391404 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Wed, 8 Nov 2023 00:03:26 +0900 Subject: [PATCH 194/617] add APIs2 --- .../main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java index aeddf1763..3077cf7e6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java @@ -15,6 +15,7 @@ public abstract class ItemStackMixin { @Inject(method = "damage(ILjava/util/Random;Lnet/minecraft/server/network/ServerPlayerEntity;)Z", at = @At("HEAD"), cancellable = true) public void damage(int amount, Random random, ServerPlayerEntity player, CallbackInfoReturnable cir) { + ItemStackActionEvent.returnValue = null; ItemStackActionEvent.call((ItemStack) (Object) this); if (ItemStackActionEvent.returnValue != null) cir.setReturnValue(ItemStackActionEvent.returnValue); From 09b8179f5501e40b8fd1f34f911b7f77dd8cc39c Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Wed, 8 Nov 2023 22:00:49 +0900 Subject: [PATCH 195/617] fix getAllRecipes --- .../ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java | 11 ++++++++++- info.properties | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java index 83a4dd299..4849d9415 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java @@ -5,6 +5,7 @@ import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.ShapelessRecipe; +import net.minecraft.recipe.*; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; @@ -32,7 +33,15 @@ public static ItemStack getOutput(Recipe recipe, World public static List> getAllRecipes(World world) { Collection> recipes = world.getRecipeManager().values(); - return recipes.stream().toList(); + return new ArrayList<>(recipes); + } + + public static RecipeType getType(Recipe recipe) { + return recipe.getType(); + } + + public static Identifier getId(Recipe recipe) { + return new Identifier(recipe.getClass().hashCode() + ""); } public enum CompatibilityCraftingRecipeCategory { diff --git a/info.properties b/info.properties index 30f252fa1..694c348f4 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.1 +mod_version=1.8.2 maven_group=ml.pkom \ No newline at end of file From 6f4c1e2f6cc5f6f8bc26241969c2e9a4482ca76c Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 11 Nov 2023 00:07:55 +0900 Subject: [PATCH 196/617] fix PersistentStateUtil --- .../api/util/PersistentStateUtil.java | 27 +++++++++++++++++++ info.properties | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java new file mode 100644 index 000000000..2ed6c444d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java @@ -0,0 +1,27 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.datafixer.DataFixTypes; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.PersistentState; +import net.minecraft.world.PersistentStateManager; +import net.minecraft.world.World; + +import java.util.function.Function; +import java.util.function.Supplier; + +public class PersistentStateUtil { + public static T getOrCreate(PersistentStateManager manager, String id, Supplier supplier, Function function) { + PersistentState.Type type = new PersistentState.Type<>(supplier, function, DataFixTypes.LEVEL); + return manager.getOrCreate(type, id); + } + + public static PersistentStateManager getManagerFromServer(MinecraftServer server) { + return server.getWorld(World.OVERWORLD).getPersistentStateManager(); + } + + public static PersistentStateManager getManagerFromWorld(ServerWorld world) { + return world.getPersistentStateManager(); + } +} \ No newline at end of file diff --git a/info.properties b/info.properties index 694c348f4..e80c5edb9 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.2 +mod_version=1.8.3 maven_group=ml.pkom \ No newline at end of file From 20218b4c56321fbcbb0360b84a6b9f51769f9905 Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sat, 11 Nov 2023 15:06:50 +0900 Subject: [PATCH 197/617] 1201 --- .../ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java index 2ed6c444d..7f657f8b7 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java @@ -1,6 +1,5 @@ package ml.pkom.mcpitanlibarch.api.util; -import net.minecraft.datafixer.DataFixTypes; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ServerWorld; @@ -13,8 +12,7 @@ public class PersistentStateUtil { public static T getOrCreate(PersistentStateManager manager, String id, Supplier supplier, Function function) { - PersistentState.Type type = new PersistentState.Type<>(supplier, function, DataFixTypes.LEVEL); - return manager.getOrCreate(type, id); + return manager.getOrCreate(function, supplier, id); } public static PersistentStateManager getManagerFromServer(MinecraftServer server) { From 56b0d92922f38792e3d0d83a0617e481db9f9540 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 26 Nov 2023 20:45:41 +0900 Subject: [PATCH 198/617] add PacketByteUtil API --- .../api/network/PacketByteUtil.java | 158 ++++++++++++++++++ info.properties | 2 +- 2 files changed, 159 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java index 5c1e81ea3..1d3b75e92 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java @@ -3,6 +3,8 @@ import io.netty.buffer.Unpooled; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; +import net.minecraft.nbt.NbtTagSizeTracker; import net.minecraft.network.PacketByteBuf; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -93,6 +95,162 @@ public static void writeVar(PacketByteBuf buf, Object obj) { writeMap(buf, map); } } + + public static PacketByteBuf writeNbt(PacketByteBuf buf, NbtCompound nbt) { + return buf.writeNbt(nbt); + } + + public static NbtCompound readNbt(PacketByteBuf buf) { + return buf.readNbt(); + } + + public static PacketByteBuf writeItemStack(PacketByteBuf buf, ItemStack stack) { + return buf.writeItemStack(stack); + } + + public static ItemStack readItemStack(PacketByteBuf buf) { + return buf.readItemStack(); + } + + public static PacketByteBuf writeIdentifier(PacketByteBuf buf, Identifier identifier) { + return buf.writeIdentifier(identifier); + } + + public static Identifier readIdentifier(PacketByteBuf buf) { + return buf.readIdentifier(); + } + + public static PacketByteBuf writeText(PacketByteBuf buf, Text text) { + return buf.writeText(text); + } + + public static Text readText(PacketByteBuf buf) { + return buf.readText(); + } + + public static PacketByteBuf writeBlockPos(PacketByteBuf buf, BlockPos pos) { + return buf.writeBlockPos(pos); + } + + public static BlockPos readBlockPos(PacketByteBuf buf) { + return buf.readBlockPos(); + } + + public static PacketByteBuf writeUuid(PacketByteBuf buf, UUID uuid) { + return buf.writeUuid(uuid); + } + + public static UUID readUuid(PacketByteBuf buf) { + return buf.readUuid(); + } + + public static PacketByteBuf writeVarInt(PacketByteBuf buf, int i) { + return buf.writeVarInt(i); + } + + public static int readVarInt(PacketByteBuf buf) { + return buf.readVarInt(); + } + + public static PacketByteBuf writeVarLong(PacketByteBuf buf, long l) { + return buf.writeVarLong(l); + } + + public static long readVarLong(PacketByteBuf buf) { + return buf.readVarLong(); + } + + public static PacketByteBuf writeBoolean(PacketByteBuf buf, boolean b) { + return buf.writeBoolean(b); + } + + public static boolean readBoolean(PacketByteBuf buf) { + return buf.readBoolean(); + } + + public static PacketByteBuf writeByte(PacketByteBuf buf, byte b) { + return buf.writeByte(b); + } + + public static byte readByte(PacketByteBuf buf) { + return buf.readByte(); + } + + public static PacketByteBuf writeShort(PacketByteBuf buf, short s) { + return buf.writeShort(s); + } + + public static short readShort(PacketByteBuf buf) { + return buf.readShort(); + } + + public static PacketByteBuf writeInt(PacketByteBuf buf, int i) { + return buf.writeInt(i); + } + + public static int readInt(PacketByteBuf buf) { + return buf.readInt(); + } + + public static PacketByteBuf writeLong(PacketByteBuf buf, long l) { + return buf.writeLong(l); + } + + public static long readLong(PacketByteBuf buf) { + return buf.readLong(); + } + + public static PacketByteBuf writeFloat(PacketByteBuf buf, float f) { + return buf.writeFloat(f); + } + + public static float readFloat(PacketByteBuf buf) { + return buf.readFloat(); + } + + public static PacketByteBuf writeDouble(PacketByteBuf buf, double d) { + return buf.writeDouble(d); + } + + public static double readDouble(PacketByteBuf buf) { + return buf.readDouble(); + } + + public static PacketByteBuf writeByteArray(PacketByteBuf buf, byte[] bytes) { + return buf.writeByteArray(bytes); + } + + public static byte[] readByteArray(PacketByteBuf buf) { + return buf.readByteArray(); + } + + public static PacketByteBuf writeString(PacketByteBuf buf, String s) { + return buf.writeString(s); + } + + public static String readString(PacketByteBuf buf) { + return buf.readString(); + } + + public static PacketByteBuf writeIntArray(PacketByteBuf buf, int[] ints) { + return buf.writeIntArray(ints); + } + + public static int[] readIntArray(PacketByteBuf buf) { + return buf.readIntArray(); + } + + public static PacketByteBuf writeLongArray(PacketByteBuf buf, long[] longs) { + return buf.writeLongArray(longs); + } + + public static long[] readLongArray(PacketByteBuf buf) { + return buf.readLongArray(); + } + + public static NbtElement readUnlimitedNbt(PacketByteBuf buf) { + return buf.readNbt(NbtTagSizeTracker.ofUnlimitedBytes()); + } } diff --git a/info.properties b/info.properties index e80c5edb9..68747a1cb 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.3 +mod_version=1.8.4 maven_group=ml.pkom \ No newline at end of file From e7ac908acb12175ab097aa43f694f59c8eb93e38 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 26 Nov 2023 21:05:27 +0900 Subject: [PATCH 199/617] add PacketByteUtil API 1201 --- .../api/network/PacketByteUtil.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java index 1d3b75e92..9ba299858 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java @@ -1,5 +1,6 @@ package ml.pkom.mcpitanlibarch.api.network; +import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -160,7 +161,7 @@ public static long readVarLong(PacketByteBuf buf) { return buf.readVarLong(); } - public static PacketByteBuf writeBoolean(PacketByteBuf buf, boolean b) { + public static ByteBuf writeBoolean(PacketByteBuf buf, boolean b) { return buf.writeBoolean(b); } @@ -168,7 +169,7 @@ public static boolean readBoolean(PacketByteBuf buf) { return buf.readBoolean(); } - public static PacketByteBuf writeByte(PacketByteBuf buf, byte b) { + public static ByteBuf writeByte(PacketByteBuf buf, byte b) { return buf.writeByte(b); } @@ -176,7 +177,7 @@ public static byte readByte(PacketByteBuf buf) { return buf.readByte(); } - public static PacketByteBuf writeShort(PacketByteBuf buf, short s) { + public static ByteBuf writeShort(PacketByteBuf buf, short s) { return buf.writeShort(s); } @@ -184,7 +185,7 @@ public static short readShort(PacketByteBuf buf) { return buf.readShort(); } - public static PacketByteBuf writeInt(PacketByteBuf buf, int i) { + public static ByteBuf writeInt(PacketByteBuf buf, int i) { return buf.writeInt(i); } @@ -192,7 +193,7 @@ public static int readInt(PacketByteBuf buf) { return buf.readInt(); } - public static PacketByteBuf writeLong(PacketByteBuf buf, long l) { + public static ByteBuf writeLong(PacketByteBuf buf, long l) { return buf.writeLong(l); } @@ -200,7 +201,7 @@ public static long readLong(PacketByteBuf buf) { return buf.readLong(); } - public static PacketByteBuf writeFloat(PacketByteBuf buf, float f) { + public static ByteBuf writeFloat(PacketByteBuf buf, float f) { return buf.writeFloat(f); } @@ -208,7 +209,7 @@ public static float readFloat(PacketByteBuf buf) { return buf.readFloat(); } - public static PacketByteBuf writeDouble(PacketByteBuf buf, double d) { + public static ByteBuf writeDouble(PacketByteBuf buf, double d) { return buf.writeDouble(d); } @@ -249,7 +250,7 @@ public static long[] readLongArray(PacketByteBuf buf) { } public static NbtElement readUnlimitedNbt(PacketByteBuf buf) { - return buf.readNbt(NbtTagSizeTracker.ofUnlimitedBytes()); + return buf.readNbt(new NbtTagSizeTracker(Long.MAX_VALUE)); } } From c210f0d3f243236a9236b568448ffd5ebd8164e1 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 12 Jan 2024 21:37:54 +0900 Subject: [PATCH 200/617] add APIs --- .../api/block/ExtendBlockEntityProvider.java | 11 +++++++++-- .../mcpitanlibarch/api/util/IngredientUtil.java | 16 ++++++++++++++++ .../api/util/SimpleInventoryUtil.java | 11 +++++++++++ info.properties | 2 +- 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java index 0599a54a5..58cd78b24 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java @@ -49,9 +49,16 @@ default BlockEntityTicker getTicker(World world, Bloc return BlockEntityProvider.super.getTicker(world, state, type); } + @Nullable + default ExtendBlockEntityTicker getCompatibleTicker(World world, BlockState state, BlockEntityType type) { + BlockEntityTicker ticker = getTicker(world, state, type); + if (ticker instanceof ExtendBlockEntityTicker) + return (ExtendBlockEntityTicker) ticker; + + return null; + } + default boolean isTick() { return false; } - - } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java new file mode 100644 index 000000000..515266484 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java @@ -0,0 +1,16 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.recipe.Ingredient; +import net.minecraft.registry.Registries; +import net.minecraft.registry.tag.TagKey; +import net.minecraft.util.Identifier; + +public class IngredientUtil { + public static Ingredient fromTagByIdentifier(Identifier id) { + return Ingredient.fromTag(TagKey.of(Registries.ITEM.getKey(), id)); + } + + public static Ingredient fromTagByString(String id) { + return fromTagByIdentifier(new Identifier(id)); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java new file mode 100644 index 000000000..26387fa13 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java @@ -0,0 +1,11 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.inventory.SimpleInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; + +public class SimpleInventoryUtil { + public static DefaultedList getHeldStacks(SimpleInventory inventory) { + return inventory.getHeldStacks(); + } +} diff --git a/info.properties b/info.properties index 68747a1cb..f769aaa02 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.4 +mod_version=1.8.5 maven_group=ml.pkom \ No newline at end of file From 30f3cc8448dc1cabd0f95e1de0c43593e0fda8dd Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 12 Jan 2024 21:56:18 +0900 Subject: [PATCH 201/617] fix SimpleInventoryUtil 1.20.2 --- .../pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java index 26387fa13..aee1aff58 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java @@ -6,6 +6,10 @@ public class SimpleInventoryUtil { public static DefaultedList getHeldStacks(SimpleInventory inventory) { - return inventory.getHeldStacks(); + DefaultedList stacks = DefaultedList.ofSize(inventory.size()); + for (int i = 0; i < inventory.size(); i++) { + stacks.add(i, inventory.getStack(i)); + } + return stacks; } } From b6b915302a03abbdb94381063af7f16c6aa19b1e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 12 Jan 2024 22:25:23 +0900 Subject: [PATCH 202/617] Fix IngredientUtil 1192 --- .../ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java index 515266484..af34ea1ea 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java @@ -1,13 +1,13 @@ package ml.pkom.mcpitanlibarch.api.util; import net.minecraft.recipe.Ingredient; -import net.minecraft.registry.Registries; -import net.minecraft.registry.tag.TagKey; +import net.minecraft.tag.TagKey; import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; public class IngredientUtil { public static Ingredient fromTagByIdentifier(Identifier id) { - return Ingredient.fromTag(TagKey.of(Registries.ITEM.getKey(), id)); + return Ingredient.fromTag(TagKey.of(Registry.ITEM_KEY, id)); } public static Ingredient fromTagByString(String id) { From c284dca4ff8ad9039992949eb5202a3e23b49bc1 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 30 Jan 2024 16:25:22 +0900 Subject: [PATCH 203/617] add APIs --- .../java/ml/pkom/easyapi/config/Config.java | 4 ++ .../mcpitanlibarch/api/entity/Player.java | 4 ++ .../api/packet/UpdatePacketType.java | 26 ++++++++++ .../api/tile/ExtendBlockEntity.java | 21 ++++++++- .../api/util/ActionResultUtil.java | 30 ++++++++++++ .../mcpitanlibarch/api/util/PlayerUtil.java | 25 ++++++++++ .../mcpitanlibarch/api/util/WorldUtil.java | 47 +++++++++++++++++++ .../mcpitanlibarch/api/util/math/PosUtil.java | 8 ++++ .../api/world/CompatiblePersistentState.java | 18 +++++++ info.properties | 2 +- 10 files changed, 183 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/packet/UpdatePacketType.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ActionResultUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/world/CompatiblePersistentState.java diff --git a/common/src/main/java/ml/pkom/easyapi/config/Config.java b/common/src/main/java/ml/pkom/easyapi/config/Config.java index 8d3e8e4ce..3d80d0693 100644 --- a/common/src/main/java/ml/pkom/easyapi/config/Config.java +++ b/common/src/main/java/ml/pkom/easyapi/config/Config.java @@ -36,6 +36,10 @@ public Config(Config config) { configMap = config.configMap; }; + public boolean has(String key) { + return configMap.containsKey(key); + } + /** * マップのキーから値を取得 * "."でパスを区切る diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index 8af9ae802..f85c2e31e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -273,4 +273,8 @@ public void incrementStat(Stat stat) { public void incrementStat(StatType type, T object) { getEntity().incrementStat(type.getOrCreateStat(object)); } + + public void teleport(double x, double y, double z) { + getEntity().teleport(x, y, z); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/packet/UpdatePacketType.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/packet/UpdatePacketType.java new file mode 100644 index 000000000..c2f6a40f1 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/packet/UpdatePacketType.java @@ -0,0 +1,26 @@ +package ml.pkom.mcpitanlibarch.api.packet; + +public class UpdatePacketType { + public static final UpdatePacketType NONE = new UpdatePacketType("NONE"); + public static final UpdatePacketType BLOCK_ENTITY_UPDATE_S2C = new UpdatePacketType("BLOCK_ENTITY_UPDATE_S2C"); + + public final String name; + + public UpdatePacketType(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public UpdatePacketType fromName(String name) { + switch (name) { + case "NONE": + return NONE; + case "BLOCK_ENTITY_UPDATE_S2C": + return BLOCK_ENTITY_UPDATE_S2C; + } + return null; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java index d1ae1a077..0b913d62a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java @@ -1,14 +1,18 @@ package ml.pkom.mcpitanlibarch.api.tile; import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; -import ml.pkom.mcpitanlibarch.api.nbt.NbtTag; +import ml.pkom.mcpitanlibarch.api.packet.UpdatePacketType; import ml.pkom.mcpitanlibarch.api.world.ExtendWorld; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.listener.ClientPlayPacketListener; +import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; public class ExtendBlockEntity extends BlockEntity { public ExtendWorld world; @@ -20,6 +24,21 @@ public ExtendBlockEntity(BlockEntityType type, TileCreateEvent event) { this(type, event.getBlockPos(), event.getBlockState()); } + @Nullable + @Override + @Deprecated + public Packet toUpdatePacket() { + switch (getUpdatePacketType().name) { + case "BLOCK_ENTITY_UPDATE_S2C": + return BlockEntityUpdateS2CPacket.create(this); + } + return super.toUpdatePacket(); + } + + public UpdatePacketType getUpdatePacketType() { + return UpdatePacketType.NONE; + } + public void writeNbtOverride(NbtCompound nbt) { super.writeNbt(nbt); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ActionResultUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ActionResultUtil.java new file mode 100644 index 000000000..8977a4843 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ActionResultUtil.java @@ -0,0 +1,30 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import net.minecraft.util.ActionResult; +import net.minecraft.util.TypedActionResult; + +public class ActionResultUtil { + + public static TypedActionResult typedActionResult(ActionResult result, T t, boolean swingHand) { + switch (result) { + case PASS: + return TypedActionResult.pass(t); + case SUCCESS: + return TypedActionResult.success(t, swingHand); + case FAIL: + return TypedActionResult.fail(t); + case CONSUME: + case CONSUME_PARTIAL: + return TypedActionResult.consume(t); + } + return TypedActionResult.pass(t); + } + + public static TypedActionResult typedActionResult(ActionResult result, T t) { + return typedActionResult(result, t, true); + } + + public static ActionResult actionResult(TypedActionResult result) { + return result.getResult(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java index 6d8823b66..c6cbac3c0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java @@ -4,6 +4,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.text.Text; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.ArrayList; @@ -71,4 +72,28 @@ public static boolean isExistByIP(World world, String ip) { public static void sendMessage(Player player, String message) { player.sendMessage(TextUtil.literal(message)); } + + public static float getYaw(Player player) { + return player.getYaw(); + } + + public static float getPitch(Player player) { + return player.getPitch(); + } + + public static BlockPos getBlockPos(Player player) { + return player.getBlockPos(); + } + + public static World getWorld(Player player) { + return player.getWorld(); + } + + public static boolean isClient(Player player) { + return player.isClient(); + } + + public static void teleport(Player player, double x, double y, double z) { + player.teleport(x, y, z); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index 3ae1ff24f..9ffac70a6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -8,10 +8,16 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; import net.minecraft.item.ItemStack; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.world.ChunkTicketType; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; @@ -84,4 +90,45 @@ public static void playSound(World world, @Nullable Player player, BlockPos pos, public static void sendEntityStatus(World world, Entity entity, byte status) { world.sendEntityStatus(entity, status); } + + public static BlockPos getSpawnPos(World world) { + return world.getSpawnPos(); + } + + public static World getWorld(World world, Identifier worldId) { + if (isClient(world)) return null; + return getWorld(world.getServer(), worldId); + } + + public static World getOverworld(MinecraftServer server) { + return server.getWorld(World.OVERWORLD); + } + + public static World getNether(MinecraftServer server) { + return server.getWorld(World.NETHER); + } + + public static World getEnd(MinecraftServer server) { + return server.getWorld(World.END); + } + + public static World getWorld(MinecraftServer server, Identifier worldId) { + return server.getWorld(RegistryKey.of(RegistryKeys.WORLD, worldId)); + } + + public static Identifier getWorldId(World world) { + return world.getRegistryKey().getValue(); + } + + public static boolean equals(World world, World world2) { + return Objects.equals(getWorldId(world), getWorldId(world2)); + } + + public static void addTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius, T argument) { + world.getChunkManager().addTicket(type, pos, radius, argument); + } + + public static void removeTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius, T argument) { + world.getChunkManager().removeTicket(type, pos, radius, argument); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java index 20e69b370..7e3b3436f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java @@ -16,4 +16,12 @@ public static BlockPos flooredBlockPos(Position pos) { public static BlockPos flooredBlockPos(Vec3d pos) { return new BlockPos(pos); } + + public static double getSquaredDistance(BlockPos pos1, BlockPos pos2) { + return pos1.getSquaredDistance(pos2); + } + + public static double getSquaredDistance(BlockPos pos1, double x, double y, double z) { + return pos1.getSquaredDistance(x, y, z); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/CompatiblePersistentState.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/CompatiblePersistentState.java new file mode 100644 index 000000000..d7a50e4f6 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/CompatiblePersistentState.java @@ -0,0 +1,18 @@ +package ml.pkom.mcpitanlibarch.api.world; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.world.PersistentState; + +public abstract class CompatiblePersistentState extends PersistentState { + // 1.16 + public CompatiblePersistentState(String key) { + super(); + } + + public CompatiblePersistentState() { + super(); + } + + // 1.16 + public abstract void readNbt(NbtCompound tag); +} diff --git a/info.properties b/info.properties index f769aaa02..6dc2b24a9 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.5 +mod_version=1.8.6 maven_group=ml.pkom \ No newline at end of file From 9840cf75a53b4682906a059225daa1f1d5f67ec7 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 30 Jan 2024 22:08:11 +0900 Subject: [PATCH 204/617] fix for 1.19.3 --- .../java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java index 0b913d62a..ac73c7841 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java @@ -7,8 +7,8 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; -import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; From c7d3e6d723ef327e85502b82560e9072b60adea5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 30 Jan 2024 22:10:06 +0900 Subject: [PATCH 205/617] fix for 1.19.2 --- .../java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index 9ffac70a6..f0c6372ca 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -8,8 +8,6 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; import net.minecraft.item.ItemStack; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ChunkTicketType; import net.minecraft.server.world.ServerWorld; @@ -19,6 +17,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; @@ -113,7 +113,7 @@ public static World getEnd(MinecraftServer server) { } public static World getWorld(MinecraftServer server, Identifier worldId) { - return server.getWorld(RegistryKey.of(RegistryKeys.WORLD, worldId)); + return server.getWorld(RegistryKey.of(Registry.WORLD_KEY, worldId)); } public static Identifier getWorldId(World world) { From 3324350baf6a5fd5558c6334b422d763bfbe7670 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 30 Jan 2024 22:19:07 +0900 Subject: [PATCH 206/617] fix for 1.18.2 --- .../main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index f0c6372ca..01ada101d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -92,7 +92,7 @@ public static void sendEntityStatus(World world, Entity entity, byte status) { } public static BlockPos getSpawnPos(World world) { - return world.getSpawnPos(); + return new BlockPos(world.getLevelProperties().getSpawnX(), world.getLevelProperties().getSpawnY(), world.getLevelProperties().getSpawnZ()); } public static World getWorld(World world, Identifier worldId) { From 693f7a500c9b92bca5bc2fe660c142ca61c39c4c Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 5 Feb 2024 14:18:53 +0900 Subject: [PATCH 207/617] fix apis, add apis --- .../api/command/ConfigCommand.java | 151 ++++++++++++++++++ .../mcpitanlibarch/api/entity/Player.java | 8 + .../api/item/CompatibleItemSettings.java | 9 ++ .../api/item/CreativeTabManager.java | 51 +++++- .../api/item/ExtendSettings.java | 9 ++ .../api/item/tool/CompatiblePickaxeItem.java | 33 ++++ .../api/item/tool/CompatibleToolMaterial.java | 6 + info.properties | 2 +- 8 files changed, 264 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleToolMaterial.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java new file mode 100644 index 000000000..0a3193c05 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java @@ -0,0 +1,151 @@ +package ml.pkom.mcpitanlibarch.api.command; + +import com.mojang.brigadier.arguments.StringArgumentType; +import ml.pkom.easyapi.config.Config; +import ml.pkom.mcpitanlibarch.api.command.argument.StringCommand; +import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import ml.pkom.mcpitanlibarch.api.event.StringCommandEvent; +import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.function.Supplier; + +public class ConfigCommand extends LiteralCommand { + + public final Config config; + public File file; + public Supplier defaultConfigFunction; + public String prefix = "[MCPitanLib]"; + + public ConfigCommand(Config config, File file, String prefix) { + this.config = config; + this.file = file; + this.prefix = prefix; + } + + public ConfigCommand(Config config, File file, String prefix, @Nullable Supplier supplier) { + this.config = config; + this.file = file; + this.defaultConfigFunction = supplier; + this.prefix = prefix; + } + + public ConfigCommand(Config config, File file, @Nullable Supplier supplier) { + this.config = config; + this.file = file; + this.defaultConfigFunction = supplier; + } + + public ConfigCommand(Config config, File file) { + this.config = config; + this.file = file; + } + + public ConfigCommand(Config config) { + this.config = config; + } + + @Override + public void init(CommandSettings settings) { + settings.permissionLevel(3); + + addArgumentCommand("set", new StringCommand() { + @Override + public String getArgumentName() { + return "key"; + } + + @Override + public void init(CommandSettings settings) { + + addArgumentCommand("value", new StringCommand() { + @Override + public String getArgumentName() { + return "value"; + } + + @Override + public void execute(StringCommandEvent event) { + String key = StringArgumentType.getString(event.context, "key"); + String value = StringArgumentType.getString(event.context, "value"); + if (config.get(key) == null) { + event.sendFailure(TextUtil.literal(prefix + " Key not found.")); + return; + } + if (config.get(key).getClass() == String.class) { + config.setString(key, value); + event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); + + } else if (config.get(key).getClass() == Integer.class) { + config.setInt(key, Integer.parseInt(value)); + event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); + + } else if (config.get(key).getClass() == Double.class) { + config.setDouble(key, Double.parseDouble(value)); + event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); + + } else if (config.get(key).getClass() == Boolean.class) { + config.setBoolean(key, Boolean.parseBoolean(value)); + event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); + + } else { + event.sendFailure(TextUtil.literal(prefix + " Not supported type.")); + } + if (file != null) + config.save(file); + } + }); + } + + @Override + public void execute(StringCommandEvent event) { + } + }); + + addArgumentCommand("get", new StringCommand() { + @Override + public String getArgumentName() { + return "key"; + } + + @Override + public void execute(StringCommandEvent event) { + String key = StringArgumentType.getString(event.context, "key"); + if (config.get(key) == null) { + event.sendFailure(TextUtil.literal(prefix + " Key not found.")); + return; + } + event.sendSuccess(TextUtil.literal(prefix + " " + key + ": " + config.get(key).toString()), false); + } + }); + + addArgumentCommand("list", new LiteralCommand() { + @Override + public void execute(ServerCommandEvent event) { + event.sendSuccess(TextUtil.literal(prefix + " Config List"), false); + for (String key : config.configMap.keySet()) { + event.sendSuccess(TextUtil.literal(" - " + key + ": " + config.get(key).toString()), false); + } + } + }); + + if (defaultConfigFunction != null) { + addArgumentCommand("reset", new LiteralCommand() { + @Override + public void execute(ServerCommandEvent event) { + config.configMap.clear(); + defaultConfigFunction.get(); + if (file != null) + config.save(file); + event.sendSuccess(TextUtil.literal(prefix + " Reset config."), false); + } + }); + } + } + + @Override + public void execute(ServerCommandEvent event) { + + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index f85c2e31e..29e756919 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -277,4 +277,12 @@ public void incrementStat(StatType type, T object) { public void teleport(double x, double y, double z) { getEntity().teleport(x, y, z); } + + public ItemStack getMainHandStack() { + return getStackInHand(Hand.MAIN_HAND); + } + + public ItemStack getOffHandStack() { + return getStackInHand(Hand.OFF_HAND); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java index 7fd0a68aa..e3e1fdaa6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java @@ -6,6 +6,8 @@ import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; +import java.util.function.Supplier; + public class CompatibleItemSettings { private final ExtendSettings settings = new ExtendSettings(); @@ -14,6 +16,7 @@ public static CompatibleItemSettings of() { } // ~1.19.2 + @Deprecated public CompatibleItemSettings addGroup(ItemGroup itemGroup) { settings.addGroup(itemGroup); return this; @@ -21,11 +24,17 @@ public CompatibleItemSettings addGroup(ItemGroup itemGroup) { // 1.19.3~ // identifier: Item ID + @Deprecated public CompatibleItemSettings addGroup(ItemGroup itemGroup, Identifier identifier) { settings.addGroup(itemGroup, identifier); return this; } + public CompatibleItemSettings addGroup(Supplier itemGroup, Identifier identifier) { + settings.addGroup(itemGroup, identifier); + return this; + } + public CompatibleItemSettings maxCount(int maxCount) { settings.maxCount(maxCount); return this; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java index 744d060a9..6a6696369 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java @@ -1,5 +1,6 @@ package ml.pkom.mcpitanlibarch.api.item; +import dev.architectury.registry.CreativeTabRegistry; import ml.pkom.mcpitanlibarch.api.util.ItemUtil; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; @@ -8,6 +9,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; public class CreativeTabManager { private static List bookingItems = new ArrayList<>(); @@ -15,35 +17,67 @@ public class CreativeTabManager { // グループ予約済みアイテム public static class BookingItem { + @Deprecated public ItemGroup itemGroup; + + public Supplier itemGroupSupplier; public Identifier identifier; + + @Deprecated private BookingItem(ItemGroup itemGroup, Identifier identifier) { this.itemGroup = itemGroup; this.identifier = identifier; } + + private BookingItem(Supplier itemGroup, Identifier identifier) { + this.itemGroupSupplier = itemGroup; + this.identifier = identifier; + } + + public ItemGroup getItemGroup() { + if (itemGroupSupplier != null) + return itemGroupSupplier.get(); + return itemGroup; + } } // グループ予約済みアイテムスタック public static class BookingStack { + @Deprecated public ItemGroup itemGroup; + + public Supplier itemGroupSupplier; public ItemStack stack; + + @Deprecated private BookingStack(ItemGroup itemGroup, ItemStack stack) { this.itemGroup = itemGroup; this.stack = stack; } + + private BookingStack(Supplier itemGroup, ItemStack stack) { + this.itemGroupSupplier = itemGroup; + this.stack = stack; + } + + public ItemGroup getItemGroup() { + if (itemGroupSupplier != null) + return itemGroupSupplier.get(); + return itemGroup; + } } public static void allRegister() { if (!bookingItems.isEmpty()) { for (BookingItem bookingItem : bookingItems) { - bookingItem.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); + bookingItem.getItemGroup().appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); } bookingItems = new ArrayList<>(); } if (!bookingStacks.isEmpty()) { for (BookingStack bookingStack : bookingStacks) { - bookingStack.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, bookingStack.stack)); + bookingStack.getItemGroup().appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, bookingStack.stack)); } bookingStacks = new ArrayList<>(); } @@ -53,18 +87,27 @@ public static void register(Identifier identifier) { if (bookingItems.isEmpty()) return; for (BookingItem bookingItem : bookingItems) { if (!bookingItem.identifier.toString().equals(identifier.toString())) continue; - bookingItem.itemGroup.appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); - //CreativeTabRegistry.append(bookingItem.itemGroup, ItemUtil.fromId(bookingItem.identifier)); + bookingItem.getItemGroup().appendStacks(DefaultedList.copyOf(ItemStack.EMPTY, new ItemStack(ItemUtil.fromId(bookingItem.identifier)))); bookingItems.remove(bookingItem); break; } } + @Deprecated public static void addItem(ItemGroup itemGroup, Identifier identifier) { bookingItems.add(new BookingItem(itemGroup, identifier)); } + @Deprecated public static void addStack(ItemGroup itemGroup, ItemStack stack) { bookingStacks.add(new BookingStack(itemGroup, stack)); } + + public static void addItem(Supplier itemGroup, Identifier identifier) { + bookingItems.add(new BookingItem(itemGroup, identifier)); + } + + public static void addStack(Supplier itemGroup, ItemStack stack) { + bookingStacks.add(new BookingStack(itemGroup, stack)); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java index aff61e7d6..8b4462882 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java @@ -4,9 +4,12 @@ import net.minecraft.item.ItemGroup; import net.minecraft.util.Identifier; +import java.util.function.Supplier; + public class ExtendSettings extends Item.Settings { // ~1.19.2 + @Deprecated public ExtendSettings addGroup(ItemGroup itemGroup) { super.group(itemGroup); return this; @@ -14,8 +17,14 @@ public ExtendSettings addGroup(ItemGroup itemGroup) { // 1.19.3~ // identifier: Item ID + @Deprecated public ExtendSettings addGroup(ItemGroup itemGroup, Identifier identifier) { //CreativeTabRegistry.append(itemGroup, ItemUtil.fromId(identifier)); return addGroup(itemGroup); } + + public ExtendSettings addGroup(Supplier itemGroup, Identifier identifier) { + addGroup(itemGroup.get()); + return this; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java new file mode 100644 index 000000000..f7663da8e --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java @@ -0,0 +1,33 @@ +package ml.pkom.mcpitanlibarch.api.item.tool; + +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.item.PickaxeItem; + +public class CompatiblePickaxeItem extends PickaxeItem implements ExtendItemProvider { + public CompatiblePickaxeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + + public boolean overrideIsSuitableFor(BlockState state) { + return super.isSuitableFor(state); + } + + @Deprecated + @Override + public boolean isSuitableFor(BlockState state) { + return overrideIsSuitableFor(state); + } + + public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return super.getMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return overrideGetMiningSpeedMultiplier(stack, state); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleToolMaterial.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleToolMaterial.java new file mode 100644 index 000000000..5a5636e9d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleToolMaterial.java @@ -0,0 +1,6 @@ +package ml.pkom.mcpitanlibarch.api.item.tool; + +import net.minecraft.item.ToolMaterial; + +public interface CompatibleToolMaterial extends ToolMaterial { +} diff --git a/info.properties b/info.properties index 6dc2b24a9..a75bdab75 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.6 +mod_version=1.8.7 maven_group=ml.pkom \ No newline at end of file From 8b9d7987fd0509fd4438d98f6e474bc1179aa37f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 5 Feb 2024 19:27:20 +0900 Subject: [PATCH 208/617] fix apis, add apis --- .../java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java index 6a6696369..f7fb2587f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java @@ -1,6 +1,5 @@ package ml.pkom.mcpitanlibarch.api.item; -import dev.architectury.registry.CreativeTabRegistry; import ml.pkom.mcpitanlibarch.api.util.ItemUtil; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; From 64bb01afff6871d5edce8626ebf7bb159bbf18c2 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 5 Feb 2024 20:52:08 +0900 Subject: [PATCH 209/617] add apis --- .../api/command/ConfigCommand.java | 6 ++-- .../api/item/tool/CompatibleAxeItem.java | 34 +++++++++++++++++++ .../api/item/tool/CompatibleHoeItem.java | 34 +++++++++++++++++++ .../api/item/tool/CompatibleShovelItem.java | 34 +++++++++++++++++++ .../api/item/tool/CompatibleSwordItem.java | 34 +++++++++++++++++++ info.properties | 2 +- 6 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java index 0a3193c05..9fd2a0223 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java @@ -15,7 +15,7 @@ public class ConfigCommand extends LiteralCommand { public final Config config; public File file; - public Supplier defaultConfigFunction; + public Supplier defaultConfigFunction; public String prefix = "[MCPitanLib]"; public ConfigCommand(Config config, File file, String prefix) { @@ -24,14 +24,14 @@ public ConfigCommand(Config config, File file, String prefix) { this.prefix = prefix; } - public ConfigCommand(Config config, File file, String prefix, @Nullable Supplier supplier) { + public ConfigCommand(Config config, File file, String prefix, @Nullable Supplier supplier) { this.config = config; this.file = file; this.defaultConfigFunction = supplier; this.prefix = prefix; } - public ConfigCommand(Config config, File file, @Nullable Supplier supplier) { + public ConfigCommand(Config config, File file, @Nullable Supplier supplier) { this.config = config; this.file = file; this.defaultConfigFunction = supplier; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java new file mode 100644 index 000000000..2c7774e9c --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java @@ -0,0 +1,34 @@ +package ml.pkom.mcpitanlibarch.api.item.tool; + +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.minecraft.block.BlockState; +import net.minecraft.item.AxeItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.PickaxeItem; + +public class CompatibleAxeItem extends AxeItem implements ExtendItemProvider { + public CompatibleAxeItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + + public boolean overrideIsSuitableFor(BlockState state) { + return super.isSuitableFor(state); + } + + @Deprecated + @Override + public boolean isSuitableFor(BlockState state) { + return overrideIsSuitableFor(state); + } + + public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return super.getMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return overrideGetMiningSpeedMultiplier(stack, state); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java new file mode 100644 index 000000000..e0b9cc8e5 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java @@ -0,0 +1,34 @@ +package ml.pkom.mcpitanlibarch.api.item.tool; + +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.minecraft.block.BlockState; +import net.minecraft.item.AxeItem; +import net.minecraft.item.HoeItem; +import net.minecraft.item.ItemStack; + +public class CompatibleHoeItem extends HoeItem implements ExtendItemProvider { + public CompatibleHoeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + + public boolean overrideIsSuitableFor(BlockState state) { + return super.isSuitableFor(state); + } + + @Deprecated + @Override + public boolean isSuitableFor(BlockState state) { + return overrideIsSuitableFor(state); + } + + public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return super.getMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return overrideGetMiningSpeedMultiplier(stack, state); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java new file mode 100644 index 000000000..21f148427 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java @@ -0,0 +1,34 @@ +package ml.pkom.mcpitanlibarch.api.item.tool; + +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.minecraft.block.BlockState; +import net.minecraft.item.AxeItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ShovelItem; + +public class CompatibleShovelItem extends ShovelItem implements ExtendItemProvider { + public CompatibleShovelItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + + public boolean overrideIsSuitableFor(BlockState state) { + return super.isSuitableFor(state); + } + + @Deprecated + @Override + public boolean isSuitableFor(BlockState state) { + return overrideIsSuitableFor(state); + } + + public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return super.getMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return overrideGetMiningSpeedMultiplier(stack, state); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java new file mode 100644 index 000000000..caea5ed36 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java @@ -0,0 +1,34 @@ +package ml.pkom.mcpitanlibarch.api.item.tool; + +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.minecraft.block.BlockState; +import net.minecraft.item.AxeItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; + +public class CompatibleSwordItem extends SwordItem implements ExtendItemProvider { + public CompatibleSwordItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + + public boolean overrideIsSuitableFor(BlockState state) { + return super.isSuitableFor(state); + } + + @Deprecated + @Override + public boolean isSuitableFor(BlockState state) { + return overrideIsSuitableFor(state); + } + + public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return super.getMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return overrideGetMiningSpeedMultiplier(stack, state); + } +} diff --git a/info.properties b/info.properties index a75bdab75..f67c576c2 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.7 +mod_version=1.8.8 maven_group=ml.pkom \ No newline at end of file From 0b53e057e45f1e786e012eab080b6d9ef424c441 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 7 Feb 2024 22:09:10 +0900 Subject: [PATCH 210/617] add apis --- .../api/command/ConfigCommand.java | 112 +++++++++++------- info.properties | 2 +- 2 files changed, 68 insertions(+), 46 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java index 9fd2a0223..c4161b31c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java @@ -50,73 +50,95 @@ public ConfigCommand(Config config) { public void init(CommandSettings settings) { settings.permissionLevel(3); - addArgumentCommand("set", new StringCommand() { + addArgumentCommand("set", new LiteralCommand() { @Override - public String getArgumentName() { - return "key"; + public void init(CommandSettings settings) { + + addArgumentCommand("key", new StringCommand() { + @Override + public String getArgumentName() { + return "key"; + } + + + @Override + public void init(CommandSettings settings) { + + addArgumentCommand("value", new StringCommand() { + @Override + public String getArgumentName() { + return "value"; + } + + @Override + public void execute(StringCommandEvent event) { + String key = StringArgumentType.getString(event.context, "key"); + String value = StringArgumentType.getString(event.context, "value"); + if (config.get(key) == null) { + event.sendFailure(TextUtil.literal(prefix + " Key not found.")); + return; + } + if (config.get(key).getClass() == String.class) { + config.setString(key, value); + event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); + + } else if (config.get(key).getClass() == Integer.class) { + config.setInt(key, Integer.parseInt(value)); + event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); + + } else if (config.get(key).getClass() == Double.class) { + config.setDouble(key, Double.parseDouble(value)); + event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); + + } else if (config.get(key).getClass() == Boolean.class) { + config.setBoolean(key, Boolean.parseBoolean(value)); + event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); + + } else { + event.sendFailure(TextUtil.literal(prefix + " Not supported type.")); + } + if (file != null) + config.save(file); + } + }); + } + + @Override + public void execute(StringCommandEvent event) { + } + }); } @Override - public void init(CommandSettings settings) { + public void execute(ServerCommandEvent event) { + + } + }); - addArgumentCommand("value", new StringCommand() { + addArgumentCommand("get", new LiteralCommand() { + @Override + public void init(CommandSettings settings) { + addArgumentCommand("key", new StringCommand() { @Override public String getArgumentName() { - return "value"; + return "key"; } @Override public void execute(StringCommandEvent event) { String key = StringArgumentType.getString(event.context, "key"); - String value = StringArgumentType.getString(event.context, "value"); if (config.get(key) == null) { event.sendFailure(TextUtil.literal(prefix + " Key not found.")); return; } - if (config.get(key).getClass() == String.class) { - config.setString(key, value); - event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); - - } else if (config.get(key).getClass() == Integer.class) { - config.setInt(key, Integer.parseInt(value)); - event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); - - } else if (config.get(key).getClass() == Double.class) { - config.setDouble(key, Double.parseDouble(value)); - event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); - - } else if (config.get(key).getClass() == Boolean.class) { - config.setBoolean(key, Boolean.parseBoolean(value)); - event.sendSuccess(TextUtil.literal(prefix + " Set " + key + " to " + value), false); - - } else { - event.sendFailure(TextUtil.literal(prefix + " Not supported type.")); - } - if (file != null) - config.save(file); + event.sendSuccess(TextUtil.literal(prefix + " " + key + ": " + config.get(key).toString()), false); } }); } @Override - public void execute(StringCommandEvent event) { - } - }); - - addArgumentCommand("get", new StringCommand() { - @Override - public String getArgumentName() { - return "key"; - } + public void execute(ServerCommandEvent event) { - @Override - public void execute(StringCommandEvent event) { - String key = StringArgumentType.getString(event.context, "key"); - if (config.get(key) == null) { - event.sendFailure(TextUtil.literal(prefix + " Key not found.")); - return; - } - event.sendSuccess(TextUtil.literal(prefix + " " + key + ": " + config.get(key).toString()), false); } }); diff --git a/info.properties b/info.properties index f67c576c2..b6e970562 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.8 +mod_version=1.8.9 maven_group=ml.pkom \ No newline at end of file From ab5fe026ce3802c56e9ae482910b06bce39d9b0b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 8 Feb 2024 17:18:47 +0900 Subject: [PATCH 211/617] add APIs --- .../mcpitanlibarch/api/block/ExtendBlock.java | 40 +++++++++++++-- .../api/event/block/BlockBreakEvent.java | 46 +++++++++++++++++ .../api/event/block/BlockPlacedEvent.java | 49 +++++++++++++++++++ .../api/event/block/BlockUseEvent.java | 4 ++ .../api/event/block/PickStackEvent.java | 44 +++++++++++++++++ .../api/event/item/CraftEvent.java | 27 ++++++++++ .../api/event/item/ItemFinishUsingEvent.java | 4 ++ .../api/event/item/ItemUseEvent.java | 5 +- .../api/event/item/ItemUseOnEntityEvent.java | 4 ++ .../mcpitanlibarch/api/item/ExtendItem.java | 10 ++++ .../api/item/tool/CompatibleAxeItem.java | 5 ++ .../api/item/tool/CompatibleHoeItem.java | 5 ++ .../api/item/tool/CompatiblePickaxeItem.java | 5 ++ .../api/item/tool/CompatibleShovelItem.java | 6 ++- .../api/item/tool/CompatibleSwordItem.java | 5 ++ .../mcpitanlibarch/api/util/WorldUtil.java | 12 +++++ .../api/util/client/ScreenUtil.java | 8 +++ 17 files changed, 272 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockBreakEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockPlacedEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/CraftEvent.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index 5346b5f7d..3c96e86ac 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -1,14 +1,13 @@ package ml.pkom.mcpitanlibarch.api.block; -import ml.pkom.mcpitanlibarch.api.event.block.BlockScheduledTickEvent; -import ml.pkom.mcpitanlibarch.api.event.block.BlockUseEvent; -import ml.pkom.mcpitanlibarch.api.event.block.OutlineShapeEvent; -import ml.pkom.mcpitanlibarch.api.event.block.ScreenHandlerCreateEvent; +import ml.pkom.mcpitanlibarch.api.event.block.*; import ml.pkom.mcpitanlibarch.api.util.TextUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; @@ -24,7 +23,8 @@ import java.util.Random; -import javax.annotation.Nullable; +import net.minecraft.world.WorldView; +import org.jetbrains.annotations.Nullable; public class ExtendBlock extends Block { public ExtendBlock(Settings settings) { @@ -87,4 +87,34 @@ public ScreenHandler createScreenHandler(ScreenHandlerCreateEvent event) { public Text getScreenTitle() { return TextUtil.literal(""); } + + @Override + @Deprecated + public void onPlaced(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack itemStack) { + onPlaced(new BlockPlacedEvent(world, pos, state, placer, itemStack)); + } + + public void onPlaced(BlockPlacedEvent event) { + super.onPlaced(event.world, event.pos, event.state, event.placer, event.stack); + } + + @Override + @Deprecated + public BlockState onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) { + return onBreak(new BlockBreakEvent(world, pos, state, player)); + } + + public BlockState onBreak(BlockBreakEvent event) { + return super.onBreak(event.world, event.pos, event.state, event.getPlayerEntity()); + } + + @Override + @Deprecated + public ItemStack getPickStack(WorldView world, BlockPos pos, BlockState state) { + return getPickStack(new PickStackEvent(world, pos, state)); + } + + public ItemStack getPickStack(PickStackEvent event) { + return super.getPickStack(event.worldView, event.pos, event.state); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockBreakEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockBreakEvent.java new file mode 100644 index 000000000..1be1588d5 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockBreakEvent.java @@ -0,0 +1,46 @@ +package ml.pkom.mcpitanlibarch.api.event.block; + +import ml.pkom.mcpitanlibarch.api.entity.Player; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockBreakEvent extends BaseEvent { + public World world; + public BlockPos pos; + public BlockState state; + public Player player; + + public BlockBreakEvent(World world, BlockPos pos, BlockState state, PlayerEntity player) { + this.world = world; + this.pos = pos; + this.state = state; + this.player = new Player(player); + } + + public BlockPos getPos() { + return pos; + } + + public BlockState getState() { + return state; + } + + public Player getPlayer() { + return player; + } + + public PlayerEntity getPlayerEntity() { + return player.getPlayerEntity(); + } + + public World getWorld() { + return world; + } + + public boolean isClient() { + return world.isClient(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockPlacedEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockPlacedEvent.java new file mode 100644 index 000000000..e69aba827 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockPlacedEvent.java @@ -0,0 +1,49 @@ +package ml.pkom.mcpitanlibarch.api.event.block; + +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockPlacedEvent extends BaseEvent { + + public World world; + public BlockPos pos; + public BlockState state; + public LivingEntity placer; + public ItemStack stack; + + public BlockPlacedEvent(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) { + this.world = world; + this.pos = pos; + this.state = state; + this.placer = placer; + this.stack = itemStack; + } + + public BlockState getState() { + return state; + } + + public BlockPos getPos() { + return pos; + } + + public World getWorld() { + return world; + } + + public ItemStack getStack() { + return stack; + } + + public LivingEntity getPlacer() { + return placer; + } + + public boolean isClient() { + return world.isClient(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java index 59f3bb3a2..0e8a63f39 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java @@ -56,4 +56,8 @@ public BlockState getState() { public BlockPos getPos() { return pos; } + + public boolean isClient() { + return world.isClient(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java new file mode 100644 index 000000000..7b569071c --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java @@ -0,0 +1,44 @@ +package ml.pkom.mcpitanlibarch.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; +import net.minecraft.world.WorldView; +import org.jetbrains.annotations.Nullable; + +public class PickStackEvent { + + @Deprecated + public WorldView worldView; + + @Deprecated + public BlockView blockView; + + public BlockPos pos; + public BlockState state; + + + public PickStackEvent(WorldView world, BlockPos pos, BlockState state) { + } + + public PickStackEvent(BlockView world, BlockPos pos, BlockState state) { + } + + public BlockState getState() { + return state; + } + + public BlockPos getPos() { + return pos; + } + + @Nullable + public BlockView getBlockView() { + return blockView; + } + + @Nullable + public WorldView getWorldView() { + return worldView; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/CraftEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/CraftEvent.java new file mode 100644 index 000000000..eb9a25cb1 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/CraftEvent.java @@ -0,0 +1,27 @@ +package ml.pkom.mcpitanlibarch.api.event.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class CraftEvent { + + public ItemStack stack; + public World world; + + public CraftEvent(ItemStack stack, World world) { + this.stack = stack; + this.world = world; + } + + public ItemStack getStack() { + return stack; + } + + public World getWorld() { + return world; + } + + public boolean isClient() { + return world.isClient(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java index a0dc5c5ac..6e68eaa8a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java @@ -27,4 +27,8 @@ public World getWorld() { public LivingEntity getUser() { return user; } + + public boolean isClient() { + return world.isClient(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java index 7174881f9..abcd3998d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java @@ -32,8 +32,11 @@ public Hand getHand() { public World getWorld() { return world; } - public Player getUser() { return user; } + + public boolean isClient() { + return world.isClient(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java index d27ca6563..9a100811f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java @@ -36,4 +36,8 @@ public Player getUser() { public LivingEntity getEntity() { return entity; } + + public boolean isClient() { + return user.isClient(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java index a95f4216d..3bad0c7b1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java @@ -98,4 +98,14 @@ public boolean hasRecipeRemainder(Dummy dummy) { public void appendTooltip(ItemAppendTooltipEvent event) { super.appendTooltip(event.stack, event.world, event.tooltip, event.context); } + + @Deprecated + @Override + public void onCraft(ItemStack stack, World world) { + onCraft(new CraftEvent(stack, world)); + } + + public void onCraft(CraftEvent event) { + super.onCraft(event.stack, event.world); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java index 2c7774e9c..170fa5718 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java @@ -6,12 +6,17 @@ import net.minecraft.item.AxeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.PickaxeItem; +import net.minecraft.item.ToolMaterial; public class CompatibleAxeItem extends AxeItem implements ExtendItemProvider { public CompatibleAxeItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } + public CompatibleAxeItem(ToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + public boolean overrideIsSuitableFor(BlockState state) { return super.isSuitableFor(state); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java index e0b9cc8e5..70961ea65 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java @@ -6,12 +6,17 @@ import net.minecraft.item.AxeItem; import net.minecraft.item.HoeItem; import net.minecraft.item.ItemStack; +import net.minecraft.item.ToolMaterial; public class CompatibleHoeItem extends HoeItem implements ExtendItemProvider { public CompatibleHoeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } + public CompatibleHoeItem(ToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + public boolean overrideIsSuitableFor(BlockState state) { return super.isSuitableFor(state); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java index f7663da8e..b8e0ce54c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java @@ -5,12 +5,17 @@ import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.PickaxeItem; +import net.minecraft.item.ToolMaterial; public class CompatiblePickaxeItem extends PickaxeItem implements ExtendItemProvider { public CompatiblePickaxeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } + public CompatiblePickaxeItem(ToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + public boolean overrideIsSuitableFor(BlockState state) { return super.isSuitableFor(state); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java index 21f148427..60adc5050 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java @@ -3,15 +3,19 @@ import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; -import net.minecraft.item.AxeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.ShovelItem; +import net.minecraft.item.ToolMaterial; public class CompatibleShovelItem extends ShovelItem implements ExtendItemProvider { public CompatibleShovelItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } + public CompatibleShovelItem(ToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + public boolean overrideIsSuitableFor(BlockState state) { return super.isSuitableFor(state); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java index caea5ed36..2dd96c05d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java @@ -6,12 +6,17 @@ import net.minecraft.item.AxeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; public class CompatibleSwordItem extends SwordItem implements ExtendItemProvider { public CompatibleSwordItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } + public CompatibleSwordItem(ToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + super(material, attackDamage, attackSpeed, settings.build()); + } + public boolean overrideIsSuitableFor(BlockState state) { return super.isSuitableFor(state); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index 01ada101d..5f905e407 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -131,4 +131,16 @@ public static void addTicket(ServerWorld world, ChunkTicketType type, Chu public static void removeTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius, T argument) { world.getChunkManager().removeTicket(type, pos, radius, argument); } + + public static boolean isReceivingRedstonePower(World world, BlockPos pos) { + return world.isReceivingRedstonePower(pos); + } + + public static int getBottomY(World world) { + return world.getBottomY(); + } + + public static int getTopY(World world) { + return world.getTopY(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java index d21e1182e..665281749 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java @@ -130,5 +130,13 @@ public static void drawTexture(DrawObjectDM drawObjectDM, Identifier texture, in RenderUtil.setShaderTexture(0, texture); DrawableHelper.drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height, 256, 256); } + + public static TextRenderer getTextRenderer() { + return MinecraftClient.getInstance().textRenderer; + } + } + + public static int getWidth(Text text) { + return RendererUtil.getTextRenderer().getWidth(text); } } From 07f18c0fa4a0e7160a12b0e964f156a7be4ebed7 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 8 Feb 2024 17:25:25 +0900 Subject: [PATCH 212/617] 1202 --- .../ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java | 11 ++++++----- .../ml/pkom/mcpitanlibarch/api/item/ExtendItem.java | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index 3c96e86ac..dac16617f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -100,21 +100,22 @@ public void onPlaced(BlockPlacedEvent event) { @Override @Deprecated - public BlockState onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) { - return onBreak(new BlockBreakEvent(world, pos, state, player)); + public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) { + onBreak(new BlockBreakEvent(world, pos, state, player)); } public BlockState onBreak(BlockBreakEvent event) { - return super.onBreak(event.world, event.pos, event.state, event.getPlayerEntity()); + super.onBreak(event.world, event.pos, event.state, event.getPlayerEntity()); + return event.state; } @Override @Deprecated - public ItemStack getPickStack(WorldView world, BlockPos pos, BlockState state) { + public ItemStack getPickStack(BlockView world, BlockPos pos, BlockState state) { return getPickStack(new PickStackEvent(world, pos, state)); } public ItemStack getPickStack(PickStackEvent event) { - return super.getPickStack(event.worldView, event.pos, event.state); + return super.getPickStack(event.blockView, event.pos, event.state); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java index 3bad0c7b1..572d479af 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java @@ -101,11 +101,11 @@ public void appendTooltip(ItemAppendTooltipEvent event) { @Deprecated @Override - public void onCraft(ItemStack stack, World world) { + public void onCraft(ItemStack stack, World world, PlayerEntity player) { onCraft(new CraftEvent(stack, world)); } public void onCraft(CraftEvent event) { - super.onCraft(event.stack, event.world); + super.onCraft(event.stack, event.world, null); } } From ae82aca758cb93e5f1f1596422eac1cd90261dba Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 8 Feb 2024 23:38:11 +0900 Subject: [PATCH 213/617] add APIs, fix APIs --- .../mcpitanlibarch/api/block/ExtendBlock.java | 12 +++++- .../api/event/block/StateReplacedEvent.java | 43 +++++++++++++++++++ .../api/item/tool/CompatibleAxeItem.java | 2 +- .../api/item/tool/CompatibleHoeItem.java | 2 +- .../api/item/tool/CompatiblePickaxeItem.java | 2 +- .../api/item/tool/CompatibleShovelItem.java | 2 +- .../api/item/tool/CompatibleSwordItem.java | 2 +- .../mcpitanlibarch/api/util/WorldUtil.java | 4 ++ .../api/util/event/BlockEventGenerator.java | 20 +++++++++ .../api/util/event/ItemEventGenerator.java | 12 ++++++ info.properties | 2 +- 11 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/BlockEventGenerator.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/ItemEventGenerator.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index dac16617f..68db82aad 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -42,7 +42,7 @@ public VoxelShape getOutlineShape(OutlineShapeEvent event) { @Deprecated @Override public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { - return super.getOutlineShape(state, world, pos, context); + return getOutlineShape(new OutlineShapeEvent(state, world, pos, context)); } public void scheduledTick(BlockScheduledTickEvent event) { @@ -118,4 +118,14 @@ public ItemStack getPickStack(BlockView world, BlockPos pos, BlockState state) { public ItemStack getPickStack(PickStackEvent event) { return super.getPickStack(event.blockView, event.pos, event.state); } + + @Override + @Deprecated + public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) { + onStateReplaced(new StateReplacedEvent(state, world, pos, newState, moved)); + } + + public void onStateReplaced(StateReplacedEvent event) { + super.onStateReplaced(event.state, event.world, event.pos, event.newState, event.moved); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java new file mode 100644 index 000000000..16fc2c6e3 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java @@ -0,0 +1,43 @@ +package ml.pkom.mcpitanlibarch.api.event.block; + +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class StateReplacedEvent extends BaseEvent { + + public BlockState state; + public World world; + public BlockPos pos; + public BlockState newState; + public boolean moved; + + public StateReplacedEvent(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) { + super(); + } + + public BlockState getState() { + return state; + } + + public World getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public BlockState getNewState() { + return newState; + } + + public boolean isMoved() { + return moved; + } + + public boolean isClient() { + return world.isClient(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java index 170fa5718..dbb4a43e5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java @@ -13,7 +13,7 @@ public CompatibleAxeItem(CompatibleToolMaterial material, float attackDamage, fl super(material, attackDamage, attackSpeed, settings.build()); } - public CompatibleAxeItem(ToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { + public CompatibleAxeItem(float attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java index 70961ea65..45758e496 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java @@ -13,7 +13,7 @@ public CompatibleHoeItem(CompatibleToolMaterial material, int attackDamage, floa super(material, attackDamage, attackSpeed, settings.build()); } - public CompatibleHoeItem(ToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + public CompatibleHoeItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java index b8e0ce54c..0aa7f3863 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java @@ -12,7 +12,7 @@ public CompatiblePickaxeItem(CompatibleToolMaterial material, int attackDamage, super(material, attackDamage, attackSpeed, settings.build()); } - public CompatiblePickaxeItem(ToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + public CompatiblePickaxeItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java index 60adc5050..b466617cb 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java @@ -12,7 +12,7 @@ public CompatibleShovelItem(CompatibleToolMaterial material, float attackDamage, super(material, attackDamage, attackSpeed, settings.build()); } - public CompatibleShovelItem(ToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { + public CompatibleShovelItem(float attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java index 2dd96c05d..de76d31e9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java @@ -13,7 +13,7 @@ public CompatibleSwordItem(CompatibleToolMaterial material, int attackDamage, fl super(material, attackDamage, attackSpeed, settings.build()); } - public CompatibleSwordItem(ToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { + public CompatibleSwordItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index 5f905e407..e948c27b5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -143,4 +143,8 @@ public static int getBottomY(World world) { public static int getTopY(World world) { return world.getTopY(); } + + public static int getDimensionHeight(World world) { + return world.getDimension().height(); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/BlockEventGenerator.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/BlockEventGenerator.java new file mode 100644 index 000000000..d7429378a --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/BlockEventGenerator.java @@ -0,0 +1,20 @@ +package ml.pkom.mcpitanlibarch.api.util.event; + +import ml.pkom.mcpitanlibarch.api.event.block.BlockBreakEvent; +import ml.pkom.mcpitanlibarch.api.event.block.BlockPlacedEvent; +import ml.pkom.mcpitanlibarch.api.event.block.StateReplacedEvent; +import net.minecraft.block.Block; + +public class BlockEventGenerator { + public static void onPlaced(Block block, BlockPlacedEvent e) { + block.onPlaced(e.world, e.pos, e.state, e.placer, e.stack); + } + + public static void onBreak(Block block, BlockBreakEvent e) { + block.onBreak(e.world, e.pos, e.state, e.getPlayerEntity()); + } + + public static void onStateReplaced(Block block, StateReplacedEvent e) { + block.onStateReplaced(e.state, e.world, e.pos, e.newState, e.moved); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/ItemEventGenerator.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/ItemEventGenerator.java new file mode 100644 index 000000000..4bc9991a2 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/ItemEventGenerator.java @@ -0,0 +1,12 @@ +package ml.pkom.mcpitanlibarch.api.util.event; + +import ml.pkom.mcpitanlibarch.api.event.item.ItemUseEvent; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.TypedActionResult; + +public class ItemEventGenerator { + public static TypedActionResult onRightClick(Item item, ItemUseEvent e) { + return item.use(e.world, e.user.getPlayerEntity(), e.hand); + } +} diff --git a/info.properties b/info.properties index b6e970562..93489e298 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.8.9 +mod_version=1.9.0 maven_group=ml.pkom \ No newline at end of file From dbec5897187e834f677d6b67540b01034ea20748 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 8 Feb 2024 23:47:55 +0900 Subject: [PATCH 214/617] 1182 --- .../main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java index e948c27b5..e65cd32b3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java @@ -145,6 +145,6 @@ public static int getTopY(World world) { } public static int getDimensionHeight(World world) { - return world.getDimension().height(); + return world.getDimension().getHeight(); } } From 6b420a72875057823ca25885566771fcf490d7d8 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 9 Feb 2024 10:58:23 +0900 Subject: [PATCH 215/617] fix APIs add Debug mode --- .../java/ml/pkom/easyapi/config/Config.java | 85 +++++++++++++++++++ .../pkom/mcpitanlibarch/MCPitanLibarch.java | 38 +++++++-- .../mcpitanlibarch/api/block/ExtendBlock.java | 5 +- .../api/event/block/StateReplacedEvent.java | 6 +- .../event/block/result/BlockBreakResult.java | 15 ++++ .../pkom/mcpitanlibarch/debug/DebugTool.java | 27 ++++++ info.properties | 2 +- 7 files changed, 169 insertions(+), 9 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/result/BlockBreakResult.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/debug/DebugTool.java diff --git a/common/src/main/java/ml/pkom/easyapi/config/Config.java b/common/src/main/java/ml/pkom/easyapi/config/Config.java index 3d80d0693..108f5a536 100644 --- a/common/src/main/java/ml/pkom/easyapi/config/Config.java +++ b/common/src/main/java/ml/pkom/easyapi/config/Config.java @@ -128,6 +128,80 @@ public boolean getBoolean(String key) { } } + /** + * マップのキーから値を取得、存在しない場合はデフォルト値を返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public Object getOrDefault(String key, Object defaultValue) { + if (has(key)) { + return get(key); + } + return defaultValue; + } + + /** + * マップのキーから値(文字列)を取得、存在しない場合はデフォルト値を返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public String getStringOrDefault(String key, String defaultValue) { + if (has(key)) { + return getString(key); + } + return defaultValue; + } + + /** + * マップのキーから値(数値)を取得、存在しない場合はデフォルト値を返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public int getIntOrDefault(String key, int defaultValue) { + if (has(key)) { + return getInt(key); + } + return defaultValue; + } + + /** + * マップのキーから値(数値)を取得、存在しない場合はデフォルト値を返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public double getDoubleOrDefault(String key, double defaultValue) { + if (has(key)) { + return getDouble(key); + } + return defaultValue; + } + /** + * マップのキーから値(真偽値)を取得、存在しない場合はデフォルト値を返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public boolean getBooleanOrDefault(String key, boolean defaultValue) { + if (has(key)) { + return getBoolean(key); + } + return defaultValue; + } + /** * マップのキーに値をセット * "."でパスを区切る @@ -219,6 +293,17 @@ public boolean setBoolean(String key, boolean value) { return set(key, value); } + /** + * マップのキーから値を削除 + * "."でパスを区切る + * + * @param key キー + * @return 真偽値 + */ + public boolean remove(String key) { + return configMap.remove(key) != null; + } + /** * StringをFileにして読み込み、継承先で処理 * diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java index df8f887e4..08d57371a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java @@ -2,7 +2,10 @@ import ml.pkom.easyapi.config.Config; import ml.pkom.easyapi.config.JsonConfig; +import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; +import ml.pkom.mcpitanlibarch.debug.DebugTool; +import net.minecraft.util.Identifier; import java.io.File; import java.util.ArrayList; @@ -20,15 +23,28 @@ public class MCPitanLibarch { public static List itemBlackList = new ArrayList<>(); public static List blockBlackList = new ArrayList<>(); + // MCPitanLibのアイテム、ブロック、タイルエンティティの登録 + public static ArchRegistry registry = ArchRegistry.createRegistry(MOD_ID); + + /** + * MCPitanLibの初期化 + */ public static void init() { configInit(); - /* - if (PlatformUtil.isDevelopmentEnvironment()) { + + if (PlatformUtil.isDevelopmentEnvironment() || (config.has("debugMode") && config.getBoolean("debugMode"))) { + System.out.println("MCPitanLib: Debug Mode"); + DebugTool.register(); + registry.allRegister(); + /* ExampleMod.init(); + */ } - */ } + /** + * Configの初期化 + */ public static void configInit() { try { if (configLoaded) return; @@ -39,14 +55,18 @@ public static void configInit() { config.setString("item", "examplemod:hogehoge_item,examplemod:fuga_item"); config.setString("block", "examplemod:hogehoge_block,examplemod:fuga_block"); + config.setBoolean("debugMode", false); if (configFile.exists()) config.load(configFile); - if (config.configMap.containsKey("item")) + if (!config.has("debugMode")) + config.setBoolean("debugMode", false); + + if (config.has("item")) itemBlackList.addAll(Arrays.asList(config.getString("item").split(","))); - if (config.configMap.containsKey("block")) + if (config.has("block")) blockBlackList.addAll(Arrays.asList(config.getString("block").split(","))); config.save(configFile); @@ -55,4 +75,12 @@ public static void configInit() { } } + /** + * Identifierを生成 + * @param path パス + * @return Identifier + */ + public static Identifier id(String path) { + return new Identifier(MOD_ID, path); + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index 68db82aad..19a74be58 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -1,6 +1,7 @@ package ml.pkom.mcpitanlibarch.api.block; import ml.pkom.mcpitanlibarch.api.event.block.*; +import ml.pkom.mcpitanlibarch.api.event.block.result.BlockBreakResult; import ml.pkom.mcpitanlibarch.api.util.TextUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -104,9 +105,9 @@ public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity pl onBreak(new BlockBreakEvent(world, pos, state, player)); } - public BlockState onBreak(BlockBreakEvent event) { + public BlockBreakResult onBreak(BlockBreakEvent event) { super.onBreak(event.world, event.pos, event.state, event.getPlayerEntity()); - return event.state; + return new BlockBreakResult(event.state); } @Override diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java index 16fc2c6e3..77a0d2efc 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java @@ -14,7 +14,11 @@ public class StateReplacedEvent extends BaseEvent { public boolean moved; public StateReplacedEvent(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) { - super(); + this.state = state; + this.world = world; + this.pos = pos; + this.newState = newState; + this.moved = moved; } public BlockState getState() { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/result/BlockBreakResult.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/result/BlockBreakResult.java new file mode 100644 index 000000000..35c8ab0cb --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/result/BlockBreakResult.java @@ -0,0 +1,15 @@ +package ml.pkom.mcpitanlibarch.api.event.block.result; + +import net.minecraft.block.BlockState; + +public class BlockBreakResult { + public BlockState state; + + public BlockBreakResult(BlockState state) { + this.state = state; + } + + public BlockState getState() { + return state; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/debug/DebugTool.java b/common/src/main/java/ml/pkom/mcpitanlibarch/debug/DebugTool.java new file mode 100644 index 000000000..3c32c402d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/debug/DebugTool.java @@ -0,0 +1,27 @@ +package ml.pkom.mcpitanlibarch.debug; + +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.item.ExtendItem; + +import static ml.pkom.mcpitanlibarch.MCPitanLibarch.*; + +/** + * A tool for debugging. + * Example of condition: item instance DebugTool + */ +public class DebugTool extends ExtendItem { + + public static CompatibleItemSettings defaultSettings = CompatibleItemSettings.of(); + + public DebugTool() { + super(defaultSettings); + } + + public static void debug(String message) { + System.out.println(message); + } + + public static void register() { + registry.registerItem(id("debug_tool"), DebugTool::new); + } +} diff --git a/info.properties b/info.properties index 93489e298..519038be4 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.9.0 +mod_version=1.9.1 maven_group=ml.pkom \ No newline at end of file From f4b2c3ef0c4f331074ad4ce50980c2c77d4fe3ee Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:46:46 +0900 Subject: [PATCH 216/617] Add APIs --- .../mcpitanlibarch/api/util/math/BoxUtil.java | 38 +++++++++++++++++++ info.properties | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java new file mode 100644 index 000000000..aa85c9ee7 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java @@ -0,0 +1,38 @@ +package ml.pkom.mcpitanlibarch.api.util.math; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; + +public class BoxUtil { + public static Box createBox(double x1, double y1, double z1, double x2, double y2, double z2) { + return new Box(x1, y1, z1, x2, y2, z2); + } + + public static Box createBox(double x, double y, double z, double size) { + return new Box(x, y, z, x + size, y + size, z + size); + } + + public static Box createBox(double size) { + return new Box(0, 0, 0, size, size, size); + } + + public static Box createBox(double x1, double y1, double z1, double x2, double y2, double z2, double size) { + return new Box(x1, y1, z1, x2 + size, y2 + size, z2 + size); + } + + public static Box createBox(BlockPos pos) { + return new Box(pos); + } + + public static Box createBox(BlockPos pos1, BlockPos pos2) { + return new Box(pos1.toCenterPos(), pos2.toCenterPos()); + } + + public static Box createBox(BlockPos pos, int size) { + return createBox(pos, pos.add(size, size, size)); + } + + public static Box createBox(BlockPos pos, int sizeX, int sizeY, int sizeZ) { + return createBox(pos, pos.add(sizeX, sizeY, sizeZ)); + } +} diff --git a/info.properties b/info.properties index 519038be4..049fba26a 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.9.1 +mod_version=1.9.2 maven_group=ml.pkom \ No newline at end of file From c4b26ed537f4aa0524be2f8daa1701332d2c68e4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:53:30 +0900 Subject: [PATCH 217/617] 1182 --- .../main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java index aa85c9ee7..bf02fc644 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java @@ -25,7 +25,7 @@ public static Box createBox(BlockPos pos) { } public static Box createBox(BlockPos pos1, BlockPos pos2) { - return new Box(pos1.toCenterPos(), pos2.toCenterPos()); + return new Box(pos1, pos2); } public static Box createBox(BlockPos pos, int size) { From e01dd53dd66e27ed8576e9067e7410ac683518b0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 12 Feb 2024 23:05:53 +0900 Subject: [PATCH 218/617] v1.9.3 add APIs, fix APIs embed cloth config api --- .../pkom/mcpitanlibarch/MCPitanLibarch.java | 16 +++++ .../api/event/block/BlockUseEvent.java | 17 +++++ .../api/event/item/ItemUseEvent.java | 17 +++++ .../api/event/item/ItemUseOnBlockEvent.java | 17 +++++ .../api/event/item/ItemUseOnEntityEvent.java | 17 +++++ .../api/event/registry/RegistryEvent.java | 18 +----- .../api/event/registry/RegistryResult.java | 22 +++++++ .../api/event/v0/RecipeManagerRegistry.java | 19 ++++++ .../event/v0/event/RecipeManagerEvent.java | 49 +++++++++++++++ .../api/recipe/CompatibleRecipeEntry.java | 63 +++++++++++++++++++ .../api/registry/ArchRegistry.java | 50 +++++++-------- .../api/util/CompatibleRecipeEntryUtil.java | 13 ++++ .../mixin/RecipeManagerMixin.java | 30 +++++++++ .../pkom/mcpitanlibarch/test/ExampleMod.java | 17 ++--- .../mcpitanlibarch-common.mixins.json | 1 + fabric/build.gradle | 5 ++ gradle.properties | 2 + info.properties | 2 +- 18 files changed, 325 insertions(+), 50 deletions(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryResult.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/RecipeManagerRegistry.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/CompatibleRecipeEntryUtil.java create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java index 08d57371a..33619ca63 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java @@ -83,4 +83,20 @@ public static void configInit() { public static Identifier id(String path) { return new Identifier(MOD_ID, path); } + + public static boolean isItemBlackListed(Identifier id) { + try { + return itemBlackList.contains(id.toString()); + } catch (Exception e) { + return false; + } + } + + public static boolean isBlockBlackListed(Identifier id) { + try { + return blockBlackList.contains(id.toString()); + } catch (Exception e) { + return false; + } + } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java index 0e8a63f39..97efd637a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java @@ -5,6 +5,7 @@ import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -60,4 +61,20 @@ public BlockPos getPos() { public boolean isClient() { return world.isClient(); } + + public ActionResult success() { + return ActionResult.SUCCESS; + } + + public ActionResult fail() { + return ActionResult.FAIL; + } + + public ActionResult pass() { + return ActionResult.PASS; + } + + public ActionResult consume() { + return ActionResult.CONSUME; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java index abcd3998d..30a675cd2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java @@ -5,6 +5,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; public class ItemUseEvent extends BaseEvent { @@ -39,4 +40,20 @@ public Player getUser() { public boolean isClient() { return world.isClient(); } + + public TypedActionResult success(ItemStack stack) { + return TypedActionResult.success(stack); + } + + public TypedActionResult fail() { + return TypedActionResult.fail(stack); + } + + public TypedActionResult pass() { + return TypedActionResult.pass(stack); + } + + public TypedActionResult consume() { + return TypedActionResult.consume(stack); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java index 1aedf1b7b..a880b3143 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java @@ -5,6 +5,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; +import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -65,4 +66,20 @@ public Hand getHand() { public ItemStack getStack() { return stack; } + + public ActionResult success() { + return ActionResult.SUCCESS; + } + + public ActionResult fail() { + return ActionResult.FAIL; + } + + public ActionResult pass() { + return ActionResult.PASS; + } + + public ActionResult consume() { + return ActionResult.CONSUME; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java index 9a100811f..e825bce27 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java @@ -5,6 +5,7 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; public class ItemUseOnEntityEvent extends BaseEvent { @@ -40,4 +41,20 @@ public LivingEntity getEntity() { public boolean isClient() { return user.isClient(); } + + public ActionResult success() { + return ActionResult.SUCCESS; + } + + public ActionResult fail() { + return ActionResult.FAIL; + } + + public ActionResult pass() { + return ActionResult.PASS; + } + + public ActionResult consume() { + return ActionResult.CONSUME; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java index 2a6c3628b..6556ba25d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java @@ -1,23 +1,9 @@ package ml.pkom.mcpitanlibarch.api.event.registry; import dev.architectury.registry.registries.RegistrySupplier; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; - -import javax.annotation.Nullable; - -public class RegistryEvent extends BaseEvent { - public RegistrySupplier supplier; +public class RegistryEvent extends RegistryResult { public RegistryEvent(RegistrySupplier supplier) { - this.supplier = supplier; - } - - public T get() { - return supplier.get(); - } - - @Nullable - public T getOrNull() { - return supplier.getOrNull(); + super(supplier); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryResult.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryResult.java new file mode 100644 index 000000000..524982dad --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryResult.java @@ -0,0 +1,22 @@ +package ml.pkom.mcpitanlibarch.api.event.registry; + +import dev.architectury.registry.registries.RegistrySupplier; +import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import org.jetbrains.annotations.Nullable; + +public class RegistryResult extends BaseEvent { + public RegistrySupplier supplier; + + public RegistryResult(RegistrySupplier supplier) { + this.supplier = supplier; + } + + public T get() { + return supplier.get(); + } + + @Nullable + public T getOrNull() { + return supplier.getOrNull(); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/RecipeManagerRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/RecipeManagerRegistry.java new file mode 100644 index 000000000..b17acc889 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/RecipeManagerRegistry.java @@ -0,0 +1,19 @@ +package ml.pkom.mcpitanlibarch.api.event.v0; + +import ml.pkom.mcpitanlibarch.api.event.v0.event.RecipeManagerEvent; + +import java.util.ArrayList; +import java.util.List; + +public class RecipeManagerRegistry { + public static List managers = new ArrayList<>(); + + public static void register(CustomRecipeManager manager) { + managers.add(manager); + } + + @FunctionalInterface + public interface CustomRecipeManager { + void apply(RecipeManagerEvent event); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java new file mode 100644 index 000000000..4aa23e342 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java @@ -0,0 +1,49 @@ +package ml.pkom.mcpitanlibarch.api.event.v0.event; + +import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonElement; +import ml.pkom.mcpitanlibarch.api.recipe.CompatibleRecipeEntry; +import net.minecraft.recipe.RecipeEntry; +import net.minecraft.recipe.RecipeType; +import net.minecraft.resource.ResourceManager; +import net.minecraft.util.Identifier; +import net.minecraft.util.profiler.Profiler; + +import java.util.Map; + +public class RecipeManagerEvent { + public Map jsonMap; + public ResourceManager resourceManager; + public Profiler profiler; + + @Deprecated + public Map, ImmutableMap.Builder>> map; + + public RecipeManagerEvent(Map map, ResourceManager resourceManager, Profiler profiler, Map, ImmutableMap.Builder>> map2) { + this.jsonMap = map; + this.resourceManager = resourceManager; + this.profiler = profiler; + this.map = map2; + } + + public Map getJsonMap() { + return jsonMap; + } + + @Deprecated + public Map, ImmutableMap.Builder>> getMap() { + return map; + } + + public Profiler getProfiler() { + return profiler; + } + + public ResourceManager getResourceManager() { + return resourceManager; + } + + public void putCompatibleRecipeEntry(Identifier id, CompatibleRecipeEntry entry) { + map.get(entry.getType()).put(entry.getId(), entry.getRecipeEntry()); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java new file mode 100644 index 000000000..3668d910b --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java @@ -0,0 +1,63 @@ +package ml.pkom.mcpitanlibarch.api.recipe; + +import ml.pkom.mcpitanlibarch.api.util.RecipeUtil; +import net.minecraft.recipe.*; +import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; + +public class CompatibleRecipeEntry { + private final RecipeEntry entry; + + public String group = ""; + public RecipeUtil.CompatibilityCraftingRecipeCategory category = null; + + public CompatibleRecipeEntry(RecipeEntry entry) { + this.entry = entry; + } + + public CompatibleRecipeEntry(Identifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ShapelessRecipe shapelessRecipe) { + this.entry = new RecipeEntry<>(id, shapelessRecipe); + this.group = group; + this.category = category; + } + + @Deprecated + public RecipeEntry getRecipeEntry() { + return entry; + } + + public Recipe getRecipe() { + Object object = entry.value(); + if (object instanceof Recipe) { + return (Recipe) object; + } + return null; + } + + public Identifier getId() { + return entry.id(); + } + + public RecipeType getType() { + Recipe recipe = getRecipe(); + if (recipe == null) return null; + + return recipe.getType(); + } + + public RecipeSerializer getSerializer() { + Recipe recipe = getRecipe(); + if (recipe == null) return null; + + return recipe.getSerializer(); + } + + @Nullable + public RecipeUtil.CompatibilityCraftingRecipeCategory getCategory() { + return category; + } + + public String getGroup() { + return group; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index de4f810bd..ab1fc96cf 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -4,7 +4,7 @@ import ml.pkom.mcpitanlibarch.MCPitanLibarch; import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; -import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; +import ml.pkom.mcpitanlibarch.api.event.registry.RegistryResult; import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; @@ -42,62 +42,62 @@ public static ArchRegistry createRegistry(String MOD_ID) { return new ArchRegistry(MOD_ID); } - public RegistryEvent registerItem(Identifier id, Supplier supplier) { - if (MCPitanLibarch.itemBlackList.contains(id.toString())) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); + public RegistryResult registerItem(Identifier id, Supplier supplier) { + if (MCPitanLibarch.isItemBlackListed(id)) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); RegistrySupplier registrySupplier = mcplr.registryItem(id, supplier); CreativeTabManager.register(id); - return new RegistryEvent<>(registrySupplier); + return new RegistryResult<>(registrySupplier); } - public RegistryEvent registerBlock(Identifier id, Supplier supplier) { - if (MCPitanLibarch.blockBlackList.contains(id.toString())) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); - return new RegistryEvent<>(mcplr.registryBlock(id, supplier)); + public RegistryResult registerBlock(Identifier id, Supplier supplier) { + if (MCPitanLibarch.isBlockBlackListed(id)) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); + return new RegistryResult<>(mcplr.registryBlock(id, supplier)); } - public RegistryEvent> registerScreenHandlerType(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(mcplr.registryScreenHandlerType(id, supplier)); + public RegistryResult> registerScreenHandlerType(Identifier id, Supplier> supplier) { + return new RegistryResult<>(mcplr.registryScreenHandlerType(id, supplier)); } @Deprecated - public RegistryEvent> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { + public RegistryResult> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { return registerScreenHandlerType(id, () -> supplier.get().build()); } - public RegistryEvent> registerMenu(Identifier id, Supplier> supplier) { + public RegistryResult> registerMenu(Identifier id, Supplier> supplier) { return registerScreenHandlerType(id, supplier); } - public RegistryEvent> registerBlockEntityType(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(mcplr.registryBlockEntityType(id, supplier)); + public RegistryResult> registerBlockEntityType(Identifier id, Supplier> supplier) { + return new RegistryResult<>(mcplr.registryBlockEntityType(id, supplier)); } - public RegistryEvent> registerEntity(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(mcplr.registryEntityType(id, supplier)); + public RegistryResult> registerEntity(Identifier id, Supplier> supplier) { + return new RegistryResult<>(mcplr.registryEntityType(id, supplier)); } @Deprecated - public RegistryEvent registerSoundEvent(Identifier id, Supplier supplier) { - return new RegistryEvent<>(mcplr.registrySoundEvent(id, supplier)); + public RegistryResult registerSoundEvent(Identifier id, Supplier supplier) { + return new RegistryResult<>(mcplr.registrySoundEvent(id, supplier)); } - public RegistryEvent registerSoundEvent(Identifier id) { + public RegistryResult registerSoundEvent(Identifier id) { return registerSoundEvent(id, () -> new SoundEvent(id)); } - public RegistryEvent registerSoundEvent(Identifier id, float distanceToTravel) { + public RegistryResult registerSoundEvent(Identifier id, float distanceToTravel) { return registerSoundEvent(id, () -> new SoundEvent(id)); } - public RegistryEvent registerFluid(Identifier id, Supplier supplier) { - return new RegistryEvent<>(mcplr.registryFluid(id, supplier)); + public RegistryResult registerFluid(Identifier id, Supplier supplier) { + return new RegistryResult<>(mcplr.registryFluid(id, supplier)); } - public RegistryEvent> registerParticleType(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(mcplr.registryParticleType(id, supplier)); + public RegistryResult> registerParticleType(Identifier id, Supplier> supplier) { + return new RegistryResult<>(mcplr.registryParticleType(id, supplier)); } - public RegistryEvent registerItemGroup(Identifier id, Supplier supplier) { - return new RegistryEvent<>(null); + public RegistryResult registerItemGroup(Identifier id, Supplier supplier) { + return new RegistryResult<>(null); } public static void registerFuel(int time, ItemConvertible... item) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/CompatibleRecipeEntryUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/CompatibleRecipeEntryUtil.java new file mode 100644 index 000000000..0f3cc7a0d --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/CompatibleRecipeEntryUtil.java @@ -0,0 +1,13 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import ml.pkom.mcpitanlibarch.api.recipe.CompatibleRecipeEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Ingredient; +import net.minecraft.util.Identifier; +import net.minecraft.util.collection.DefaultedList; + +public class CompatibleRecipeEntryUtil { + public static CompatibleRecipeEntry createShapelessRecipe(Identifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { + return new CompatibleRecipeEntry(id, group, category, RecipeUtil.createShapelessRecipe(id, group, category, output, input)); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java new file mode 100644 index 000000000..68d12506b --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java @@ -0,0 +1,30 @@ +package ml.pkom.mcpitanlibarch.mixin; + +import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonElement; +import ml.pkom.mcpitanlibarch.api.event.v0.RecipeManagerRegistry; +import ml.pkom.mcpitanlibarch.api.event.v0.event.RecipeManagerEvent; +import net.minecraft.recipe.RecipeEntry; +import net.minecraft.recipe.RecipeManager; +import net.minecraft.recipe.RecipeType; +import net.minecraft.resource.ResourceManager; +import net.minecraft.util.Identifier; +import net.minecraft.util.profiler.Profiler; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.util.Map; + +@Mixin(RecipeManager.class) +public class RecipeManagerMixin { + @Inject(method = "apply(Ljava/util/Map;Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/util/profiler/Profiler;)V", + at = @At(value = "INVOKE", target = "Ljava/util/Map;entrySet()Ljava/util/Set;", ordinal = 1), + locals = LocalCapture.CAPTURE_FAILHARD) + private void invokeApply(Map map, ResourceManager resourceManager, Profiler profiler, CallbackInfo ci, Map, ImmutableMap.Builder>> map2) { + RecipeManagerRegistry.managers.forEach((manager) -> manager.apply(new RecipeManagerEvent(map, resourceManager, profiler, map2))); + } + +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java index 898fbb80c..8d6329a33 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java @@ -4,7 +4,8 @@ import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; import ml.pkom.mcpitanlibarch.api.block.ExtendBlock; import ml.pkom.mcpitanlibarch.api.command.CommandRegistry; -import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; +import ml.pkom.mcpitanlibarch.api.event.registry.RegistryResult; +import ml.pkom.mcpitanlibarch.api.gui.SimpleScreenHandlerTypeBuilder; import ml.pkom.mcpitanlibarch.api.item.DefaultItemGroups; import ml.pkom.mcpitanlibarch.api.item.ExtendSettings; import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; @@ -33,14 +34,14 @@ public static Identifier id(String id) { public static ArchRegistry registry = ArchRegistry.createRegistry(MOD_ID); - public static RegistryEvent> supplierEXAMPLE_SCREENHANDLER = registry.registerScreenHandlerType(id("example_gui"), () -> new ScreenHandlerType<>(ExampleScreenHandler::new));; + public static RegistryResult> supplierEXAMPLE_SCREENHANDLER = registry.registerScreenHandlerType(id("example_gui"), () -> new SimpleScreenHandlerTypeBuilder<>(ExampleScreenHandler::new).build()); - public static RegistryEvent EXAMPLE_ITEM_SUPPLIER; - public static RegistryEvent EXAMPLE_BLOCK_SUPPLIER; - public static RegistryEvent EXAMPLE_BLOCK_ITEM_SUPPLIER; - public static RegistryEvent EXAMPLE_GUI_ITEM_SUPPLIER; - public static RegistryEvent EXAMPLE_GUI_BLOCK_SUPPLIER; - public static RegistryEvent EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER; + public static RegistryResult EXAMPLE_ITEM_SUPPLIER; + public static RegistryResult EXAMPLE_BLOCK_SUPPLIER; + public static RegistryResult EXAMPLE_BLOCK_ITEM_SUPPLIER; + public static RegistryResult EXAMPLE_GUI_ITEM_SUPPLIER; + public static RegistryResult EXAMPLE_GUI_BLOCK_SUPPLIER; + public static RegistryResult EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER; public static void init() { //EntityTypeBuilder.create().setSpawnGroup(SpawnGroup.AMBIENT).setEntityFactory(((type, world) -> new ZombieEntity((EntityType) type, world))); diff --git a/common/src/main/resources/mcpitanlibarch-common.mixins.json b/common/src/main/resources/mcpitanlibarch-common.mixins.json index d8e6da905..ddaf49d8a 100644 --- a/common/src/main/resources/mcpitanlibarch-common.mixins.json +++ b/common/src/main/resources/mcpitanlibarch-common.mixins.json @@ -8,6 +8,7 @@ "ItemStackMixin", "ItemUsageContextMixin", "MinecraftServerTimer", + "RecipeManagerMixin", "ServerWorldTimer" ], "client": [ diff --git a/fabric/build.gradle b/fabric/build.gradle index 7c6b990b2..4167f102b 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -30,6 +30,11 @@ dependencies { shadowCommon 'org.yaml:snakeyaml:2.0' include 'org.yaml:snakeyaml:2.0' + + modApi("me.shedaniel.cloth:cloth-config-fabric:${rootProject.cloth_config_version}") { + exclude(group: "net.fabricmc.fabric-api") + } + include("me.shedaniel.cloth:cloth-config-fabric:${rootProject.cloth_config_version}") } processResources { diff --git a/gradle.properties b/gradle.properties index ed81f7bfa..36c10de2b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,6 +17,8 @@ forge_version=1.18.2-40.2.0 quilt_loader_version=0.18.4-pre.3 quilt_fabric_api_version=1.0.0-beta.28+0.67.0 +cloth_config_version=11.1.118 + fabricEnabled=true forgeEnabled=true quiltEnabled=false \ No newline at end of file diff --git a/info.properties b/info.properties index 049fba26a..d5bb33a36 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.9.2 +mod_version=1.9.3 maven_group=ml.pkom \ No newline at end of file From 65be8e236f87d4093dd8e4c281c0b50296ee40a8 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 12 Feb 2024 23:16:58 +0900 Subject: [PATCH 219/617] forge cloth config --- forge/build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/forge/build.gradle b/forge/build.gradle index 09991120d..aefb82b3a 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -36,6 +36,11 @@ dependencies { shadowCommon 'org.yaml:snakeyaml:2.0' compileOnly 'org.yaml:snakeyaml:2.0' + + modApi("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") { + exclude(group: "net.fabricmc.fabric-api") + } + include("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") } processResources { From e2957bc498bb3f7426386c7beb5c4e1a9a2c9818 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 12 Feb 2024 23:25:19 +0900 Subject: [PATCH 220/617] forge compileonly --- forge/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/build.gradle b/forge/build.gradle index aefb82b3a..e7d77521f 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -40,7 +40,7 @@ dependencies { modApi("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") { exclude(group: "net.fabricmc.fabric-api") } - include("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") + compileOnly("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") } processResources { From 43f65bb2fbdd73bf18bc39834a64e4838aa555f1 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 12 Feb 2024 23:17:07 +0900 Subject: [PATCH 221/617] 1201 --- .../event/v0/event/RecipeManagerEvent.java | 14 +++++++---- .../api/recipe/CompatibleRecipeEntry.java | 25 ++++++++----------- .../mixin/RecipeManagerMixin.java | 4 +-- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java index 4aa23e342..472196688 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java @@ -3,7 +3,7 @@ import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; import ml.pkom.mcpitanlibarch.api.recipe.CompatibleRecipeEntry; -import net.minecraft.recipe.RecipeEntry; +import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeType; import net.minecraft.resource.ResourceManager; import net.minecraft.util.Identifier; @@ -17,9 +17,9 @@ public class RecipeManagerEvent { public Profiler profiler; @Deprecated - public Map, ImmutableMap.Builder>> map; + public Map, ImmutableMap.Builder>> map; - public RecipeManagerEvent(Map map, ResourceManager resourceManager, Profiler profiler, Map, ImmutableMap.Builder>> map2) { + public RecipeManagerEvent(Map map, ResourceManager resourceManager, Profiler profiler, Map, ImmutableMap.Builder>> map2) { this.jsonMap = map; this.resourceManager = resourceManager; this.profiler = profiler; @@ -31,7 +31,7 @@ public Map getJsonMap() { } @Deprecated - public Map, ImmutableMap.Builder>> getMap() { + public Map, ImmutableMap.Builder>> getMap() { return map; } @@ -44,6 +44,10 @@ public ResourceManager getResourceManager() { } public void putCompatibleRecipeEntry(Identifier id, CompatibleRecipeEntry entry) { - map.get(entry.getType()).put(entry.getId(), entry.getRecipeEntry()); + map.get(entry.getType()).put(id, entry.getRecipe()); + } + + public void putCompatibleRecipeEntry(CompatibleRecipeEntry entry) { + map.get(entry.getType()).put(entry.getId(), entry.getRecipe()); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java index 3668d910b..d73370aed 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java @@ -6,36 +6,31 @@ import org.jetbrains.annotations.Nullable; public class CompatibleRecipeEntry { - private final RecipeEntry entry; + private final Recipe recipe; + + private Identifier id; public String group = ""; public RecipeUtil.CompatibilityCraftingRecipeCategory category = null; - public CompatibleRecipeEntry(RecipeEntry entry) { - this.entry = entry; + @Deprecated + public CompatibleRecipeEntry(Recipe recipe) { + this.recipe = recipe; } public CompatibleRecipeEntry(Identifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ShapelessRecipe shapelessRecipe) { - this.entry = new RecipeEntry<>(id, shapelessRecipe); + this.recipe = shapelessRecipe; + this.id = id; this.group = group; this.category = category; } - @Deprecated - public RecipeEntry getRecipeEntry() { - return entry; - } - public Recipe getRecipe() { - Object object = entry.value(); - if (object instanceof Recipe) { - return (Recipe) object; - } - return null; + return recipe; } public Identifier getId() { - return entry.id(); + return id; } public RecipeType getType() { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java index 68d12506b..5b9b3c740 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java @@ -4,7 +4,7 @@ import com.google.gson.JsonElement; import ml.pkom.mcpitanlibarch.api.event.v0.RecipeManagerRegistry; import ml.pkom.mcpitanlibarch.api.event.v0.event.RecipeManagerEvent; -import net.minecraft.recipe.RecipeEntry; +import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; import net.minecraft.recipe.RecipeType; import net.minecraft.resource.ResourceManager; @@ -23,7 +23,7 @@ public class RecipeManagerMixin { @Inject(method = "apply(Ljava/util/Map;Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/util/profiler/Profiler;)V", at = @At(value = "INVOKE", target = "Ljava/util/Map;entrySet()Ljava/util/Set;", ordinal = 1), locals = LocalCapture.CAPTURE_FAILHARD) - private void invokeApply(Map map, ResourceManager resourceManager, Profiler profiler, CallbackInfo ci, Map, ImmutableMap.Builder>> map2) { + private void invokeApply(Map map, ResourceManager resourceManager, Profiler profiler, CallbackInfo ci, Map, ImmutableMap.Builder>> map2) { RecipeManagerRegistry.managers.forEach((manager) -> manager.apply(new RecipeManagerEvent(map, resourceManager, profiler, map2))); } From 822fcff9258ed4aece1bb71c390521180d8e79dd Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 12 Feb 2024 23:44:27 +0900 Subject: [PATCH 222/617] cloth config 6.5.116 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 36c10de2b..8543cd50c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ forge_version=1.18.2-40.2.0 quilt_loader_version=0.18.4-pre.3 quilt_fabric_api_version=1.0.0-beta.28+0.67.0 -cloth_config_version=11.1.118 +cloth_config_version=6.5.116 fabricEnabled=true forgeEnabled=true From 29f2aa6704c004d3a04dc670eb311f8014874972 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Tue, 13 Feb 2024 01:34:52 +0900 Subject: [PATCH 223/617] add APIs, fix APIs --- .../mcpitanlibarch/api/entity/Player.java | 2 - .../api/event/registry/RegistryEvent.java | 1 + .../mcpitanlibarch/api/item/ExtendItem.java | 2 +- .../api/item/ExtendItemProvider.java | 1 - .../api/registry/ArchRegistry.java | 80 +++++------- .../mcpitanlibarch/api/util/TextUtil.java | 18 +-- .../mcpitanlibarch/test/ExampleModClient.java | 9 -- .../pitan76/mcpitanlib/MCPitanLib.java} | 13 +- .../api/event/v1}/RecipeManagerRegistry.java | 2 +- .../api/registry/CompatRegistry.java | 123 ++++++++++++++++++ .../api/registry/result}/RegistryResult.java | 5 +- .../api/util/CompatibleRecipeEntryUtil.java | 3 +- .../pitan76/mcpitanlib/api/util/TextUtil.java | 34 +++++ .../core/registry/FuelRegistry.java | 2 +- .../core/registry/MCPLRegistry.java | 2 +- .../core/registry/MCPLRegistry1_20.java | 2 +- .../pitan76/mcpitanlib}/debug/DebugTool.java | 4 +- .../pitan76/mcpitanlib}/mixin/ItemMixin.java | 2 +- .../mcpitanlib}/mixin/ItemStackMixin.java | 2 +- .../mixin/ItemUsageContextMixin.java | 2 +- .../mixin/MinecraftServerTimer.java | 2 +- .../mcpitanlib}/mixin/RecipeManagerMixin.java | 4 +- .../mcpitanlib}/mixin/ServerWorldTimer.java | 2 +- .../mcpitanlib}/test/ExampleCommand.java | 3 +- .../mcpitanlib}/test/ExampleGuiBlock.java | 2 +- .../mcpitanlib}/test/ExampleGuiItem.java | 5 +- .../pitan76/mcpitanlib}/test/ExampleMod.java | 20 ++- .../mcpitanlib/test/ExampleModClient.java | 9 ++ .../mcpitanlib}/test/ExampleScreen.java | 6 +- .../test/ExampleScreenHandler.java | 9 +- .../mcpitanlibarch-common.mixins.json | 2 +- .../mcpitanlib/fabric/MCPitanLibFabric.java} | 8 +- .../mcpitanlib}/fabric/mixin/RecipeMixin.java | 2 +- fabric/src/main/resources/fabric.mod.json | 2 +- .../main/resources/mcpitanlibarch.mixins.json | 2 +- .../forge/MCPitanLibarchForge.java | 25 ---- .../mcpitanlib/forge/MCPitanLibForge.java | 14 ++ .../forge/client/MCPitanLibForgeClient.java} | 4 +- .../main/resources/mcpitanlibarch.mixins.json | 2 +- forge/src/main/resources/pack.mcmeta | 2 +- info.properties | 2 +- 41 files changed, 281 insertions(+), 155 deletions(-) delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleModClient.java rename common/src/main/java/{ml/pkom/mcpitanlibarch/MCPitanLibarch.java => net/pitan76/mcpitanlib/MCPitanLib.java} (87%) rename common/src/main/java/{ml/pkom/mcpitanlibarch/api/event/v0 => net/pitan76/mcpitanlib/api/event/v1}/RecipeManagerRegistry.java (91%) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java rename common/src/main/java/{ml/pkom/mcpitanlibarch/api/event/registry => net/pitan76/mcpitanlib/api/registry/result}/RegistryResult.java (71%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/CompatibleRecipeEntryUtil.java (87%) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/core/registry/FuelRegistry.java (90%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/core/registry/MCPLRegistry.java (98%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/core/registry/MCPLRegistry1_20.java (92%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/debug/DebugTool.java (86%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/mixin/ItemMixin.java (99%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/mixin/ItemStackMixin.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/mixin/ItemUsageContextMixin.java (88%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/mixin/MinecraftServerTimer.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/mixin/RecipeManagerMixin.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/mixin/ServerWorldTimer.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/test/ExampleCommand.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/test/ExampleGuiBlock.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/test/ExampleGuiItem.java (85%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/test/ExampleMod.java (73%) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/test/ExampleScreen.java (88%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/test/ExampleScreenHandler.java (64%) rename fabric/src/main/java/{ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java => net/pitan76/mcpitanlib/fabric/MCPitanLibFabric.java} (63%) rename fabric/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/fabric/mixin/RecipeMixin.java (96%) delete mode 100644 forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java create mode 100644 forge/src/main/java/net/pitan76/mcpitanlib/forge/MCPitanLibForge.java rename forge/src/main/java/{ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java => net/pitan76/mcpitanlib/forge/client/MCPitanLibForgeClient.java} (73%) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java index 29e756919..cab6612fb 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java @@ -5,13 +5,11 @@ import ml.pkom.mcpitanlibarch.api.util.ScreenHandlerUtil; import ml.pkom.mcpitanlibarch.core.player.ItemCooldown; import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.ItemCooldownManager; import net.minecraft.entity.player.PlayerAbilities; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.PacketByteBuf; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java index 6556ba25d..f47c62fa0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java @@ -1,6 +1,7 @@ package ml.pkom.mcpitanlibarch.api.event.registry; import dev.architectury.registry.registries.RegistrySupplier; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; public class RegistryEvent extends RegistryResult { public RegistryEvent(RegistrySupplier supplier) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java index 572d479af..c90de9ab8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java @@ -2,7 +2,7 @@ import ml.pkom.mcpitanlibarch.Dummy; import ml.pkom.mcpitanlibarch.api.event.item.*; -import ml.pkom.mcpitanlibarch.mixin.ItemUsageContextMixin; +import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java index 904eb1934..23cc52d91 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java @@ -1,6 +1,5 @@ package ml.pkom.mcpitanlibarch.api.item; -import ml.pkom.mcpitanlibarch.Dummy; import ml.pkom.mcpitanlibarch.api.event.item.*; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index ab1fc96cf..bc0611181 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -1,18 +1,7 @@ package ml.pkom.mcpitanlibarch.api.registry; -import dev.architectury.registry.registries.RegistrySupplier; -import ml.pkom.mcpitanlibarch.MCPitanLibarch; -import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; -import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; -import ml.pkom.mcpitanlibarch.api.event.registry.RegistryResult; +import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; -import ml.pkom.mcpitanlibarch.api.util.BlockUtil; -import ml.pkom.mcpitanlibarch.api.util.ItemUtil; -import ml.pkom.mcpitanlibarch.core.registry.FuelRegistry; -import ml.pkom.mcpitanlibarch.core.registry.MCPLRegistry; -import ml.pkom.mcpitanlibarch.core.registry.MCPLRegistry1_20; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.EntityType; @@ -24,91 +13,88 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.pitan76.mcpitanlib.api.registry.CompatRegistry; +import net.pitan76.mcpitanlib.core.registry.MCPLRegistry; +import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; import java.util.function.Supplier; +@Deprecated public class ArchRegistry { + private final CompatRegistry compatRegistry; private final MCPLRegistry mcplr; private final MCPLRegistry1_20 mcplr1_20; public ArchRegistry(String MOD_ID) { - mcplr = new MCPLRegistry(MOD_ID); - mcplr1_20 = new MCPLRegistry1_20(mcplr); + compatRegistry = new CompatRegistry(MOD_ID); + mcplr = compatRegistry.getMcplr(); + mcplr1_20 = compatRegistry.getMcplr1_20(); } public static ArchRegistry createRegistry(String MOD_ID) { return new ArchRegistry(MOD_ID); } - public RegistryResult registerItem(Identifier id, Supplier supplier) { - if (MCPitanLibarch.isItemBlackListed(id)) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); - RegistrySupplier registrySupplier = mcplr.registryItem(id, supplier); - CreativeTabManager.register(id); - return new RegistryResult<>(registrySupplier); + public RegistryEvent registerItem(Identifier id, Supplier supplier) { + return new RegistryEvent<>(compatRegistry.registerItem(id, supplier).supplier); } - public RegistryResult registerBlock(Identifier id, Supplier supplier) { - if (MCPitanLibarch.isBlockBlackListed(id)) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); - return new RegistryResult<>(mcplr.registryBlock(id, supplier)); + public RegistryEvent registerBlock(Identifier id, Supplier supplier) { + return new RegistryEvent<>(compatRegistry.registerBlock(id, supplier).supplier); } - public RegistryResult> registerScreenHandlerType(Identifier id, Supplier> supplier) { - return new RegistryResult<>(mcplr.registryScreenHandlerType(id, supplier)); + public RegistryEvent> registerScreenHandlerType(Identifier id, Supplier> supplier) { + return new RegistryEvent<>(compatRegistry.registerScreenHandlerType(id, supplier).supplier); } @Deprecated - public RegistryResult> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { + public RegistryEvent> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { return registerScreenHandlerType(id, () -> supplier.get().build()); } - public RegistryResult> registerMenu(Identifier id, Supplier> supplier) { + public RegistryEvent> registerMenu(Identifier id, Supplier> supplier) { return registerScreenHandlerType(id, supplier); } - public RegistryResult> registerBlockEntityType(Identifier id, Supplier> supplier) { - return new RegistryResult<>(mcplr.registryBlockEntityType(id, supplier)); + public RegistryEvent> registerBlockEntityType(Identifier id, Supplier> supplier) { + return new RegistryEvent<>(compatRegistry.registerBlockEntityType(id, supplier).supplier); } - public RegistryResult> registerEntity(Identifier id, Supplier> supplier) { - return new RegistryResult<>(mcplr.registryEntityType(id, supplier)); + public RegistryEvent> registerEntity(Identifier id, Supplier> supplier) { + return new RegistryEvent<>(compatRegistry.registerEntity(id, supplier).supplier); } @Deprecated - public RegistryResult registerSoundEvent(Identifier id, Supplier supplier) { - return new RegistryResult<>(mcplr.registrySoundEvent(id, supplier)); + public RegistryEvent registerSoundEvent(Identifier id, Supplier supplier) { + return new RegistryEvent<>(compatRegistry.registerSoundEvent(id, supplier).supplier); } - public RegistryResult registerSoundEvent(Identifier id) { + public RegistryEvent registerSoundEvent(Identifier id) { return registerSoundEvent(id, () -> new SoundEvent(id)); } - public RegistryResult registerSoundEvent(Identifier id, float distanceToTravel) { + public RegistryEvent registerSoundEvent(Identifier id, float distanceToTravel) { return registerSoundEvent(id, () -> new SoundEvent(id)); } - public RegistryResult registerFluid(Identifier id, Supplier supplier) { - return new RegistryResult<>(mcplr.registryFluid(id, supplier)); + public RegistryEvent registerFluid(Identifier id, Supplier supplier) { + return new RegistryEvent<>(compatRegistry.registerFluid(id, supplier).supplier); } - public RegistryResult> registerParticleType(Identifier id, Supplier> supplier) { - return new RegistryResult<>(mcplr.registryParticleType(id, supplier)); + public RegistryEvent> registerParticleType(Identifier id, Supplier> supplier) { + return new RegistryEvent<>(compatRegistry.registerParticleType(id, supplier).supplier); } - public RegistryResult registerItemGroup(Identifier id, Supplier supplier) { - return new RegistryResult<>(null); + public RegistryEvent registerItemGroup(Identifier id, Supplier supplier) { + return new RegistryEvent<>(null); } public static void registerFuel(int time, ItemConvertible... item) { - FuelRegistry.register(time, item); + CompatRegistry.registerFuel(time, item); } public void allRegister() { - // 1.16 Register - mcplr.allRegister1_16(); - - // ItemGroup - CreativeTabManager.allRegister(); + compatRegistry.allRegister(); } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TextUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TextUtil.java index 4abbc5d7f..507f89ce1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TextUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TextUtil.java @@ -2,33 +2,29 @@ import net.minecraft.text.*; +@Deprecated public class TextUtil { public static MutableText literal(String string) { - //return Text.literal(string); - return new LiteralText(string); + return net.pitan76.mcpitanlib.api.util.TextUtil.literal(string); } public static MutableText translatable(String key) { - //return Text.translatable(key); - return new TranslatableText(key); + return net.pitan76.mcpitanlib.api.util.TextUtil.translatable(key); } public static MutableText translatable(String key, Object... args) { - //return Text.translatable(key, args); - return new TranslatableText(key, args); + return net.pitan76.mcpitanlib.api.util.TextUtil.translatable(key, args); } public static MutableText empty() { - //return Text.empty(); - return literal(""); + return net.pitan76.mcpitanlib.api.util.TextUtil.empty(); } public static MutableText keybind(String string) { - //return Text.keybind(string); - return new KeybindText(string); + return net.pitan76.mcpitanlib.api.util.TextUtil.keybind(string); } public static String txt2str(Text text) { - return text.getString(); + return net.pitan76.mcpitanlib.api.util.TextUtil.txt2str(text); } } \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleModClient.java b/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleModClient.java deleted file mode 100644 index 6e727b788..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleModClient.java +++ /dev/null @@ -1,9 +0,0 @@ -package ml.pkom.mcpitanlibarch.test; - -import dev.architectury.registry.menu.MenuRegistry; - -public class ExampleModClient { - public static void init() { - MenuRegistry.registerScreenFactory(ExampleMod.supplierEXAMPLE_SCREENHANDLER.getOrNull(), ExampleScreen::new); - } -} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java similarity index 87% rename from common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java rename to common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java index 33619ca63..17a17d279 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/MCPitanLibarch.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java @@ -1,10 +1,10 @@ -package ml.pkom.mcpitanlibarch; +package net.pitan76.mcpitanlib; import ml.pkom.easyapi.config.Config; import ml.pkom.easyapi.config.JsonConfig; import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; -import ml.pkom.mcpitanlibarch.debug.DebugTool; +import net.pitan76.mcpitanlib.debug.DebugTool; import net.minecraft.util.Identifier; import java.io.File; @@ -12,10 +12,11 @@ import java.util.Arrays; import java.util.List; -public class MCPitanLibarch { +public class MCPitanLib { public static final String MOD_ID = "mcpitanlibarch"; - private static final File configFile = new File(PlatformUtil.getConfigFolder().toFile(), MOD_ID + "/blacklist.json"); + private static final File configFile = new File(PlatformUtil.getConfigFolder().toFile(), "mcpitanlib/blacklist.json"); + private static final File oldConfigFile = new File(PlatformUtil.getConfigFolder().toFile(), "mcpitanlibarch/blacklist.json"); public static Config config = new JsonConfig(); private static boolean configLoaded = false; @@ -46,6 +47,10 @@ public static void init() { * Configの初期化 */ public static void configInit() { + if (oldConfigFile.exists() && !configFile.exists()) { + oldConfigFile.renameTo(configFile); + } + try { if (configLoaded) return; configLoaded = true; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/RecipeManagerRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/RecipeManagerRegistry.java similarity index 91% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/RecipeManagerRegistry.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/RecipeManagerRegistry.java index b17acc889..33b46fc3a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/RecipeManagerRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/RecipeManagerRegistry.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.event.v0; +package net.pitan76.mcpitanlib.api.event.v1; import ml.pkom.mcpitanlibarch.api.event.v0.event.RecipeManagerEvent; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java new file mode 100644 index 000000000..874d33ac7 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -0,0 +1,123 @@ +package net.pitan76.mcpitanlib.api.registry; + +import dev.architectury.registry.registries.RegistrySupplier; +import net.pitan76.mcpitanlib.MCPitanLib; +import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; +import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; +import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; +import ml.pkom.mcpitanlibarch.api.util.BlockUtil; +import ml.pkom.mcpitanlibarch.api.util.ItemUtil; +import net.pitan76.mcpitanlib.core.registry.FuelRegistry; +import net.pitan76.mcpitanlib.core.registry.MCPLRegistry; +import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.EntityType; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; +import net.minecraft.item.ItemConvertible; +import net.minecraft.item.ItemGroup; +import net.minecraft.particle.ParticleType; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; + +import java.util.function.Supplier; + +public class CompatRegistry { + + private final MCPLRegistry mcplr; + private final MCPLRegistry1_20 mcplr1_20; + + public CompatRegistry(String MOD_ID) { + mcplr = new MCPLRegistry(MOD_ID); + mcplr1_20 = new MCPLRegistry1_20(mcplr); + } + + public static CompatRegistry createRegistry(String MOD_ID) { + return new CompatRegistry(MOD_ID); + } + + public RegistryResult registerItem(Identifier id, Supplier supplier) { + if (MCPitanLib.isItemBlackListed(id)) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); + RegistrySupplier registrySupplier = mcplr.registryItem(id, supplier); + CreativeTabManager.register(id); + return new RegistryResult<>(registrySupplier); + } + + public RegistryResult registerBlock(Identifier id, Supplier supplier) { + if (MCPitanLib.isBlockBlackListed(id)) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); + return new RegistryResult<>(mcplr.registryBlock(id, supplier)); + } + + public RegistryResult> registerScreenHandlerType(Identifier id, Supplier> supplier) { + return new RegistryResult<>(mcplr.registryScreenHandlerType(id, supplier)); + } + + @Deprecated + public RegistryResult> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { + return registerScreenHandlerType(id, () -> supplier.get().build()); + } + + public RegistryResult> registerMenu(Identifier id, Supplier> supplier) { + return registerScreenHandlerType(id, supplier); + } + + public RegistryResult> registerBlockEntityType(Identifier id, Supplier> supplier) { + return new RegistryResult<>(mcplr.registryBlockEntityType(id, supplier)); + } + + public RegistryResult> registerEntity(Identifier id, Supplier> supplier) { + return new RegistryResult<>(mcplr.registryEntityType(id, supplier)); + } + + @Deprecated + public RegistryResult registerSoundEvent(Identifier id, Supplier supplier) { + return new RegistryResult<>(mcplr.registrySoundEvent(id, supplier)); + } + + public RegistryResult registerSoundEvent(Identifier id) { + return registerSoundEvent(id, () -> new SoundEvent(id)); + } + + public RegistryResult registerSoundEvent(Identifier id, float distanceToTravel) { + return registerSoundEvent(id, () -> new SoundEvent(id)); + } + + public RegistryResult registerFluid(Identifier id, Supplier supplier) { + return new RegistryResult<>(mcplr.registryFluid(id, supplier)); + } + + public RegistryResult> registerParticleType(Identifier id, Supplier> supplier) { + return new RegistryResult<>(mcplr.registryParticleType(id, supplier)); + } + + public RegistryResult registerItemGroup(Identifier id, Supplier supplier) { + return new RegistryResult<>(null); + } + + public static void registerFuel(int time, ItemConvertible... item) { + FuelRegistry.register(time, item); + } + + public void allRegister() { + // 1.16 Register + mcplr.allRegister1_16(); + + // ItemGroup + CreativeTabManager.allRegister(); + } + + @Deprecated + public MCPLRegistry getMcplr() { + return mcplr; + } + + @Deprecated + public MCPLRegistry1_20 getMcplr1_20() { + return mcplr1_20; + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/RegistryResult.java similarity index 71% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryResult.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/RegistryResult.java index 524982dad..a19dd2e16 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryResult.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/RegistryResult.java @@ -1,10 +1,9 @@ -package ml.pkom.mcpitanlibarch.api.event.registry; +package net.pitan76.mcpitanlib.api.registry.result; import dev.architectury.registry.registries.RegistrySupplier; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import org.jetbrains.annotations.Nullable; -public class RegistryResult extends BaseEvent { +public class RegistryResult { public RegistrySupplier supplier; public RegistryResult(RegistrySupplier supplier) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/CompatibleRecipeEntryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java similarity index 87% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/CompatibleRecipeEntryUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java index 0f3cc7a0d..aa55d0046 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/CompatibleRecipeEntryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java @@ -1,6 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import ml.pkom.mcpitanlibarch.api.recipe.CompatibleRecipeEntry; +import ml.pkom.mcpitanlibarch.api.util.RecipeUtil; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java new file mode 100644 index 000000000..49cbbcd4f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java @@ -0,0 +1,34 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.text.*; + +public class TextUtil { + public static MutableText literal(String string) { + //return Text.literal(string); + return new LiteralText(string); + } + + public static MutableText translatable(String key) { + //return Text.translatable(key); + return new TranslatableText(key); + } + + public static MutableText translatable(String key, Object... args) { + //return Text.translatable(key, args); + return new TranslatableText(key, args); + } + + public static MutableText empty() { + //return Text.empty(); + return literal(""); + } + + public static MutableText keybind(String string) { + //return Text.keybind(string); + return new KeybindText(string); + } + + public static String txt2str(Text text) { + return text.getString(); + } +} \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/FuelRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java similarity index 90% rename from common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/FuelRegistry.java rename to common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java index b1d4be253..ac1802e19 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/FuelRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.core.registry; +package net.pitan76.mcpitanlib.core.registry; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry.java similarity index 98% rename from common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java rename to common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry.java index ca9b0a4ca..92cb1c97a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.core.registry; +package net.pitan76.mcpitanlib.core.registry; import com.google.common.base.Suppliers; import dev.architectury.registry.registries.Registrar; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java similarity index 92% rename from common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java rename to common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java index 761219dbd..d3ebdeb47 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/core/registry/MCPLRegistry1_20.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.core.registry; +package net.pitan76.mcpitanlib.core.registry; import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.item.ItemGroup; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/debug/DebugTool.java b/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java similarity index 86% rename from common/src/main/java/ml/pkom/mcpitanlibarch/debug/DebugTool.java rename to common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java index 3c32c402d..b1caccdf0 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/debug/DebugTool.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java @@ -1,9 +1,9 @@ -package ml.pkom.mcpitanlibarch.debug; +package net.pitan76.mcpitanlib.debug; import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.ExtendItem; -import static ml.pkom.mcpitanlibarch.MCPitanLibarch.*; +import static net.pitan76.mcpitanlib.MCPitanLib.*; /** * A tool for debugging. diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java similarity index 99% rename from common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemMixin.java rename to common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index e34dedfda..69836997c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.mixin; +package net.pitan76.mcpitanlib.mixin; import ml.pkom.mcpitanlibarch.api.event.item.*; import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java rename to common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java index 3077cf7e6..5575a4c0c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemStackMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.mixin; +package net.pitan76.mcpitanlib.mixin; import ml.pkom.mcpitanlibarch.api.event.v0.event.ItemStackActionEvent; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemUsageContextMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemUsageContextMixin.java similarity index 88% rename from common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemUsageContextMixin.java rename to common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemUsageContextMixin.java index 118f8be36..5d5557f7e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ItemUsageContextMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemUsageContextMixin.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.mixin; +package net.pitan76.mcpitanlib.mixin; import net.minecraft.item.ItemUsageContext; import net.minecraft.util.hit.BlockHitResult; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/MinecraftServerTimer.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/mixin/MinecraftServerTimer.java rename to common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java index 56add9d0d..977645d26 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/MinecraftServerTimer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.mixin; +package net.pitan76.mcpitanlib.mixin; import ml.pkom.mcpitanlibarch.api.timer.MinecraftServerTimerAccess; import ml.pkom.mcpitanlibarch.api.timer.TimerItem; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java rename to common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java index 5b9b3c740..69d875fbc 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/RecipeManagerMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.mixin; +package net.pitan76.mcpitanlib.mixin; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; -import ml.pkom.mcpitanlibarch.api.event.v0.RecipeManagerRegistry; +import net.pitan76.mcpitanlib.api.event.v1.RecipeManagerRegistry; import ml.pkom.mcpitanlibarch.api.event.v0.event.RecipeManagerEvent; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ServerWorldTimer.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ServerWorldTimer.java rename to common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java index 283a28321..ee9e64cfa 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/mixin/ServerWorldTimer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.mixin; +package net.pitan76.mcpitanlib.mixin; import ml.pkom.mcpitanlibarch.api.timer.ServerWorldTimerAccess; import ml.pkom.mcpitanlibarch.api.timer.TimerItem; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java index 32f84d549..b22415118 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java @@ -1,7 +1,6 @@ -package ml.pkom.mcpitanlibarch.test; +package net.pitan76.mcpitanlib.test; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import ml.pkom.mcpitanlibarch.api.command.AbstractCommand; import ml.pkom.mcpitanlibarch.api.command.CommandSettings; import ml.pkom.mcpitanlibarch.api.command.LiteralCommand; import ml.pkom.mcpitanlibarch.api.command.argument.IntegerCommand; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiBlock.java rename to common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java index d05211327..26e6b3499 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.test; +package net.pitan76.mcpitanlib.test; import ml.pkom.mcpitanlibarch.api.block.ExtendBlock; import ml.pkom.mcpitanlibarch.api.event.block.BlockUseEvent; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiItem.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java similarity index 85% rename from common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java index 82870a54f..9b41576d2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleGuiItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java @@ -1,6 +1,7 @@ -package ml.pkom.mcpitanlibarch.test; +package net.pitan76.mcpitanlib.test; import ml.pkom.mcpitanlibarch.api.event.item.ItemUseEvent; +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.ExtendItem; import ml.pkom.mcpitanlibarch.api.util.TextUtil; import net.minecraft.item.ItemStack; @@ -10,7 +11,7 @@ public class ExampleGuiItem extends ExtendItem { - public ExampleGuiItem(Settings settings) { + public ExampleGuiItem(CompatibleItemSettings settings) { super(settings); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java similarity index 73% rename from common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java rename to common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java index 8d6329a33..94f6b9bb5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleMod.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java @@ -1,20 +1,20 @@ -package ml.pkom.mcpitanlibarch.test; +package net.pitan76.mcpitanlib.test; import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; import ml.pkom.mcpitanlibarch.api.block.ExtendBlock; import ml.pkom.mcpitanlibarch.api.command.CommandRegistry; -import ml.pkom.mcpitanlibarch.api.event.registry.RegistryResult; import ml.pkom.mcpitanlibarch.api.gui.SimpleScreenHandlerTypeBuilder; +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.DefaultItemGroups; -import ml.pkom.mcpitanlibarch.api.item.ExtendSettings; +import ml.pkom.mcpitanlibarch.api.item.ExtendItem; import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; -import net.minecraft.block.AbstractBlock; +import ml.pkom.mcpitanlibarch.api.util.ItemUtil; import net.minecraft.block.Block; -import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -44,16 +44,14 @@ public static Identifier id(String id) { public static RegistryResult EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER; public static void init() { - //EntityTypeBuilder.create().setSpawnGroup(SpawnGroup.AMBIENT).setEntityFactory(((type, world) -> new ZombieEntity((EntityType) type, world))); - - EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new Item(new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS, id("example_item")))); + EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new ExtendItem(new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_item")))); EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new ExtendBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE))); - EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> new BlockItem(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); + EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> ItemUtil.ofBlock(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_block")))); - EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); + EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_item")))); EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE).build())); - EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> new BlockItem(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new ExtendSettings().addGroup(DefaultItemGroups.INGREDIENTS))); + EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> ItemUtil.ofBlock(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_block")))); registry.allRegister(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java new file mode 100644 index 000000000..9ca57a61b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.test; + +import ml.pkom.mcpitanlibarch.api.client.registry.ArchRegistryClient; + +public class ExampleModClient { + public static void init() { + ArchRegistryClient.registerScreen(ExampleMod.supplierEXAMPLE_SCREENHANDLER.getOrNull(), ExampleScreen::new); + } +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java similarity index 88% rename from common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java rename to common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java index 1dd4fab98..fc8df857a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java @@ -1,12 +1,10 @@ -package ml.pkom.mcpitanlibarch.test; +package net.pitan76.mcpitanlib.test; import ml.pkom.mcpitanlibarch.api.client.SimpleHandledScreen; import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawBackgroundArgs; import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawMouseoverTooltipArgs; import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.RenderArgs; -import ml.pkom.mcpitanlibarch.api.util.client.ScreenUtil; import net.minecraft.client.gui.widget.TexturedButtonWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; @@ -36,7 +34,7 @@ public void drawBackgroundOverride(DrawBackgroundArgs args) { @Override public void renderOverride(RenderArgs args) { - this.callRenderBackground(args.drawObjectDM); + this.callRenderBackground(args); super.renderOverride(args); this.callDrawMouseoverTooltip(new DrawMouseoverTooltipArgs(args.drawObjectDM, args.mouseX, args.mouseY)); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java similarity index 64% rename from common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java rename to common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java index 66a688d6e..fbe9110fd 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/test/ExampleScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java @@ -1,10 +1,9 @@ -package ml.pkom.mcpitanlibarch.test; +package net.pitan76.mcpitanlib.test; +import ml.pkom.mcpitanlibarch.api.entity.Player; import ml.pkom.mcpitanlibarch.api.gui.SimpleScreenHandler; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; -import net.minecraft.screen.ScreenHandler; public class ExampleScreenHandler extends SimpleScreenHandler { @@ -14,12 +13,12 @@ public ExampleScreenHandler(int i, PlayerInventory playerInventory) { } @Override - public ItemStack quickMoveOverride(PlayerEntity player, int slot) { + public ItemStack quickMoveOverride(Player player, int slot) { return null; } @Override - public boolean canUse(PlayerEntity player) { + public boolean canUse(Player player) { return true; } } diff --git a/common/src/main/resources/mcpitanlibarch-common.mixins.json b/common/src/main/resources/mcpitanlibarch-common.mixins.json index ddaf49d8a..398165fe8 100644 --- a/common/src/main/resources/mcpitanlibarch-common.mixins.json +++ b/common/src/main/resources/mcpitanlibarch-common.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "ml.pkom.mcpitanlibarch.mixin", + "package": "net.pitan76.mcpitanlib.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ "ItemMixin", diff --git a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/MCPitanLibFabric.java similarity index 63% rename from fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java rename to fabric/src/main/java/net/pitan76/mcpitanlib/fabric/MCPitanLibFabric.java index 7351eef18..42ac02f7c 100644 --- a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/MCPitanLibarchFabric.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/MCPitanLibFabric.java @@ -1,12 +1,12 @@ -package ml.pkom.mcpitanlibarch.fabric; +package net.pitan76.mcpitanlib.fabric; -import ml.pkom.mcpitanlibarch.MCPitanLibarch; +import net.pitan76.mcpitanlib.MCPitanLib; import net.fabricmc.api.ModInitializer; -public class MCPitanLibarchFabric implements ModInitializer { +public class MCPitanLibFabric implements ModInitializer { @Override public void onInitialize() { - MCPitanLibarch.init(); + MCPitanLib.init(); /* if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) if (FabricLoader.getInstance().isDevelopmentEnvironment()) diff --git a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java similarity index 96% rename from fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java rename to fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java index dd7f6e646..f95115ce0 100644 --- a/fabric/src/main/java/ml/pkom/mcpitanlibarch/fabric/mixin/RecipeMixin.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.fabric.mixin; +package net.pitan76.mcpitanlib.fabric.mixin; import ml.pkom.mcpitanlibarch.api.item.FixedRecipeRemainderItem; import net.minecraft.inventory.Inventory; diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index ea2201fc3..0bbcd3158 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -22,7 +22,7 @@ "environment": "*", "entrypoints": { "main": [ - "ml.pkom.mcpitanlibarch.fabric.MCPitanLibarchFabric" + "net.pitan76.mcpitanlib.fabric.MCPitanLibFabric" ] }, "mixins": [ diff --git a/fabric/src/main/resources/mcpitanlibarch.mixins.json b/fabric/src/main/resources/mcpitanlibarch.mixins.json index 864f03833..0a36c5829 100644 --- a/fabric/src/main/resources/mcpitanlibarch.mixins.json +++ b/fabric/src/main/resources/mcpitanlibarch.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "ml.pkom.mcpitanlibarch.fabric.mixin", + "package": "net.pitan76.mcpitanlib.fabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ "RecipeMixin" diff --git a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java b/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java deleted file mode 100644 index be5f0e929..000000000 --- a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/MCPitanLibarchForge.java +++ /dev/null @@ -1,25 +0,0 @@ -package ml.pkom.mcpitanlibarch.forge; - -import dev.architectury.platform.Platform; -import dev.architectury.platform.forge.EventBuses; -import ml.pkom.mcpitanlibarch.MCPitanLibarch; -import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; -import ml.pkom.mcpitanlibarch.forge.client.MCPitanLibarchForgeClient; -import ml.pkom.mcpitanlibarch.test.ExampleMod; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; - -@Mod(MCPitanLibarch.MOD_ID) -public class MCPitanLibarchForge { - public MCPitanLibarchForge() { - // Submit our event bus to let architectury register our content on the right time - EventBuses.registerModEventBus(MCPitanLibarch.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); - //if (PlatformUtil.isDevelopmentEnvironment()) - // EventBuses.registerModEventBus(ExampleMod.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); - - MCPitanLibarch.init(); - - if (Platform.getEnv().isClient()) - FMLJavaModLoadingContext.get().getModEventBus().addListener(MCPitanLibarchForgeClient::clientInit); - } -} \ No newline at end of file diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/forge/MCPitanLibForge.java b/forge/src/main/java/net/pitan76/mcpitanlib/forge/MCPitanLibForge.java new file mode 100644 index 000000000..3347f2852 --- /dev/null +++ b/forge/src/main/java/net/pitan76/mcpitanlib/forge/MCPitanLibForge.java @@ -0,0 +1,14 @@ +package net.pitan76.mcpitanlib.forge; + +import dev.architectury.platform.forge.EventBuses; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.pitan76.mcpitanlib.MCPitanLib; + +@Mod(MCPitanLib.MOD_ID) +public class MCPitanLibForge { + public MCPitanLibForge() { + EventBuses.registerModEventBus(MCPitanLib.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); + MCPitanLib.init(); + } +} \ No newline at end of file diff --git a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java b/forge/src/main/java/net/pitan76/mcpitanlib/forge/client/MCPitanLibForgeClient.java similarity index 73% rename from forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java rename to forge/src/main/java/net/pitan76/mcpitanlib/forge/client/MCPitanLibForgeClient.java index 7d550a485..90e629464 100644 --- a/forge/src/main/java/ml/pkom/mcpitanlibarch/forge/client/MCPitanLibarchForgeClient.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/forge/client/MCPitanLibForgeClient.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.forge.client; +package net.pitan76.mcpitanlib.forge.client; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -public class MCPitanLibarchForgeClient { +public class MCPitanLibForgeClient { public static void clientInit(FMLClientSetupEvent event) { //if (PlatformUtil.isDevelopmentEnvironment()) // ExampleModClient.init(); diff --git a/forge/src/main/resources/mcpitanlibarch.mixins.json b/forge/src/main/resources/mcpitanlibarch.mixins.json index f00451cf3..df01c3ab5 100644 --- a/forge/src/main/resources/mcpitanlibarch.mixins.json +++ b/forge/src/main/resources/mcpitanlibarch.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "ml.pkom.mcpitanlibarch.forge.mixin", + "package": "net.pitan76.mcpitanlib.forge.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ ], diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta index 547096ba2..03e89dcaa 100644 --- a/forge/src/main/resources/pack.mcmeta +++ b/forge/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { - "description": "mcpitanlibarch resources", + "description": "mcpitanlib resources", "pack_format": 8, "forge:resource_pack_format": 8, "forge:data_pack_format": 9 diff --git a/info.properties b/info.properties index d5bb33a36..657a63697 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlibarch -mod_version=1.9.3 +mod_version=1.9.4 maven_group=ml.pkom \ No newline at end of file From f780c2c4d740859dad3929ff93ffe385508f494f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Tue, 13 Feb 2024 11:04:49 +0900 Subject: [PATCH 224/617] rename mcpitanlib fix registry --- .../ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java | 4 ++-- info.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index bc0611181..8a08c6fd9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -71,11 +71,11 @@ public RegistryEvent registerSoundEvent(Identifier id, Supplier registerSoundEvent(Identifier id) { - return registerSoundEvent(id, () -> new SoundEvent(id)); + return new RegistryEvent<>(compatRegistry.registerSoundEvent(id).supplier); } public RegistryEvent registerSoundEvent(Identifier id, float distanceToTravel) { - return registerSoundEvent(id, () -> new SoundEvent(id)); + return new RegistryEvent<>(compatRegistry.registerSoundEvent(id, distanceToTravel).supplier); } public RegistryEvent registerFluid(Identifier id, Supplier supplier) { diff --git a/info.properties b/info.properties index 657a63697..cf45ee7b2 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ -archives_base_name=mcpitanlibarch -mod_version=1.9.4 +archives_base_name=mcpitanlib +mod_version=1.9.5 maven_group=ml.pkom \ No newline at end of file From c52fcceac4f7b4bb3379487f2722de04fb5f1e78 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 13 Feb 2024 14:32:34 +0900 Subject: [PATCH 225/617] maven_group=net.pitan76 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index cf45ee7b2..fa09ea47a 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib mod_version=1.9.5 -maven_group=ml.pkom \ No newline at end of file +maven_group=net.pitan76 \ No newline at end of file From 735d011a4a1f929b61bc685b1a5079182613a2c0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Wed, 14 Feb 2024 21:29:49 +0900 Subject: [PATCH 226/617] add ItemUtil API --- .../pkom/mcpitanlibarch/api/tag/TagKey.java | 8 +- .../mcpitanlibarch/api/util/ItemUtil.java | 40 ++-- .../api/registry/CompatRegistry.java | 8 +- .../pitan76/mcpitanlib/api/util/ItemUtil.java | 215 ++++++++++++++++++ .../mcpitanlib/api/util/v1/ItemUtilV1.java | 81 +++++++ .../mcpitanlib/api/util/v2/ItemUtilV2.java | 73 ++++++ .../pitan76/mcpitanlib/test/ExampleMod.java | 6 +- 7 files changed, 398 insertions(+), 33 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java index 6cb475f44..4bba04e70 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java @@ -1,9 +1,9 @@ package ml.pkom.mcpitanlibarch.api.tag; -import ml.pkom.mcpitanlibarch.api.util.BlockUtil; +import net.pitan76.mcpitanlib.api.util.v1.BlockUtilV1; import ml.pkom.mcpitanlibarch.api.util.EntityTypeUtil; import ml.pkom.mcpitanlibarch.api.util.FluidUtil; -import ml.pkom.mcpitanlibarch.api.util.ItemUtil; +import net.pitan76.mcpitanlib.api.util.v1.ItemUtilV1; import net.minecraft.block.Block; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; @@ -43,9 +43,9 @@ public enum Type { public boolean isOf(T value) { if (value instanceof Item) - return getTagKey() == net.minecraft.tag.TagKey.of(Registry.ITEM_KEY, ItemUtil.toID((Item) value)); + return getTagKey() == net.minecraft.tag.TagKey.of(Registry.ITEM_KEY, ItemUtilV1.toID((Item) value)); if (value instanceof Block) - return getTagKey() == net.minecraft.tag.TagKey.of(Registry.BLOCK_KEY, BlockUtil.toID((Block) value)); + return getTagKey() == net.minecraft.tag.TagKey.of(Registry.BLOCK_KEY, BlockUtilV1.toID((Block) value)); if (value instanceof Fluid) return getTagKey() == net.minecraft.tag.TagKey.of(Registry.FLUID_KEY, FluidUtil.toID((Fluid) value)); if (value instanceof EntityType) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java index fd306721e..cfd17e37c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java @@ -7,75 +7,71 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import java.util.ArrayList; import java.util.List; +@Deprecated public class ItemUtil { + private static net.pitan76.mcpitanlib.api.util.ItemUtil newItemUtil = new net.pitan76.mcpitanlib.api.util.ItemUtil(); + public static Item item(Identifier id) { - return Registry.ITEM.get(id); + return newItemUtil.item(id); } public static boolean isEqual(Item item, Item item2) { - return item == item2; + return newItemUtil.isEqual(item, item2); } public static boolean isOf(ItemStack stack, Item item) { - return stack.isOf(item); + return newItemUtil.isOf(stack, item); } public static boolean isIn(ItemStack stack, TagKey tagKey) { - return isIn(stack.getItem(), tagKey); + return newItemUtil.isIn(stack, tagKey); } public static boolean isIn(Item item, TagKey tagKey) { - if (item.getRegistryEntry().isIn(tagKey.getTagKey())) return true; - return tagKey.isOf(item); + return newItemUtil.isIn(item, tagKey); } public static boolean isExist(Identifier identifier) { - return Registry.ITEM.containsId(identifier); + return newItemUtil.isExist(identifier); } public static Identifier toID(Item item) { - return Registry.ITEM.getId(item); + return newItemUtil.toID(item); } public static Item fromId(Identifier identifier) { - return Registry.ITEM.get(identifier); + return newItemUtil.fromId(identifier); } @Deprecated public static BlockItem ofBlock(Block block, Item.Settings settings) { - return new BlockItem(block, settings); + return newItemUtil.ofBlock(block, settings); } public static BlockItem ofBlock(Block block, CompatibleItemSettings settings) { - return ofBlock(block, settings.build()); + return newItemUtil.ofBlock(block, settings); } @Deprecated public static Item of(Item.Settings settings) { - return new Item(settings); + return newItemUtil.of(settings); } public static Item of(CompatibleItemSettings settings) { - return of(settings.build()); + return newItemUtil.of(settings); } public static List getAllItems() { - List items = new ArrayList<>(); - for (Item item : Registry.ITEM) { - items.add(item); - } - return items; + return newItemUtil.getAllItems(); } public static int getRawId(Item item) { - return Registry.ITEM.getRawId(item); + return newItemUtil.getRawId(item); } public static Item fromIndex(int index) { - return Registry.ITEM.get(index); + return newItemUtil.fromIndex(index); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index 874d33ac7..c199523e1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -7,8 +7,8 @@ import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; -import ml.pkom.mcpitanlibarch.api.util.BlockUtil; -import ml.pkom.mcpitanlibarch.api.util.ItemUtil; +import net.pitan76.mcpitanlib.api.util.v1.BlockUtilV1; +import net.pitan76.mcpitanlib.api.util.v1.ItemUtilV1; import net.pitan76.mcpitanlib.core.registry.FuelRegistry; import net.pitan76.mcpitanlib.core.registry.MCPLRegistry; import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; @@ -42,14 +42,14 @@ public static CompatRegistry createRegistry(String MOD_ID) { } public RegistryResult registerItem(Identifier id, Supplier supplier) { - if (MCPitanLib.isItemBlackListed(id)) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); + if (MCPitanLib.isItemBlackListed(id)) supplier = () -> ItemUtilV1.of(CompatibleItemSettings.of()); RegistrySupplier registrySupplier = mcplr.registryItem(id, supplier); CreativeTabManager.register(id); return new RegistryResult<>(registrySupplier); } public RegistryResult registerBlock(Identifier id, Supplier supplier) { - if (MCPitanLib.isBlockBlackListed(id)) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); + if (MCPitanLib.isBlockBlackListed(id)) supplier = () -> BlockUtilV1.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); return new RegistryResult<>(mcplr.registryBlock(id, supplier)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java new file mode 100644 index 000000000..b7c2a5853 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java @@ -0,0 +1,215 @@ +package net.pitan76.mcpitanlib.api.util; + +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.v1.ItemUtilV1; +import net.pitan76.mcpitanlib.api.util.v2.ItemUtilV2; + +import java.util.List; + +public class ItemUtil { + + /** + * Get item from Identifier. + * @param id Identifier of the item. + * @return Item of the Identifier. + */ + public static Item item(Identifier id) { + return ItemUtilV1.item(id); + } + + /** + * Check if two items are equal. + * @param item Item to compare. + * @param item2 Item to compare. + * @return If two items are equal. + */ + public static boolean isEqual(Item item, Item item2) { + return ItemUtilV1.isEqual(item, item2); + } + + /** + * Check if the item is of the given item. + * @param stack ItemStack to check. + * @param item Item to check. + * @return If the item is of the given item. + */ + public static boolean isOf(ItemStack stack, Item item) { + return ItemUtilV1.isOf(stack, item); + } + + /** + * Check if the item is in the tag. (MCPitanLib TagKey) + * @param stack ItemStack to check. + * @param tagKey TagKey of the tag. + * @return If the item is in the tag. + */ + public static boolean isIn(ItemStack stack, TagKey tagKey) { + return ItemUtilV1.isIn(stack, tagKey); + } + + /** + * Check if the item is in the tag. (MCPitanLib TagKey) + * @param item Item to check. + * @param tagKey TagKey of the tag. + * @return If the item is in the tag. + */ + public static boolean isIn(Item item, TagKey tagKey) { + return ItemUtilV1.isIn(item, tagKey); + } + + /** + * Check if the item is existed. + * @param identifier Identifier of the item. + * @return If the item is existed. + */ + public static boolean isExist(Identifier identifier) { + return ItemUtilV1.isExist(identifier); + } + + /** + * Get Identifier from Item. + * @param item Item to get Identifier. + * @return Identifier of the Item. + */ + public static Identifier toID(Item item) { + return ItemUtilV1.toID(item); + } + + /** + * Get item from Identifier. + * @param identifier Identifier of the item. + * @return Item of the Identifier. + */ + public static Item fromId(Identifier identifier) { + return ItemUtilV1.fromId(identifier); + } + + /** + * Create BlockItem from Block and Item.Settings. + * @param block Block to create BlockItem. + * @param settings Item.Settings to create BlockItem. + * @return BlockItem created from Block and Item.Settings. + */ + @Deprecated + public static BlockItem ofBlock(Block block, Item.Settings settings) { + return ItemUtilV1.ofBlock(block, settings); + } + + /** + * Create BlockItem from Block and CompatibleItemSettings. + * @param block Block to create BlockItem. + * @param settings CompatibleItemSettings to create BlockItem. + * @return BlockItem created from Block and CompatibleItemSettings. + */ + public static BlockItem ofBlock(Block block, CompatibleItemSettings settings) { + return ItemUtilV1.ofBlock(block, settings); + } + + /** + * Create Item from Item.Settings. + * @param settings Item.Settings to create Item. + * @return Item created from Item.Settings. + */ + @Deprecated + public static Item of(Item.Settings settings) { + return ItemUtilV1.of(settings); + } + + /** + * Create Item from CompatibleItemSettings. + * @param settings CompatibleItemSettings to create Item. + * @return Item created from CompatibleItemSettings. + */ + public static Item of(CompatibleItemSettings settings) { + return ItemUtilV1.of(settings); + } + + /** + * Get all items. + * @return List of all items. + */ + public static List getAllItems() { + return ItemUtilV1.getAllItems(); + } + + /** + * Get raw id of the item. + * @param item Item to get raw id. + * @return Raw id of the item. + */ + public static int getRawId(Item item) { + return ItemUtilV1.getRawId(item); + } + + /** + * Get item from index. + * @param index Index of the item. + * @return Item of the index. + */ + public static Item fromIndex(int index) { + return ItemUtilV1.fromIndex(index); + } + + /** + * Get all items in the tag. (MCPitanLib TagKey) + * @param tagKey TagKey of the tag. + * @return List of items in the tag. + */ + public static List getItems(TagKey tagKey) { + return ItemUtilV2.getItems(tagKey); + } + + /** + * Get given the list of items in the tag. (MCPitanLib TagKey) + * @param tagKey TagKey of the tag. + * @param items List of items to search. + * @return List of items in the tag. + */ + public static List getItems(TagKey tagKey, List items) { + return ItemUtilV2.getItems(tagKey, items); + } + + /** + * Get all items in the tag. + * @param identifier Identifier of the tag. + * @return List of items in the tag. + */ + public static List getItems(Identifier identifier) { + return ItemUtilV2.getItems(identifier); + } + + /** + * Get given the list of items in the tag. + * @param identifier Identifier of the tag. + * @param items List of items to search. + * @return List of items in the tag. + */ + public static List getItems(Identifier identifier, List items) { + return ItemUtilV2.getItems(identifier, items); + } + + /** + * Get all items in the tag. + * @param id String of the tag. + * @return List of items in the tag. + */ + public static List getItems(String id) { + return ItemUtilV2.getItems(id); + } + + /** + * Get given the list of items in the tag. + * @param id String of the tag. + * @param items List of items to search. + * @return List of items in the tag. + */ + public static List getItems(String id, List items) { + return ItemUtilV2.getItems(id, items); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java new file mode 100644 index 000000000..3bad7b1a7 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java @@ -0,0 +1,81 @@ +package net.pitan76.mcpitanlib.api.util.v1; + +import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; +import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.registry.Registries; +import net.minecraft.util.Identifier; + +import java.util.ArrayList; +import java.util.List; + +public class ItemUtilV1 { + public static Item item(Identifier id) { + return Registries.ITEM.get(id); + } + + public static boolean isEqual(Item item, Item item2) { + return item == item2; + } + + public static boolean isOf(ItemStack stack, Item item) { + return stack.isOf(item); + } + + public static boolean isIn(ItemStack stack, TagKey tagKey) { + return isIn(stack.getItem(), tagKey); + } + + public static boolean isIn(Item item, TagKey tagKey) { + if (item.getRegistryEntry().isIn(tagKey.getTagKey())) return true; + return tagKey.isOf(item); + } + + public static boolean isExist(Identifier identifier) { + return Registries.ITEM.containsId(identifier); + } + public static Identifier toID(Item item) { + return Registries.ITEM.getId(item); + } + + public static Item fromId(Identifier identifier) { + return Registries.ITEM.get(identifier); + } + + @Deprecated + public static BlockItem ofBlock(Block block, Item.Settings settings) { + return new BlockItem(block, settings); + } + + public static BlockItem ofBlock(Block block, CompatibleItemSettings settings) { + return ofBlock(block, settings.build()); + } + + @Deprecated + public static Item of(Item.Settings settings) { + return new Item(settings); + } + + public static Item of(CompatibleItemSettings settings) { + return of(settings.build()); + } + + public static List getAllItems() { + List items = new ArrayList<>(); + for (Item item : Registries.ITEM) { + items.add(item); + } + return items; + } + + public static int getRawId(Item item) { + return Registries.ITEM.getRawId(item); + } + + public static Item fromIndex(int index) { + return Registries.ITEM.get(index); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java new file mode 100644 index 000000000..f98d494fd --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java @@ -0,0 +1,73 @@ +package net.pitan76.mcpitanlib.api.util.v2; + +import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.minecraft.item.Item; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.ItemUtil; + +import java.util.ArrayList; +import java.util.List; + +public class ItemUtilV2 { + /** + * Get all items in the tag. + * @param tagKey TagKey of the tag. + * @return List of items in the tag. + */ + public static List getItems(TagKey tagKey) { + return getItems(tagKey, ItemUtil.getAllItems()); + } + + /** + * Get given the list of items in the tag. + * @param tagKey TagKey of the tag. + * @param items List of items to search. + * @return List of items in the tag. + */ + public static List getItems(TagKey tagKey, List items) { + List result = new ArrayList<>(); + for (Item item : items) { + if (!ItemUtil.isIn(item, tagKey)) continue; + result.add(item); + } + return result; + } + + /** + * Get all items in the tag. + * @param identifier Identifier of the tag. + * @return List of items in the tag. + */ + public static List getItems(Identifier identifier) { + return getItems((TagKey) TagKey.create(TagKey.Type.ITEM, identifier)); + } + + /** + * Get given the list of items in the tag. + * @param identifier Identifier of the tag. + * @param items List of items to search. + * @return List of items in the tag. + */ + public static List getItems(Identifier identifier, List items) { + return getItems((TagKey) TagKey.create(TagKey.Type.ITEM, identifier), items); + } + + /** + * Get all items in the tag. + * @param id String of the tag. + * @return List of items in the tag. + */ + public static List getItems(String id) { + return getItems(new Identifier(id)); + } + + /** + * Get given the list of items in the tag. + * @param id String of the tag. + * @param items List of items to search. + * @return List of items in the tag. + */ + public static List getItems(String id, List items) { + return getItems(new Identifier(id), items); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java index 94f6b9bb5..b3d721e72 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java @@ -9,7 +9,7 @@ import ml.pkom.mcpitanlibarch.api.item.DefaultItemGroups; import ml.pkom.mcpitanlibarch.api.item.ExtendItem; import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; -import ml.pkom.mcpitanlibarch.api.util.ItemUtil; +import net.pitan76.mcpitanlib.api.util.v1.ItemUtilV1; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.screen.ScreenHandlerType; @@ -46,12 +46,12 @@ public static Identifier id(String id) { public static void init() { EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new ExtendItem(new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_item")))); EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new ExtendBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE))); - EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> ItemUtil.ofBlock(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_block")))); + EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> ItemUtilV1.ofBlock(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_block")))); EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_item")))); EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE).build())); - EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> ItemUtil.ofBlock(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_block")))); + EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> ItemUtilV1.ofBlock(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_block")))); registry.allRegister(); From 67e3daadc38362801868525e1b900ebc96a70138 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 14 Feb 2024 21:29:59 +0900 Subject: [PATCH 227/617] move BlockUtil --- .../pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename common/src/main/java/{ml/pkom/mcpitanlibarch/api/util/BlockUtil.java => net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java} (96%) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java index a09daf199..c07c111cc 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util.v1; import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; import ml.pkom.mcpitanlibarch.api.tag.MineableToolTags; @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.List; -public class BlockUtil { +public class BlockUtilV1 { public static Block block(Identifier id) { return Registry.BLOCK.get(id); } From b05bba5245296a4b738490d38f746d3671176f89 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 14 Feb 2024 21:45:18 +0900 Subject: [PATCH 228/617] add new BlockUtil api --- .../mcpitanlibarch/api/util/BlockUtil.java | 64 ++++++ .../mcpitanlib/api/util/BlockUtil.java | 201 ++++++++++++++++++ .../mcpitanlib/api/util/v1/BlockUtilV1.java | 1 - .../mcpitanlib/api/util/v2/BlockUtilV2.java | 94 ++++++++ 4 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java new file mode 100644 index 000000000..0ec294319 --- /dev/null +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -0,0 +1,64 @@ +package ml.pkom.mcpitanlibarch.api.util; + +import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; +import ml.pkom.mcpitanlibarch.api.tag.MineableToolTags; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.registry.Registries; +import net.minecraft.util.Identifier; + +import java.util.List; + +@Deprecated +public class BlockUtil { + private static net.pitan76.mcpitanlib.api.util.BlockUtil newBlockUtil = new net.pitan76.mcpitanlib.api.util.BlockUtil(); + + public static Block block(Identifier id) { + return Registries.BLOCK.get(id); + } + + public static AbstractBlock.Settings breakByTool(AbstractBlock.Settings settings, MineableToolTags toolTags, int level) { + return newBlockUtil.breakByTool(settings, toolTags, level); + } + + public static AbstractBlock.Settings dropsNothing(AbstractBlock.Settings settings) { + return newBlockUtil.dropsNothing(settings); + } + + public static AbstractBlock.Settings requiresTool(AbstractBlock.Settings settings) { + return newBlockUtil.requiresTool(settings); + } + + public static boolean isExist(Identifier identifier) { + return newBlockUtil.isExist(identifier); + } + + public static Identifier toID(Block block) { + return newBlockUtil.toID(block); + } + + public static Block fromId(Identifier identifier) { + return newBlockUtil.fromId(identifier); + } + + public static List getAllBlocks() { + return newBlockUtil.getAllBlocks(); + } + + @Deprecated + public static Block of(AbstractBlock.Settings settings) { + return newBlockUtil.of(settings); + } + + public static Block of(CompatibleBlockSettings settings) { + return newBlockUtil.of(settings); + } + + public static int getRawId(Block block) { + return newBlockUtil.getRawId(block); + } + + public static Block fromIndex(int index) { + return newBlockUtil.fromIndex(index); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java new file mode 100644 index 000000000..7bee52266 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java @@ -0,0 +1,201 @@ +package net.pitan76.mcpitanlib.api.util; + +import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; +import ml.pkom.mcpitanlibarch.api.tag.MineableToolTags; +import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.registry.Registries; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.v1.BlockUtilV1; +import net.pitan76.mcpitanlib.api.util.v2.BlockUtilV2; + +import java.util.List; + +public class BlockUtil { + /** + * Get block from Identifier. + * @param id Identifier of the block. + * @return Block of the Identifier. + */ + public static Block block(Identifier id) { + return Registries.BLOCK.get(id); + } + + /** + * Check if two blocks are equal. + * @param block Block to compare. + * @param block2 Block to compare. + * @return If two blocks are equal. + */ + public static boolean isEqual(Block block, Block block2) { + return BlockUtilV2.isEqual(block, block2); + } + + /** + * Check if the block is in the tag. (MCPitanLib TagKey) + * @param block Block to check. + * @param tagKey TagKey of the tag. + * @return If the block is in the tag. + */ + public static boolean isIn(Block block, TagKey tagKey) { + return BlockUtilV2.isIn(block, tagKey); + } + + /** + * set break tool tag and level to block + * @param settings Block settings + * @param toolTags Tool tags + * @param level Level + * @return Block settings + */ + public static AbstractBlock.Settings breakByTool(AbstractBlock.Settings settings, MineableToolTags toolTags, int level) { + return BlockUtilV1.breakByTool(settings, toolTags, level); + } + + /** + * not drop anything when block is broken + * @param settings Block settings + * @return Block settings + */ + public static AbstractBlock.Settings dropsNothing(AbstractBlock.Settings settings) { + return BlockUtilV1.dropsNothing(settings); + } + /** + * block breaking requires any tool + * @param settings Block settings + * @return Block settings + */ + public static AbstractBlock.Settings requiresTool(AbstractBlock.Settings settings) { + return BlockUtilV1.requiresTool(settings); + } + + /** + * Check if the block is existed. + * @param identifier Identifier of the block. + * @return If the block is existed. + */ + public static boolean isExist(Identifier identifier) { + return BlockUtilV1.isExist(identifier); + } + + /** + * Get Identifier from block. + * @param block Block to get Identifier. + * @return Identifier of the block. + */ + public static Identifier toID(Block block) { + return BlockUtilV1.toID(block); + } + + /** + * Get block from Identifier. + * @param identifier Identifier of the block. + * @return Block of the Identifier. + */ + public static Block fromId(Identifier identifier) { + return BlockUtilV1.fromId(identifier); + } + + /** + * Get all blocks. + * @return List of all blocks. + */ + public static List getAllBlocks() { + return BlockUtilV1.getAllBlocks(); + } + + /** + * Create Block from Block.Settings. + * @param settings Block.Settings to create Block. + * @return Block created from Block.Settings. + */ + @Deprecated + public static Block of(AbstractBlock.Settings settings) { + return BlockUtilV1.of(settings); + } + + /** + * Create Block from CompatibleBlockSettings. + * @param settings CompatibleBlockSettings to create Block. + * @return Block created from CompatibleBlockSettings. + */ + public static Block of(CompatibleBlockSettings settings) { + return BlockUtilV1.of(settings); + } + + /** + * Get raw id of the block. + * @param block Block to get raw id. + * @return Raw id of the block. + */ + public static int getRawId(Block block) { + return BlockUtilV1.getRawId(block); + } + + /** + * Get block from raw id. + * @param index Raw id of the block. + * @return Block from raw id. + */ + public static Block fromIndex(int index) { + return BlockUtilV1.fromIndex(index); + } + + /** + * Get all blocks in the tag. (MCPitanLib TagKey) + * @param tagKey TagKey of the tag. + * @return List of blocks in the tag. + */ + public static List getBlocks(TagKey tagKey) { + return BlockUtilV2.getBlocks(tagKey); + } + + /** + * Get given the list of blocks in the tag. (MCPitanLib TagKey) + * @param tagKey TagKey of the tag. + * @param blocks List of blocks to search. + * @return List of blocks in the tag. + */ + public static List getBlocks(TagKey tagKey, List blocks) { + return BlockUtilV2.getBlocks(tagKey, blocks); + } + + /** + * Get all blocks in the tag. + * @param identifier Identifier of the tag. + * @return List of blocks in the tag. + */ + public static List getBlocks(Identifier identifier) { + return BlockUtilV2.getBlocks(identifier); + } + + /** + * Get given the list of blocks in the tag. + * @param identifier Identifier of the tag. + * @param blocks List of blocks to search. + * @return List of blocks in the tag. + */ + public static List getBlocks(Identifier identifier, List blocks) { + return BlockUtilV2.getBlocks(identifier, blocks); + } + + /** + * Get all blocks in the tag. + * @param id String of the tag. + * @return List of blocks in the tag. + */ + public static List getBlocks(String id) { + return BlockUtilV2.getBlocks(id); + } + + /** + * Get given the list of blocks in the tag. + * @param id String of the tag. + * @param blocks List of blocks to search. + * @return List of blocks in the tag. + */ + public static List getBlocks(String id, List blocks) { + return BlockUtilV2.getBlocks(id, blocks); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java index c07c111cc..1c43533c1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java @@ -23,7 +23,6 @@ public static Block block(Identifier id) { * @return */ public static AbstractBlock.Settings breakByTool(AbstractBlock.Settings settings, MineableToolTags toolTags, int level) { - return settings; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java new file mode 100644 index 000000000..a30f0d1d3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java @@ -0,0 +1,94 @@ +package net.pitan76.mcpitanlib.api.util.v2; + +import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.minecraft.block.Block; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.BlockUtil; + +import java.util.ArrayList; +import java.util.List; + +public class BlockUtilV2 { + /** + * Check if the block is in the tag. (MCPitanLib TagKey) + * @param block Block to check. + * @param tagKey TagKey of the tag. + * @return If the block is in the tag. + */ + public static boolean isIn(Block block, TagKey tagKey) { + if (block.getRegistryEntry().isIn(tagKey.getTagKey())) return true; + return tagKey.isOf(block); + } + + /** + * Check if two blocks are equal. + * @param block Block to compare. + * @param block2 Block to compare. + * @return If two blocks are equal. + */ + public static boolean isEqual(Block block, Block block2) { + return block == block2; + } + + /** + * Get all blocks in the tag. + * @param tagKey TagKey of the tag. + * @return List of blocks in the tag. + */ + public static List getBlocks(TagKey tagKey) { + return getBlocks(tagKey, BlockUtil.getAllBlocks()); + } + /** + * Get given the list of blocks in the tag. + * @param tagKey TagKey of the tag. + * @param blocks List of blocks to search. + * @return List of blocks in the tag. + */ + public static List getBlocks(TagKey tagKey, List blocks) { + List result = new ArrayList<>(); + for (Block block : blocks) { + if (!BlockUtil.isIn(block, tagKey)) continue; + result.add(block); + } + return result; + } + + /** + * Get all blocks in the tag. + * @param identifier Identifier of the tag. + * @return List of blocks in the tag. + */ + public static List getBlocks(Identifier identifier) { + return getBlocks((TagKey) TagKey.create(TagKey.Type.BLOCK, identifier)); + } + + /** + * Get given the list of blocks in the tag. + * @param identifier Identifier of the tag. + * @param blocks List of blocks to search. + * @return List of blocks in the tag. + */ + public static List getBlocks(Identifier identifier, List blocks) { + return getBlocks((TagKey) TagKey.create(TagKey.Type.BLOCK, identifier), blocks); + } + + /** + * Get all blocks in the tag. + * @param id String of the tag. + * @return List of blocks in the tag. + */ + public static List getBlocks(String id) { + return getBlocks(new Identifier(id)); + } + + /** + * Get given the list of blocks in the tag. + * @param id String of the tag. + * @param blocks List of blocks to search. + * @return List of blocks in the tag. + */ + + public static List getBlocks(String id, List blocks) { + return getBlocks(new Identifier(id), blocks); + } +} From 3196c69ec7c7afeef5ec6849b07ed4260c0b0505 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Wed, 14 Feb 2024 21:56:14 +0900 Subject: [PATCH 229/617] add APIs --- .../mcpitanlibarch/api/block/ExtendBlock.java | 2 +- .../api/event/block/BlockUseEvent.java | 17 +++++++ .../api/event/block/PickStackEvent.java | 20 +++++++++ .../api/event/block/StateReplacedEvent.java | 45 +++++++++++++++++++ info.properties | 2 +- 5 files changed, 84 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java index 19a74be58..1cb478be3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java @@ -2,7 +2,6 @@ import ml.pkom.mcpitanlibarch.api.event.block.*; import ml.pkom.mcpitanlibarch.api.event.block.result.BlockBreakResult; -import ml.pkom.mcpitanlibarch.api.util.TextUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; @@ -25,6 +24,7 @@ import java.util.Random; import net.minecraft.world.WorldView; +import net.pitan76.mcpitanlib.api.util.TextUtil; import org.jetbrains.annotations.Nullable; public class ExtendBlock extends Block { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java index 97efd637a..e681ed49a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java @@ -3,6 +3,7 @@ import ml.pkom.mcpitanlibarch.api.entity.Player; import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; @@ -77,4 +78,20 @@ public ActionResult pass() { public ActionResult consume() { return ActionResult.CONSUME; } + + /** + * check if the block has a block entity + * @return true if the block has a block entity + */ + public boolean hasBlockEntity() { + return world.getBlockEntity(pos) != null; + } + + /** + * get the block entity of the block + * @return the block entity of the block + */ + public BlockEntity getBlockEntity() { + return world.getBlockEntity(pos); + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java index 7b569071c..4e26da3b1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java @@ -1,6 +1,7 @@ package ml.pkom.mcpitanlibarch.api.event.block; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; import net.minecraft.world.WorldView; @@ -41,4 +42,23 @@ public BlockView getBlockView() { public WorldView getWorldView() { return worldView; } + + /** + * check if the block has a block entity + * @return boolean + */ + public boolean hasBlockEntity() { + return getBlockEntity() != null; + } + + /** + * @return BlockEntity + */ + public BlockEntity getBlockEntity() { + if (blockView != null) + return blockView.getBlockEntity(pos); + if (worldView != null) + return worldView.getBlockEntity(pos); + return null; + } } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java index 77a0d2efc..3a4aa68ff 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java @@ -2,6 +2,9 @@ import ml.pkom.mcpitanlibarch.api.event.BaseEvent; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.util.ItemScatterer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -44,4 +47,46 @@ public boolean isMoved() { public boolean isClient() { return world.isClient(); } + + /** + * check if the block is the same state + * @return boolean + */ + public boolean isSameState() { + return state.isOf(newState.getBlock()); + } + + /** + * check if the block has a block entity + * @return BlockEntity + */ + public boolean hasBlockEntity() { + return world.getBlockEntity(pos) != null; + } + + /** + * get the block entity + * @return BlockEntity + */ + public BlockEntity getBlockEntity() { + return world.getBlockEntity(pos); + } + + /** + * spawn the drops in the container + */ + public void spawnDropsInContainer() { + BlockEntity blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof Inventory) { + Inventory inventory = (Inventory) blockEntity; + ItemScatterer.spawn(world, pos, inventory); + } + } + + /** + * update the comparators + */ + public void updateComparators() { + world.updateComparators(pos, state.getBlock()); + } } diff --git a/info.properties b/info.properties index fa09ea47a..9bad58f41 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=1.9.5 +mod_version=1.9.6 maven_group=net.pitan76 \ No newline at end of file From 93fe3000f129524e64bd6db1991fcd7a4c9c9eee Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Wed, 14 Feb 2024 22:07:47 +0900 Subject: [PATCH 230/617] use new api --- .../pkom/mcpitanlibarch/api/item/CreativeTabManager.java | 1 + .../main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java | 8 ++++---- .../pitan76/mcpitanlib/api/registry/CompatRegistry.java | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java index f7fb2587f..09ac1f7fb 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java @@ -4,6 +4,7 @@ import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.ItemUtil; import net.minecraft.util.collection.DefaultedList; import java.util.ArrayList; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java index 4bba04e70..94cd851f8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java @@ -1,9 +1,7 @@ package ml.pkom.mcpitanlibarch.api.tag; -import net.pitan76.mcpitanlib.api.util.v1.BlockUtilV1; import ml.pkom.mcpitanlibarch.api.util.EntityTypeUtil; import ml.pkom.mcpitanlibarch.api.util.FluidUtil; -import net.pitan76.mcpitanlib.api.util.v1.ItemUtilV1; import net.minecraft.block.Block; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; @@ -11,6 +9,8 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; +import net.pitan76.mcpitanlib.api.util.BlockUtil; +import net.pitan76.mcpitanlib.api.util.ItemUtil; public class TagKey { private final net.minecraft.tag.TagKey tagKey; @@ -43,9 +43,9 @@ public enum Type { public boolean isOf(T value) { if (value instanceof Item) - return getTagKey() == net.minecraft.tag.TagKey.of(Registry.ITEM_KEY, ItemUtilV1.toID((Item) value)); + return getTagKey() == net.minecraft.tag.TagKey.of(Registry.ITEM_KEY, ItemUtil.toID((Item) value)); if (value instanceof Block) - return getTagKey() == net.minecraft.tag.TagKey.of(Registry.BLOCK_KEY, BlockUtilV1.toID((Block) value)); + return getTagKey() == net.minecraft.tag.TagKey.of(Registry.BLOCK_KEY, BlockUtil.toID((Block) value)); if (value instanceof Fluid) return getTagKey() == net.minecraft.tag.TagKey.of(Registry.FLUID_KEY, FluidUtil.toID((Fluid) value)); if (value instanceof EntityType) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index c199523e1..7a5b80f8f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -7,8 +7,8 @@ import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; -import net.pitan76.mcpitanlib.api.util.v1.BlockUtilV1; -import net.pitan76.mcpitanlib.api.util.v1.ItemUtilV1; +import net.pitan76.mcpitanlib.api.util.BlockUtil; +import net.pitan76.mcpitanlib.api.util.ItemUtil; import net.pitan76.mcpitanlib.core.registry.FuelRegistry; import net.pitan76.mcpitanlib.core.registry.MCPLRegistry; import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; @@ -42,14 +42,14 @@ public static CompatRegistry createRegistry(String MOD_ID) { } public RegistryResult registerItem(Identifier id, Supplier supplier) { - if (MCPitanLib.isItemBlackListed(id)) supplier = () -> ItemUtilV1.of(CompatibleItemSettings.of()); + if (MCPitanLib.isItemBlackListed(id)) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); RegistrySupplier registrySupplier = mcplr.registryItem(id, supplier); CreativeTabManager.register(id); return new RegistryResult<>(registrySupplier); } public RegistryResult registerBlock(Identifier id, Supplier supplier) { - if (MCPitanLib.isBlockBlackListed(id)) supplier = () -> BlockUtilV1.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); + if (MCPitanLib.isBlockBlackListed(id)) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); return new RegistryResult<>(mcplr.registryBlock(id, supplier)); } From e6f0351ba7179bbc696d07c0c77f00fcb02a1a4f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 14 Feb 2024 22:13:48 +0900 Subject: [PATCH 231/617] b --- .../main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java index 0ec294319..d850d1cae 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java @@ -4,7 +4,6 @@ import ml.pkom.mcpitanlibarch.api.tag.MineableToolTags; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; -import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; import java.util.List; @@ -14,7 +13,7 @@ public class BlockUtil { private static net.pitan76.mcpitanlib.api.util.BlockUtil newBlockUtil = new net.pitan76.mcpitanlib.api.util.BlockUtil(); public static Block block(Identifier id) { - return Registries.BLOCK.get(id); + return newBlockUtil.block(id); } public static AbstractBlock.Settings breakByTool(AbstractBlock.Settings settings, MineableToolTags toolTags, int level) { From 0c1beb6fc7838ddf0faa0a38c2f2b477515f3eb0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 14 Feb 2024 22:17:53 +0900 Subject: [PATCH 232/617] b --- .../main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java index 7bee52266..300abe170 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java @@ -5,7 +5,6 @@ import ml.pkom.mcpitanlibarch.api.tag.TagKey; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; -import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.util.v1.BlockUtilV1; import net.pitan76.mcpitanlib.api.util.v2.BlockUtilV2; @@ -19,7 +18,7 @@ public class BlockUtil { * @return Block of the Identifier. */ public static Block block(Identifier id) { - return Registries.BLOCK.get(id); + return BlockUtilV1.block(id); } /** From a5c74ba26ff4d36257bd77161af5ad45e2d3d828 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 14 Feb 2024 22:26:44 +0900 Subject: [PATCH 233/617] 1182 --- .../api/item/CreativeTabManager.java | 1 - .../mcpitanlib/api/util/v1/ItemUtilV1.java | 16 ++++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java index 09ac1f7fb..00935c38b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java @@ -1,6 +1,5 @@ package ml.pkom.mcpitanlibarch.api.item; -import ml.pkom.mcpitanlibarch.api.util.ItemUtil; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java index 3bad7b1a7..2711c74c9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java @@ -6,15 +6,15 @@ import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import java.util.ArrayList; import java.util.List; public class ItemUtilV1 { public static Item item(Identifier id) { - return Registries.ITEM.get(id); + return Registry.ITEM.get(id); } public static boolean isEqual(Item item, Item item2) { @@ -35,14 +35,14 @@ public static boolean isIn(Item item, TagKey tagKey) { } public static boolean isExist(Identifier identifier) { - return Registries.ITEM.containsId(identifier); + return Registry.ITEM.containsId(identifier); } public static Identifier toID(Item item) { - return Registries.ITEM.getId(item); + return Registry.ITEM.getId(item); } public static Item fromId(Identifier identifier) { - return Registries.ITEM.get(identifier); + return Registry.ITEM.get(identifier); } @Deprecated @@ -65,17 +65,17 @@ public static Item of(CompatibleItemSettings settings) { public static List getAllItems() { List items = new ArrayList<>(); - for (Item item : Registries.ITEM) { + for (Item item : Registry.ITEM) { items.add(item); } return items; } public static int getRawId(Item item) { - return Registries.ITEM.getRawId(item); + return Registry.ITEM.getRawId(item); } public static Item fromIndex(int index) { - return Registries.ITEM.get(index); + return Registry.ITEM.get(index); } } From e7aa5ce9abb222f8fe1566667698044384c8fab4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Wed, 14 Feb 2024 22:53:55 +0900 Subject: [PATCH 234/617] fix apis --- .../java/net/pitan76/mcpitanlib/test/ExampleMod.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java index b3d721e72..7e5e001b4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java @@ -8,13 +8,13 @@ import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; import ml.pkom.mcpitanlibarch.api.item.DefaultItemGroups; import ml.pkom.mcpitanlibarch.api.item.ExtendItem; -import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; -import net.pitan76.mcpitanlib.api.util.v1.ItemUtilV1; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.registry.CompatRegistry; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.api.util.ItemUtil; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -32,7 +32,7 @@ public static Identifier id(String id) { return new Identifier(MOD_ID, id); } - public static ArchRegistry registry = ArchRegistry.createRegistry(MOD_ID); + public static CompatRegistry registry = CompatRegistry.createRegistry(MOD_ID); public static RegistryResult> supplierEXAMPLE_SCREENHANDLER = registry.registerScreenHandlerType(id("example_gui"), () -> new SimpleScreenHandlerTypeBuilder<>(ExampleScreenHandler::new).build()); @@ -46,12 +46,12 @@ public static Identifier id(String id) { public static void init() { EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new ExtendItem(new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_item")))); EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new ExtendBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE))); - EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> ItemUtilV1.ofBlock(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_block")))); + EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> ItemUtil.ofBlock(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_block")))); EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_item")))); EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE).build())); - EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> ItemUtilV1.ofBlock(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_block")))); + EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> ItemUtil.ofBlock(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_block")))); registry.allRegister(); From 988936c8bc070ae0842093c2dd82c35b0db25179 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 14 Feb 2024 22:54:02 +0900 Subject: [PATCH 235/617] add readme --- README.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..6e89f70cc --- /dev/null +++ b/README.md @@ -0,0 +1,89 @@ +# MCPitanLib +## 日本語 +MCPitanLibはライブラリです。 1つのjarで複数のMCバージョンを対応させるためのものです。
+開発中であるため、予告なく仕様が変更されることがあったり、不具合があるかもしれません。
+私専用につくっているため、他の方が使うことをあまり想定していません。
+ +### 前提MOD +- MODローダー + - [FabricMC](https://fabricmc.net/) + - [Minecraft Forge](https://files.minecraftforge.net/) + - [NeoForge](https://neoforged.net/) +- [Architectury API (CurseForge)](https://www.curseforge.com/minecraft/mc-mods/architectury-api) + +### ダウンロード +[CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch) +[Modrinth](https://modrinth.com/mod/mcpitanlibarch) + +### 使い方 +`build.gradle`に以下のように記述してください。 +```groovy +repositories { + maven { + url = "https://maven.pitan76.net/" + } +} + +dependencies { + // FabricMC + modImplementation "net.pitan76:mcpitanlib-fabric:${rootProject.mcpitanlib_version}" + + // Minecraft Forge + //modImplementation "net.pitan76:mcpitanlib-forge:${rootProject.mcpitanlib_version}" + + // NeoForge + //modImplementation "net.pitan76:mcpitanlib-neoforge:${rootProject.mcpitanlib_version}" +} +``` + +`gradle.properties`に以下のように記述してください。 +```properties +mcpitanlib_version=x.x.x +``` + +バージョンは[maven.pitan76.net](https://maven.pitan76.net/net/pitan76/)で確認してください。 + +## English +MCPitanLib is a library. It is for supporting multiple MC versions with one jar.
+It is under development, so the specification may change without notice, and there may be bugs.
+I am creating it for my own use, so I don't expect others to use it much.
+ +### Required MOD +- MOD Loader + - [FabricMC](https://fabricmc.net/) + - [Minecraft Forge](https://files.minecraftforge.net/) + - [NeoForge](https://neoforged.net/) +- [Architectury API (CurseForge)](https://www.curseforge.com/minecraft/mc-mods/architectury-api) + +### Download +[CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch) +[Modrinth](https://modrinth.com/mod/mcpitanlibarch) + +### How to use +Write as follows in `build.gradle`. +```groovy +repositories { + maven { + url = "https://maven.pitan76.net/" + } +} + +dependencies { + // FabricMC + modImplementation "net.pitan76:mcpitanlib-fabric${rootProject.mcpitanlib_version}" + + // Minecraft Forge + //modImplementation "net.pitan76:mcpitanlib-forge${rootProject.mcpitanlib_version}" + + // NeoForge + //modImplementation "net.pitan76:mcpitanlib-neoforge${rootProject.mcpitanlib_version}" +} +``` + +Write as follows in `gradle.properties`. +```properties +# Example: mcpitanlib_version=+1.18.2:1.9.5 +mcpitanlib_version=+x.x.x:x.x.x +``` + +Please check the version at [maven.pitan76.net](https://maven.pitan76.net/net/pitan76/). From 39b5b651a2e0523e471d810b4315361e057f3694 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 15 Feb 2024 16:23:14 +0900 Subject: [PATCH 236/617] rename package --- common/build.gradle | 2 +- .../java/ml/pkom/mcpitanlibarch/Dummy.java | 4 - .../api/command/LiteralCommand.java | 7 -- .../mcpitanlibarch/api/event/BaseEvent.java | 4 - .../api/event/registry/RegistryEvent.java | 10 -- .../api/registry/ArchRegistry.java | 100 ------------------ .../mcpitanlibarch/api/util/BlockUtil.java | 63 ----------- .../mcpitanlibarch/api/util/ItemUtil.java | 77 -------------- .../mcpitanlibarch/api/util/TextUtil.java | 30 ------ .../pitan76}/easyapi/FileControl.java | 2 +- .../pitan76}/easyapi/config/Config.java | 2 +- .../pitan76}/easyapi/config/IConfig.java | 2 +- .../pitan76}/easyapi/config/JsonConfig.java | 4 +- .../pitan76}/easyapi/config/YamlConfig.java | 4 +- .../pitan76}/easyapi/config/package-info.java | 2 +- .../net/pitan76/mcpitanlib/MCPitanLib.java | 10 +- .../api/block/CompatibleBlockSettings.java | 3 +- .../api/block/CompatibleMaterial.java | 2 +- .../mcpitanlib}/api/block/ExtendBlock.java | 6 +- .../api/block/ExtendBlockEntityProvider.java | 6 +- .../api/client/SimpleHandledScreen.java | 10 +- .../client/registry/ArchRegistryClient.java | 3 +- .../client/registry/KeybindingRegistry.java | 8 +- .../api/client/render/DrawObjectDM.java | 2 +- .../handledscreen/DrawBackgroundArgs.java | 4 +- .../handledscreen/DrawForegroundArgs.java | 4 +- .../DrawMouseoverTooltipArgs.java | 4 +- .../render/handledscreen/KeyEventArgs.java | 2 +- .../render/handledscreen/RenderArgs.java | 4 +- .../CompatibleTexturedButtonWidget.java | 6 +- .../RedrawableTexturedButtonWidget.java | 2 +- .../api/command/AbstractCommand.java | 6 +- .../api/command/CommandRegistry.java | 15 ++- .../api/command/CommandSettings.java | 2 +- .../api/command/ConfigCommand.java | 12 +-- .../api/command/LiteralCommand.java | 7 ++ .../api/command/argument/EntitiesCommand.java | 6 +- .../api/command/argument/EntityCommand.java | 6 +- .../command/argument/GreedyStringCommand.java | 4 +- .../api/command/argument/IntegerCommand.java | 6 +- .../api/command/argument/ItemCommand.java | 6 +- .../api/command/argument/PlayerCommand.java | 6 +- .../api/command/argument/PlayersCommand.java | 7 +- .../api/command/argument/RequiredCommand.java | 5 +- .../api/command/argument/StringCommand.java | 6 +- .../api/entity/EntityTypeBuilder.java | 9 +- .../mcpitanlib}/api/entity/ExtendEntity.java | 4 +- .../api/entity/ExtendEntityType.java | 2 +- .../mcpitanlib}/api/entity/Player.java | 8 +- .../mcpitanlib/api/event/BaseEvent.java | 4 + .../mcpitanlib}/api/event/CommandEvent.java | 4 +- .../api/event/EntitiesCommandEvent.java | 4 +- .../api/event/EntityCommandEvent.java | 4 +- .../api/event/IntegerCommandEvent.java | 4 +- .../api/event/ItemCommandEvent.java | 4 +- .../api/event/PlayerCommandEvent.java | 4 +- .../api/event/PlayersCommandEvent.java | 4 +- .../api/event/RequiredCommandEvent.java | 2 +- .../api/event/ServerCommandEvent.java | 4 +- .../api/event/StringCommandEvent.java | 4 +- .../api/event/block/BlockBreakEvent.java | 6 +- .../api/event/block/BlockPlacedEvent.java | 4 +- .../event/block/BlockScheduledTickEvent.java | 4 +- .../api/event/block/BlockUseEvent.java | 6 +- .../api/event/block/OutlineShapeEvent.java | 4 +- .../api/event/block/PickStackEvent.java | 2 +- .../event/block/ScreenHandlerCreateEvent.java | 6 +- .../api/event/block/StateReplacedEvent.java | 4 +- .../api/event/block/TileCreateEvent.java | 4 +- .../event/block/result/BlockBreakResult.java | 2 +- .../api/event/item/CraftEvent.java | 2 +- .../event/item/ItemAppendTooltipEvent.java | 4 +- .../api/event/item/ItemFinishUsingEvent.java | 4 +- .../api/event/item/ItemUseEvent.java | 6 +- .../api/event/item/ItemUseOnBlockEvent.java | 6 +- .../api/event/item/ItemUseOnEntityEvent.java | 6 +- .../api/event/tile/TileTickEvent.java | 2 +- .../event/v0/AttackEntityEventRegistry.java | 4 +- .../api/event/v0/ClientTickEventRegistry.java | 2 +- .../api/event/v0/EventRegistry.java | 7 +- .../event/v0/event/ItemStackActionEvent.java | 4 +- .../event/v0/event/RecipeManagerEvent.java | 4 +- .../event/v0/event/ServerConnectionEvent.java | 4 +- .../api/event/v1/RecipeManagerRegistry.java | 2 +- .../ExtendedNamedScreenHandlerFactory.java | 2 +- .../api/gui/ExtendedScreenHandler.java | 2 +- .../gui/ExtendedScreenHandlerTypeBuilder.java | 2 +- .../api/gui/SimpleScreenHandler.java | 4 +- .../gui/SimpleScreenHandlerTypeBuilder.java | 2 +- .../api/gui/inventory/IInventory.java | 2 +- .../api/gui/slot/CompatibleSlot.java | 2 +- .../api/item/ArmorEquipmentType.java | 2 +- .../api/item/CompatibleArmorMaterial.java | 2 +- .../api/item/CompatibleItemSettings.java | 2 +- .../api/item/CreativeTabBuilder.java | 15 +-- .../api/item/CreativeTabManager.java | 2 +- .../api/item/DefaultItemGroups.java | 2 +- .../mcpitanlib}/api/item/ExtendItem.java | 6 +- .../api/item/ExtendItemProvider.java | 5 +- .../mcpitanlib}/api/item/ExtendSettings.java | 2 +- .../api/item/FixedRecipeRemainderItem.java | 2 +- .../api/item/tool/CompatibleAxeItem.java | 7 +- .../api/item/tool/CompatibleHoeItem.java | 7 +- .../api/item/tool/CompatiblePickaxeItem.java | 6 +- .../api/item/tool/CompatibleShovelItem.java | 6 +- .../api/item/tool/CompatibleSwordItem.java | 7 +- .../api/item/tool/CompatibleToolMaterial.java | 2 +- .../pitan76/mcpitanlib}/api/nbt/NbtTag.java | 2 +- .../api/network/ClientNetworking.java | 2 +- .../api/network/PacketByteUtil.java | 2 +- .../api/network/ServerNetworking.java | 2 +- .../api/packet/UpdatePacketType.java | 2 +- .../api/recipe/CompatibleRecipeEntry.java | 4 +- .../api/registry/CompatRegistry.java | 10 +- .../mcpitanlib}/api/tag/MineableToolTags.java | 2 +- .../pitan76/mcpitanlib}/api/tag/TagKey.java | 6 +- .../mcpitanlib}/api/text/TextComponent.java | 4 +- .../api/text/VariableTextComponent.java | 4 +- .../api/tile/BlockEntityTypeBuilder.java | 4 +- .../api/tile/ExtendBlockEntity.java | 8 +- .../api/tile/ExtendBlockEntityTicker.java | 4 +- .../api/timer/MinecraftServerTimerAccess.java | 2 +- .../api/timer/ServerWorldTimerAccess.java | 2 +- .../mcpitanlib}/api/timer/TimerItem.java | 2 +- .../api/util/ActionResultUtil.java | 2 +- .../api/util/BlockEntityTypeUtil.java | 2 +- .../mcpitanlib/api/util/BlockUtil.java | 6 +- .../api/util/CompatibleRecipeEntryUtil.java | 4 +- .../api/util/DamageSourceUtil.java | 4 +- .../mcpitanlib}/api/util/EntityTypeUtil.java | 2 +- .../mcpitanlib}/api/util/EntityUtil.java | 4 +- .../api/util/EquipMaterialUtil.java | 6 +- .../mcpitanlib}/api/util/FluidUtil.java | 2 +- .../mcpitanlib}/api/util/IngredientUtil.java | 2 +- .../mcpitanlib}/api/util/InventoryUtil.java | 4 +- .../mcpitanlib}/api/util/ItemStackUtil.java | 2 +- .../pitan76/mcpitanlib/api/util/ItemUtil.java | 4 +- .../mcpitanlib}/api/util/MathUtil.java | 2 +- .../api/util/PersistentStateUtil.java | 2 +- .../mcpitanlib}/api/util/PlatformUtil.java | 2 +- .../mcpitanlib}/api/util/PlayerUtil.java | 5 +- .../mcpitanlib}/api/util/RecipeUtil.java | 2 +- .../mcpitanlib}/api/util/ResourceUtil.java | 2 +- .../api/util/ScreenHandlerUtil.java | 2 +- .../api/util/SimpleInventoryUtil.java | 2 +- .../mcpitanlib}/api/util/SlotUtil.java | 2 +- .../mcpitanlib}/api/util/TimerUtil.java | 6 +- .../mcpitanlib}/api/util/WorldRandomUtil.java | 2 +- .../mcpitanlib}/api/util/WorldUtil.java | 4 +- .../api/util/client/MatrixStackUtil.java | 6 +- .../api/util/client/RenderUtil.java | 2 +- .../api/util/client/ScreenUtil.java | 12 +-- .../api/util/event/BlockEventGenerator.java | 8 +- .../api/util/event/ItemEventGenerator.java | 4 +- .../mcpitanlib}/api/util/math/BoxUtil.java | 2 +- .../mcpitanlib}/api/util/math/PosUtil.java | 2 +- .../mcpitanlib/api/util/v1/BlockUtilV1.java | 4 +- .../mcpitanlib/api/util/v1/ItemUtilV1.java | 4 +- .../mcpitanlib/api/util/v2/BlockUtilV2.java | 2 +- .../mcpitanlib/api/util/v2/ItemUtilV2.java | 2 +- .../api/world/CompatiblePersistentState.java | 2 +- .../mcpitanlib}/api/world/ExtendWorld.java | 4 +- .../net/pitan76/mcpitanlib/core/Dummy.java | 4 + .../mcpitanlib}/core/player/ItemCooldown.java | 4 +- .../pitan76/mcpitanlib/debug/DebugTool.java | 4 +- .../pitan76/mcpitanlib/mixin/ItemMixin.java | 6 +- .../mcpitanlib/mixin/ItemStackMixin.java | 2 +- .../mixin/MinecraftServerTimer.java | 4 +- .../mcpitanlib/mixin/RecipeManagerMixin.java | 2 +- .../mcpitanlib/mixin/ServerWorldTimer.java | 4 +- .../mcpitanlib/test/ExampleCommand.java | 10 +- .../mcpitanlib/test/ExampleGuiBlock.java | 6 +- .../mcpitanlib/test/ExampleGuiItem.java | 8 +- .../pitan76/mcpitanlib/test/ExampleMod.java | 16 +-- .../mcpitanlib/test/ExampleModClient.java | 2 +- .../mcpitanlib/test/ExampleScreen.java | 12 +-- .../mcpitanlib/test/ExampleScreenHandler.java | 4 +- common/src/main/resources/icon.png | Bin 0 -> 66211 bytes ...ins.json => mcpitanlib-common.mixins.json} | 0 ...accesswidener => mcpitanlib.accesswidener} | 0 .../mcpitanlib/fabric/mixin/RecipeMixin.java | 2 +- fabric/src/main/resources/fabric.mod.json | 22 ++-- ...rch.mixins.json => mcpitanlib.mixins.json} | 0 forge/build.gradle | 4 +- ...rch.mixins.json => mcpitanlib.mixins.json} | 0 info.properties | 2 +- .../src/main/resources/mcpitanlib.mixins.json | 13 +++ .../quilt/MCPitanLibQuilt.java} | 8 +- .../quilt/mixin/RecipeMixin.java | 4 +- ...rch.mixins.json => mcpitanlib.mixins.json} | 2 +- quilt/src/main/resources/quilt.mod.json | 4 +- 191 files changed, 397 insertions(+), 683 deletions(-) delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/Dummy.java delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BaseEvent.java delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TextUtil.java rename common/src/main/java/{ml/pkom => net/pitan76}/easyapi/FileControl.java (99%) rename common/src/main/java/{ml/pkom => net/pitan76}/easyapi/config/Config.java (99%) rename common/src/main/java/{ml/pkom => net/pitan76}/easyapi/config/IConfig.java (95%) rename common/src/main/java/{ml/pkom => net/pitan76}/easyapi/config/JsonConfig.java (96%) rename common/src/main/java/{ml/pkom => net/pitan76}/easyapi/config/YamlConfig.java (97%) rename common/src/main/java/{ml/pkom => net/pitan76}/easyapi/config/package-info.java (65%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/block/CompatibleBlockSettings.java (98%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/block/CompatibleMaterial.java (99%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/block/ExtendBlock.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/block/ExtendBlockEntityProvider.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/SimpleHandledScreen.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/registry/ArchRegistryClient.java (98%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/registry/KeybindingRegistry.java (84%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/render/DrawObjectDM.java (87%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/render/handledscreen/DrawBackgroundArgs.java (88%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/render/handledscreen/DrawForegroundArgs.java (85%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java (85%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/render/handledscreen/KeyEventArgs.java (91%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/client/render/handledscreen/RenderArgs.java (88%) rename common/src/main/java/{ml/pkom/mcpitanlibarch/api/client/gui => net/pitan76/mcpitanlib/api/client}/widget/CompatibleTexturedButtonWidget.java (88%) rename common/src/main/java/{ml/pkom/mcpitanlibarch/api/client/gui => net/pitan76/mcpitanlib/api/client}/widget/RedrawableTexturedButtonWidget.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/AbstractCommand.java (85%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/CommandRegistry.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/CommandSettings.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/ConfigCommand.java (95%) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/command/LiteralCommand.java rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/EntitiesCommand.java (72%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/EntityCommand.java (72%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/GreedyStringCommand.java (58%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/IntegerCommand.java (71%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/ItemCommand.java (73%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/PlayerCommand.java (72%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/PlayersCommand.java (66%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/RequiredCommand.java (58%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/command/argument/StringCommand.java (71%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/entity/EntityTypeBuilder.java (92%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/entity/ExtendEntity.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/entity/ExtendEntityType.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/entity/Player.java (97%) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/BaseEvent.java rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/CommandEvent.java (87%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/EntitiesCommandEvent.java (82%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/EntityCommandEvent.java (82%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/IntegerCommandEvent.java (72%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/ItemCommandEvent.java (75%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/PlayerCommandEvent.java (82%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/PlayersCommandEvent.java (82%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/RequiredCommandEvent.java (73%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/ServerCommandEvent.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/StringCommandEvent.java (71%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/BlockBreakEvent.java (86%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/BlockPlacedEvent.java (91%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/BlockScheduledTickEvent.java (89%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/BlockUseEvent.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/OutlineShapeEvent.java (89%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/PickStackEvent.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/ScreenHandlerCreateEvent.java (84%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/StateReplacedEvent.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/TileCreateEvent.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/block/result/BlockBreakResult.java (82%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/item/CraftEvent.java (90%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/item/ItemAppendTooltipEvent.java (90%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/item/ItemFinishUsingEvent.java (87%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/item/ItemUseEvent.java (89%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/item/ItemUseOnBlockEvent.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/item/ItemUseOnEntityEvent.java (89%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/tile/TileTickEvent.java (91%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/v0/AttackEntityEventRegistry.java (90%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/v0/ClientTickEventRegistry.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/v0/EventRegistry.java (91%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/v0/event/ItemStackActionEvent.java (89%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/v0/event/RecipeManagerEvent.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/event/v0/event/ServerConnectionEvent.java (79%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/gui/ExtendedNamedScreenHandlerFactory.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/gui/ExtendedScreenHandler.java (92%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/gui/ExtendedScreenHandlerTypeBuilder.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/gui/SimpleScreenHandler.java (98%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/gui/SimpleScreenHandlerTypeBuilder.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/gui/inventory/IInventory.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/gui/slot/CompatibleSlot.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/ArmorEquipmentType.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/CompatibleArmorMaterial.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/CompatibleItemSettings.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/CreativeTabBuilder.java (77%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/CreativeTabManager.java (98%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/DefaultItemGroups.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/ExtendItem.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/ExtendItemProvider.java (92%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/ExtendSettings.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/FixedRecipeRemainderItem.java (77%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/tool/CompatibleAxeItem.java (85%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/tool/CompatibleHoeItem.java (85%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/tool/CompatiblePickaxeItem.java (88%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/tool/CompatibleShovelItem.java (88%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/tool/CompatibleSwordItem.java (85%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/item/tool/CompatibleToolMaterial.java (69%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/nbt/NbtTag.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/network/ClientNetworking.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/network/PacketByteUtil.java (99%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/network/ServerNetworking.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/packet/UpdatePacketType.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/recipe/CompatibleRecipeEntry.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/tag/MineableToolTags.java (73%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/tag/TagKey.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/text/TextComponent.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/text/VariableTextComponent.java (82%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/tile/BlockEntityTypeBuilder.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/tile/ExtendBlockEntity.java (89%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/tile/ExtendBlockEntityTicker.java (83%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/timer/MinecraftServerTimerAccess.java (79%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/timer/ServerWorldTimerAccess.java (78%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/timer/TimerItem.java (89%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/ActionResultUtil.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/BlockEntityTypeUtil.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/DamageSourceUtil.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/EntityTypeUtil.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/EntityUtil.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/EquipMaterialUtil.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/FluidUtil.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/IngredientUtil.java (91%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/InventoryUtil.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/ItemStackUtil.java (93%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/MathUtil.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/PersistentStateUtil.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/PlatformUtil.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/PlayerUtil.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/RecipeUtil.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/ResourceUtil.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/ScreenHandlerUtil.java (97%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/SimpleInventoryUtil.java (92%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/SlotUtil.java (90%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/TimerUtil.java (76%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/WorldRandomUtil.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/WorldUtil.java (98%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/client/MatrixStackUtil.java (62%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/client/RenderUtil.java (95%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/client/ScreenUtil.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/event/BlockEventGenerator.java (68%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/event/ItemEventGenerator.java (74%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/math/BoxUtil.java (96%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/util/math/PosUtil.java (94%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/world/CompatiblePersistentState.java (89%) rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/api/world/ExtendWorld.java (91%) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/core/Dummy.java rename common/src/main/java/{ml/pkom/mcpitanlibarch => net/pitan76/mcpitanlib}/core/player/ItemCooldown.java (81%) rename common/src/main/resources/{mcpitanlibarch-common.mixins.json => mcpitanlib-common.mixins.json} (100%) rename common/src/main/resources/{mcpitanlibarch.accesswidener => mcpitanlib.accesswidener} (100%) rename fabric/src/main/resources/{mcpitanlibarch.mixins.json => mcpitanlib.mixins.json} (100%) rename forge/src/main/resources/{mcpitanlibarch.mixins.json => mcpitanlib.mixins.json} (100%) create mode 100644 neoforge/src/main/resources/mcpitanlib.mixins.json rename quilt/src/main/java/ml/pkom/{mcpitanlibarch/quilt/MCPitanLibarchQuilt.java => mcpitanlib/quilt/MCPitanLibQuilt.java} (50%) rename quilt/src/main/java/ml/pkom/{mcpitanlibarch => mcpitanlib}/quilt/mixin/RecipeMixin.java (90%) rename quilt/src/main/resources/{mcpitanlibarch.mixins.json => mcpitanlib.mixins.json} (77%) diff --git a/common/build.gradle b/common/build.gradle index 4752123ad..b67017b0b 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -11,7 +11,7 @@ architectury { } loom { - accessWidenerPath = file("src/main/resources/mcpitanlibarch.accesswidener") + accessWidenerPath = file("src/main/resources/mcpitanlib.accesswidener") } publishing { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/Dummy.java b/common/src/main/java/ml/pkom/mcpitanlibarch/Dummy.java deleted file mode 100644 index d523b5c3a..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/Dummy.java +++ /dev/null @@ -1,4 +0,0 @@ -package ml.pkom.mcpitanlibarch; - -public class Dummy { -} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java deleted file mode 100644 index c0510c381..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/LiteralCommand.java +++ /dev/null @@ -1,7 +0,0 @@ -package ml.pkom.mcpitanlibarch.api.command; - -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; - -public abstract class LiteralCommand extends AbstractCommand { - -} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BaseEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BaseEvent.java deleted file mode 100644 index 7dc5d4429..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/BaseEvent.java +++ /dev/null @@ -1,4 +0,0 @@ -package ml.pkom.mcpitanlibarch.api.event; - -public class BaseEvent { -} \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java deleted file mode 100644 index f47c62fa0..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/registry/RegistryEvent.java +++ /dev/null @@ -1,10 +0,0 @@ -package ml.pkom.mcpitanlibarch.api.event.registry; - -import dev.architectury.registry.registries.RegistrySupplier; -import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; - -public class RegistryEvent extends RegistryResult { - public RegistryEvent(RegistrySupplier supplier) { - super(supplier); - } -} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java index 8a08c6fd9..e69de29bb 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java +++ b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java @@ -1,100 +0,0 @@ -package ml.pkom.mcpitanlibarch.api.registry; - -import ml.pkom.mcpitanlibarch.api.event.registry.RegistryEvent; -import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; -import net.minecraft.block.Block; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.entity.EntityType; -import net.minecraft.fluid.Fluid; -import net.minecraft.item.Item; -import net.minecraft.item.ItemConvertible; -import net.minecraft.item.ItemGroup; -import net.minecraft.particle.ParticleType; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.Identifier; -import net.pitan76.mcpitanlib.api.registry.CompatRegistry; -import net.pitan76.mcpitanlib.core.registry.MCPLRegistry; -import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; - -import java.util.function.Supplier; - -@Deprecated -public class ArchRegistry { - - private final CompatRegistry compatRegistry; - private final MCPLRegistry mcplr; - private final MCPLRegistry1_20 mcplr1_20; - - public ArchRegistry(String MOD_ID) { - compatRegistry = new CompatRegistry(MOD_ID); - mcplr = compatRegistry.getMcplr(); - mcplr1_20 = compatRegistry.getMcplr1_20(); - } - - public static ArchRegistry createRegistry(String MOD_ID) { - return new ArchRegistry(MOD_ID); - } - - public RegistryEvent registerItem(Identifier id, Supplier supplier) { - return new RegistryEvent<>(compatRegistry.registerItem(id, supplier).supplier); - } - - public RegistryEvent registerBlock(Identifier id, Supplier supplier) { - return new RegistryEvent<>(compatRegistry.registerBlock(id, supplier).supplier); - } - - public RegistryEvent> registerScreenHandlerType(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(compatRegistry.registerScreenHandlerType(id, supplier).supplier); - } - - @Deprecated - public RegistryEvent> registerExtendedScreenHandlerType(Identifier id, Supplier> supplier) { - return registerScreenHandlerType(id, () -> supplier.get().build()); - } - - public RegistryEvent> registerMenu(Identifier id, Supplier> supplier) { - return registerScreenHandlerType(id, supplier); - } - - public RegistryEvent> registerBlockEntityType(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(compatRegistry.registerBlockEntityType(id, supplier).supplier); - } - - public RegistryEvent> registerEntity(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(compatRegistry.registerEntity(id, supplier).supplier); - } - - @Deprecated - public RegistryEvent registerSoundEvent(Identifier id, Supplier supplier) { - return new RegistryEvent<>(compatRegistry.registerSoundEvent(id, supplier).supplier); - } - - public RegistryEvent registerSoundEvent(Identifier id) { - return new RegistryEvent<>(compatRegistry.registerSoundEvent(id).supplier); - } - - public RegistryEvent registerSoundEvent(Identifier id, float distanceToTravel) { - return new RegistryEvent<>(compatRegistry.registerSoundEvent(id, distanceToTravel).supplier); - } - - public RegistryEvent registerFluid(Identifier id, Supplier supplier) { - return new RegistryEvent<>(compatRegistry.registerFluid(id, supplier).supplier); - } - - public RegistryEvent> registerParticleType(Identifier id, Supplier> supplier) { - return new RegistryEvent<>(compatRegistry.registerParticleType(id, supplier).supplier); - } - - public RegistryEvent registerItemGroup(Identifier id, Supplier supplier) { - return new RegistryEvent<>(null); - } - - public static void registerFuel(int time, ItemConvertible... item) { - CompatRegistry.registerFuel(time, item); - } - - public void allRegister() { - compatRegistry.allRegister(); - } -} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java deleted file mode 100644 index d850d1cae..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockUtil.java +++ /dev/null @@ -1,63 +0,0 @@ -package ml.pkom.mcpitanlibarch.api.util; - -import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; -import ml.pkom.mcpitanlibarch.api.tag.MineableToolTags; -import net.minecraft.block.AbstractBlock; -import net.minecraft.block.Block; -import net.minecraft.util.Identifier; - -import java.util.List; - -@Deprecated -public class BlockUtil { - private static net.pitan76.mcpitanlib.api.util.BlockUtil newBlockUtil = new net.pitan76.mcpitanlib.api.util.BlockUtil(); - - public static Block block(Identifier id) { - return newBlockUtil.block(id); - } - - public static AbstractBlock.Settings breakByTool(AbstractBlock.Settings settings, MineableToolTags toolTags, int level) { - return newBlockUtil.breakByTool(settings, toolTags, level); - } - - public static AbstractBlock.Settings dropsNothing(AbstractBlock.Settings settings) { - return newBlockUtil.dropsNothing(settings); - } - - public static AbstractBlock.Settings requiresTool(AbstractBlock.Settings settings) { - return newBlockUtil.requiresTool(settings); - } - - public static boolean isExist(Identifier identifier) { - return newBlockUtil.isExist(identifier); - } - - public static Identifier toID(Block block) { - return newBlockUtil.toID(block); - } - - public static Block fromId(Identifier identifier) { - return newBlockUtil.fromId(identifier); - } - - public static List getAllBlocks() { - return newBlockUtil.getAllBlocks(); - } - - @Deprecated - public static Block of(AbstractBlock.Settings settings) { - return newBlockUtil.of(settings); - } - - public static Block of(CompatibleBlockSettings settings) { - return newBlockUtil.of(settings); - } - - public static int getRawId(Block block) { - return newBlockUtil.getRawId(block); - } - - public static Block fromIndex(int index) { - return newBlockUtil.fromIndex(index); - } -} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java deleted file mode 100644 index cfd17e37c..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemUtil.java +++ /dev/null @@ -1,77 +0,0 @@ -package ml.pkom.mcpitanlibarch.api.util; - -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.tag.TagKey; -import net.minecraft.block.Block; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Identifier; - -import java.util.List; - -@Deprecated -public class ItemUtil { - private static net.pitan76.mcpitanlib.api.util.ItemUtil newItemUtil = new net.pitan76.mcpitanlib.api.util.ItemUtil(); - - public static Item item(Identifier id) { - return newItemUtil.item(id); - } - - public static boolean isEqual(Item item, Item item2) { - return newItemUtil.isEqual(item, item2); - } - - public static boolean isOf(ItemStack stack, Item item) { - return newItemUtil.isOf(stack, item); - } - - public static boolean isIn(ItemStack stack, TagKey tagKey) { - return newItemUtil.isIn(stack, tagKey); - } - - public static boolean isIn(Item item, TagKey tagKey) { - return newItemUtil.isIn(item, tagKey); - } - - public static boolean isExist(Identifier identifier) { - return newItemUtil.isExist(identifier); - } - public static Identifier toID(Item item) { - return newItemUtil.toID(item); - } - - public static Item fromId(Identifier identifier) { - return newItemUtil.fromId(identifier); - } - - @Deprecated - public static BlockItem ofBlock(Block block, Item.Settings settings) { - return newItemUtil.ofBlock(block, settings); - } - - public static BlockItem ofBlock(Block block, CompatibleItemSettings settings) { - return newItemUtil.ofBlock(block, settings); - } - - @Deprecated - public static Item of(Item.Settings settings) { - return newItemUtil.of(settings); - } - - public static Item of(CompatibleItemSettings settings) { - return newItemUtil.of(settings); - } - - public static List getAllItems() { - return newItemUtil.getAllItems(); - } - - public static int getRawId(Item item) { - return newItemUtil.getRawId(item); - } - - public static Item fromIndex(int index) { - return newItemUtil.fromIndex(index); - } -} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TextUtil.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TextUtil.java deleted file mode 100644 index 507f89ce1..000000000 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TextUtil.java +++ /dev/null @@ -1,30 +0,0 @@ -package ml.pkom.mcpitanlibarch.api.util; - -import net.minecraft.text.*; - -@Deprecated -public class TextUtil { - public static MutableText literal(String string) { - return net.pitan76.mcpitanlib.api.util.TextUtil.literal(string); - } - - public static MutableText translatable(String key) { - return net.pitan76.mcpitanlib.api.util.TextUtil.translatable(key); - } - - public static MutableText translatable(String key, Object... args) { - return net.pitan76.mcpitanlib.api.util.TextUtil.translatable(key, args); - } - - public static MutableText empty() { - return net.pitan76.mcpitanlib.api.util.TextUtil.empty(); - } - - public static MutableText keybind(String string) { - return net.pitan76.mcpitanlib.api.util.TextUtil.keybind(string); - } - - public static String txt2str(Text text) { - return net.pitan76.mcpitanlib.api.util.TextUtil.txt2str(text); - } -} \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/easyapi/FileControl.java b/common/src/main/java/net/pitan76/easyapi/FileControl.java similarity index 99% rename from common/src/main/java/ml/pkom/easyapi/FileControl.java rename to common/src/main/java/net/pitan76/easyapi/FileControl.java index 7d19eaa04..673c29ab2 100644 --- a/common/src/main/java/ml/pkom/easyapi/FileControl.java +++ b/common/src/main/java/net/pitan76/easyapi/FileControl.java @@ -1,4 +1,4 @@ -package ml.pkom.easyapi; +package net.pitan76.easyapi; import java.io.*; import java.nio.channels.FileChannel; diff --git a/common/src/main/java/ml/pkom/easyapi/config/Config.java b/common/src/main/java/net/pitan76/easyapi/config/Config.java similarity index 99% rename from common/src/main/java/ml/pkom/easyapi/config/Config.java rename to common/src/main/java/net/pitan76/easyapi/config/Config.java index 108f5a536..c1fd89093 100644 --- a/common/src/main/java/ml/pkom/easyapi/config/Config.java +++ b/common/src/main/java/net/pitan76/easyapi/config/Config.java @@ -1,4 +1,4 @@ -package ml.pkom.easyapi.config; +package net.pitan76.easyapi.config; import java.io.File; import java.util.LinkedHashMap; diff --git a/common/src/main/java/ml/pkom/easyapi/config/IConfig.java b/common/src/main/java/net/pitan76/easyapi/config/IConfig.java similarity index 95% rename from common/src/main/java/ml/pkom/easyapi/config/IConfig.java rename to common/src/main/java/net/pitan76/easyapi/config/IConfig.java index 5a987aa9d..09d0b68e8 100644 --- a/common/src/main/java/ml/pkom/easyapi/config/IConfig.java +++ b/common/src/main/java/net/pitan76/easyapi/config/IConfig.java @@ -1,4 +1,4 @@ -package ml.pkom.easyapi.config; +package net.pitan76.easyapi.config; import java.io.File; import java.util.LinkedHashMap; diff --git a/common/src/main/java/ml/pkom/easyapi/config/JsonConfig.java b/common/src/main/java/net/pitan76/easyapi/config/JsonConfig.java similarity index 96% rename from common/src/main/java/ml/pkom/easyapi/config/JsonConfig.java rename to common/src/main/java/net/pitan76/easyapi/config/JsonConfig.java index 46583af5d..09662c662 100644 --- a/common/src/main/java/ml/pkom/easyapi/config/JsonConfig.java +++ b/common/src/main/java/net/pitan76/easyapi/config/JsonConfig.java @@ -1,9 +1,9 @@ -package ml.pkom.easyapi.config; +package net.pitan76.easyapi.config; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; -import ml.pkom.easyapi.FileControl; +import net.pitan76.easyapi.FileControl; import java.io.File; import java.lang.reflect.Type; diff --git a/common/src/main/java/ml/pkom/easyapi/config/YamlConfig.java b/common/src/main/java/net/pitan76/easyapi/config/YamlConfig.java similarity index 97% rename from common/src/main/java/ml/pkom/easyapi/config/YamlConfig.java rename to common/src/main/java/net/pitan76/easyapi/config/YamlConfig.java index ea6adc344..c01e026af 100644 --- a/common/src/main/java/ml/pkom/easyapi/config/YamlConfig.java +++ b/common/src/main/java/net/pitan76/easyapi/config/YamlConfig.java @@ -1,6 +1,6 @@ -package ml.pkom.easyapi.config; +package net.pitan76.easyapi.config; -import ml.pkom.easyapi.FileControl; +import net.pitan76.easyapi.FileControl; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; diff --git a/common/src/main/java/ml/pkom/easyapi/config/package-info.java b/common/src/main/java/net/pitan76/easyapi/config/package-info.java similarity index 65% rename from common/src/main/java/ml/pkom/easyapi/config/package-info.java rename to common/src/main/java/net/pitan76/easyapi/config/package-info.java index 8bb53e1d3..88238e2bc 100644 --- a/common/src/main/java/ml/pkom/easyapi/config/package-info.java +++ b/common/src/main/java/net/pitan76/easyapi/config/package-info.java @@ -1,4 +1,4 @@ /** * Config関連のクラスが入っているパッケージ */ -package ml.pkom.easyapi.config; +package net.pitan76.easyapi.config; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java index 17a17d279..7b270d5ba 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib; -import ml.pkom.easyapi.config.Config; -import ml.pkom.easyapi.config.JsonConfig; -import ml.pkom.mcpitanlibarch.api.registry.ArchRegistry; -import ml.pkom.mcpitanlibarch.api.util.PlatformUtil; +import net.pitan76.easyapi.config.Config; +import net.pitan76.easyapi.config.JsonConfig; +import net.pitan76.mcpitanlib.api.registry.CompatRegistry; +import net.pitan76.mcpitanlib.api.util.PlatformUtil; import net.pitan76.mcpitanlib.debug.DebugTool; import net.minecraft.util.Identifier; @@ -25,7 +25,7 @@ public class MCPitanLib { public static List blockBlackList = new ArrayList<>(); // MCPitanLibのアイテム、ブロック、タイルエンティティの登録 - public static ArchRegistry registry = ArchRegistry.createRegistry(MOD_ID); + public static CompatRegistry registry = CompatRegistry.createRegistry(MOD_ID); /** * MCPitanLibの初期化 diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java similarity index 98% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java index 945d67ee7..b65926573 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java @@ -1,7 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.block; +package net.pitan76.mcpitanlib.api.block; import net.minecraft.block.*; -import net.minecraft.block.piston.PistonBehavior; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.util.DyeColor; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleMaterial.java similarity index 99% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleMaterial.java index 7390db661..c505a3aa6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/CompatibleMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleMaterial.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.block; +package net.pitan76.mcpitanlib.api.block; import net.minecraft.block.MapColor; import net.minecraft.block.Material; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 1cb478be3..d77a8970d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.block; +package net.pitan76.mcpitanlib.api.block; -import ml.pkom.mcpitanlibarch.api.event.block.*; -import ml.pkom.mcpitanlibarch.api.event.block.result.BlockBreakResult; +import net.pitan76.mcpitanlib.api.event.block.*; +import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java index 58cd78b24..cb5b24676 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/block/ExtendBlockEntityProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.block; +package net.pitan76.mcpitanlib.api.block; -import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; -import ml.pkom.mcpitanlibarch.api.tile.ExtendBlockEntityTicker; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.tile.ExtendBlockEntityTicker; import net.minecraft.block.BlockEntityProvider; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 435a334c9..59073d75f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -1,9 +1,9 @@ -package ml.pkom.mcpitanlibarch.api.client; +package net.pitan76.mcpitanlib.api.client; -import ml.pkom.mcpitanlibarch.api.client.gui.widget.CompatibleTexturedButtonWidget; -import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; -import ml.pkom.mcpitanlibarch.api.util.client.ScreenUtil; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.*; +import net.pitan76.mcpitanlib.api.client.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.Drawable; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java similarity index 98% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java index fac7865a6..a4fd0409d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.client.registry; +package net.pitan76.mcpitanlib.api.client.registry; import dev.architectury.event.events.client.ClientTextureStitchEvent; import dev.architectury.registry.client.level.entity.EntityRendererRegistry; @@ -21,7 +21,6 @@ import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.entity.model.EntityModelLayer; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/KeybindingRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/KeybindingRegistry.java similarity index 84% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/KeybindingRegistry.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/KeybindingRegistry.java index a2c8a38b4..f1ee47252 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/registry/KeybindingRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/KeybindingRegistry.java @@ -1,9 +1,9 @@ -package ml.pkom.mcpitanlibarch.api.client.registry; +package net.pitan76.mcpitanlib.api.client.registry; import dev.architectury.registry.client.keymappings.KeyMappingRegistry; -import ml.pkom.mcpitanlibarch.api.event.v0.ClientTickEventRegistry; -import ml.pkom.mcpitanlibarch.api.network.ClientNetworking; -import ml.pkom.mcpitanlibarch.api.network.PacketByteUtil; +import net.pitan76.mcpitanlib.api.event.v0.ClientTickEventRegistry; +import net.pitan76.mcpitanlib.api.network.ClientNetworking; +import net.pitan76.mcpitanlib.api.network.PacketByteUtil; import net.minecraft.client.option.KeyBinding; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java similarity index 87% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java index b0d77a58f..8fb9a4284 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/DrawObjectDM.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.client.render; +package net.pitan76.mcpitanlib.api.client.render; import net.minecraft.client.util.math.MatrixStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawBackgroundArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawBackgroundArgs.java similarity index 88% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawBackgroundArgs.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawBackgroundArgs.java index 66370378b..4c0a4ab27 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawBackgroundArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawBackgroundArgs.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; +package net.pitan76.mcpitanlib.api.client.render.handledscreen; -import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; public class DrawBackgroundArgs { public DrawObjectDM drawObjectDM; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawForegroundArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawForegroundArgs.java similarity index 85% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawForegroundArgs.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawForegroundArgs.java index d4b8b854b..643a5bf80 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawForegroundArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawForegroundArgs.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; +package net.pitan76.mcpitanlib.api.client.render.handledscreen; -import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; public class DrawForegroundArgs { public DrawObjectDM drawObjectDM; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java similarity index 85% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java index 2e2c65aca..652c5ed68 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/DrawMouseoverTooltipArgs.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; +package net.pitan76.mcpitanlib.api.client.render.handledscreen; -import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; public class DrawMouseoverTooltipArgs { public DrawObjectDM drawObjectDM; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/KeyEventArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/KeyEventArgs.java similarity index 91% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/KeyEventArgs.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/KeyEventArgs.java index 905a7f1b3..45c4ceeed 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/KeyEventArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/KeyEventArgs.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; +package net.pitan76.mcpitanlib.api.client.render.handledscreen; public class KeyEventArgs { public int keyCode, scanCode, modifiers; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/RenderArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/RenderArgs.java similarity index 88% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/RenderArgs.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/RenderArgs.java index aa6664254..8b4905d78 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/render/handledscreen/RenderArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/handledscreen/RenderArgs.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.client.render.handledscreen; +package net.pitan76.mcpitanlib.api.client.render.handledscreen; -import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; public class RenderArgs { public DrawObjectDM drawObjectDM; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java similarity index 88% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java index c68572003..a00972230 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/CompatibleTexturedButtonWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java @@ -1,6 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.client.gui.widget; +package net.pitan76.mcpitanlib.api.client.widget; -import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.util.TextUtil; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ButtonTextures; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.text.Text; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java index c0ee341d5..9d3c3b1c1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/client/gui/widget/RedrawableTexturedButtonWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.client.gui.widget; +package net.pitan76.mcpitanlib.api.client.widget; import ml.pkom.mcpitanlibarch.api.util.client.RenderUtil; import net.minecraft.client.gui.widget.TexturedButtonWidget; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/AbstractCommand.java similarity index 85% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/AbstractCommand.java index 3d464fd72..5b2fbdf00 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/AbstractCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/AbstractCommand.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.command; +package net.pitan76.mcpitanlib.api.command; -import ml.pkom.mcpitanlibarch.api.command.argument.RequiredCommand; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.command.argument.RequiredCommand; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import java.util.HashMap; import java.util.Map; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java index dd359c07f..06c6c286e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java @@ -1,13 +1,15 @@ -package ml.pkom.mcpitanlibarch.api.command; +package net.pitan76.mcpitanlib.api.command; import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.builder.RequiredArgumentBuilder; import dev.architectury.event.events.common.CommandRegistrationEvent; -import ml.pkom.mcpitanlibarch.api.command.argument.*; -import ml.pkom.mcpitanlibarch.api.event.*; +import net.pitan76.mcpitanlib.api.command.argument.*; +import net.pitan76.mcpitanlib.api.event.*; +import net.minecraft.command.CommandRegistryAccess; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; +import net.pitan76.mcpitanlib.api.command.argument.*; +import net.pitan76.mcpitanlib.api.event.*; import java.util.Map; @@ -95,8 +97,5 @@ private static > void forArgsC builder.then(nextBuilder); } } - - - } -} +} \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandSettings.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandSettings.java index 69676a52f..8a1d5fb2d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/CommandSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandSettings.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.command; +package net.pitan76.mcpitanlib.api.command; import net.minecraft.server.command.ServerCommandSource; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/ConfigCommand.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/ConfigCommand.java index c4161b31c..0c4a9fb54 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/ConfigCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/ConfigCommand.java @@ -1,11 +1,11 @@ -package ml.pkom.mcpitanlibarch.api.command; +package net.pitan76.mcpitanlib.api.command; import com.mojang.brigadier.arguments.StringArgumentType; -import ml.pkom.easyapi.config.Config; -import ml.pkom.mcpitanlibarch.api.command.argument.StringCommand; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.StringCommandEvent; -import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.pitan76.easyapi.config.Config; +import net.pitan76.mcpitanlib.api.command.argument.StringCommand; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.event.StringCommandEvent; +import net.pitan76.mcpitanlib.api.util.TextUtil; import org.jetbrains.annotations.Nullable; import java.io.File; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/LiteralCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/LiteralCommand.java new file mode 100644 index 000000000..f382775a9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/LiteralCommand.java @@ -0,0 +1,7 @@ +package net.pitan76.mcpitanlib.api.command; + +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; + +public abstract class LiteralCommand extends AbstractCommand { + +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntitiesCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntitiesCommand.java similarity index 72% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntitiesCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntitiesCommand.java index 23f823ed8..36c46a827 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntitiesCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntitiesCommand.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; -import ml.pkom.mcpitanlibarch.api.event.EntitiesCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.event.EntitiesCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntityCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntityCommand.java similarity index 72% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntityCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntityCommand.java index fa098416e..caf51cac1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/EntityCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntityCommand.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; -import ml.pkom.mcpitanlibarch.api.event.EntityCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.event.EntityCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/GreedyStringCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/GreedyStringCommand.java similarity index 58% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/GreedyStringCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/GreedyStringCommand.java index 3be923519..afff6b7e8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/GreedyStringCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/GreedyStringCommand.java @@ -1,8 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; import com.mojang.brigadier.arguments.StringArgumentType; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.StringCommandEvent; public abstract class GreedyStringCommand extends StringCommand { @Override diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/IntegerCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/IntegerCommand.java similarity index 71% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/IntegerCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/IntegerCommand.java index b20f8b2d3..bfcdec912 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/IntegerCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/IntegerCommand.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; import com.mojang.brigadier.arguments.IntegerArgumentType; -import ml.pkom.mcpitanlibarch.api.event.IntegerCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.event.IntegerCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; public abstract class IntegerCommand extends RequiredCommand { @Override diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/ItemCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java similarity index 73% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/ItemCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java index 960517214..828172118 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/ItemCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; -import ml.pkom.mcpitanlibarch.api.event.ItemCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.event.ItemCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.ItemStackArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayerCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayerCommand.java similarity index 72% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayerCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayerCommand.java index 26c2353ca..90995ac8e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayerCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayerCommand.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; -import ml.pkom.mcpitanlibarch.api.event.PlayerCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.event.PlayerCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayersCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayersCommand.java similarity index 66% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayersCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayersCommand.java index 1d798f9de..d49a91420 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/PlayersCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayersCommand.java @@ -1,8 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; -import ml.pkom.mcpitanlibarch.api.event.EntityCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.PlayersCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.event.PlayersCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/RequiredCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/RequiredCommand.java similarity index 58% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/RequiredCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/RequiredCommand.java index daca91561..a3428290f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/RequiredCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/RequiredCommand.java @@ -1,8 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; import com.mojang.brigadier.arguments.ArgumentType; -import com.mojang.brigadier.arguments.IntegerArgumentType; -import ml.pkom.mcpitanlibarch.api.command.AbstractCommand; +import net.pitan76.mcpitanlib.api.command.AbstractCommand; public abstract class RequiredCommand extends AbstractCommand { public abstract String getArgumentName(); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/StringCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/StringCommand.java similarity index 71% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/StringCommand.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/StringCommand.java index 68f6d5989..008bfefaf 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/command/argument/StringCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/StringCommand.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.command.argument; +package net.pitan76.mcpitanlib.api.command.argument; import com.mojang.brigadier.arguments.StringArgumentType; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.StringCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.event.StringCommandEvent; public abstract class StringCommand extends RequiredCommand { @Override diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/EntityTypeBuilder.java similarity index 92% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/entity/EntityTypeBuilder.java index 3ce02458e..25263250e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/EntityTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/EntityTypeBuilder.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.entity; +package net.pitan76.mcpitanlib.api.entity; import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; @@ -6,12 +6,11 @@ import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; -import ml.pkom.mcpitanlibarch.api.entity.ExtendEntityType.EntityFactory; public class EntityTypeBuilder { private SpawnGroup spawnGroup; - private EntityFactory factory; + private ExtendEntityType.EntityFactory factory; private EntityDimensions entityDimensions; private boolean saveable; private boolean summonable; @@ -37,7 +36,7 @@ public EntityTypeBuilder() { } @Deprecated - public EntityTypeBuilder(SpawnGroup spawnGroup, EntityFactory factory) { + public EntityTypeBuilder(SpawnGroup spawnGroup, ExtendEntityType.EntityFactory factory) { this(); this.spawnGroup = spawnGroup; this.factory = factory; @@ -47,7 +46,7 @@ public static EntityTypeBuilder create() { return new EntityTypeBuilder<>(); } - public static EntityTypeBuilder create(SpawnGroup spawnGroup, EntityFactory factory) { + public static EntityTypeBuilder create(SpawnGroup spawnGroup, ExtendEntityType.EntityFactory factory) { return new EntityTypeBuilder<>(spawnGroup, factory); } diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntity.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntity.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntity.java index 46325e4d3..8f8bbdd6c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntity.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.entity; +package net.pitan76.mcpitanlib.api.entity; -import ml.pkom.mcpitanlibarch.api.nbt.NbtTag; +import net.pitan76.mcpitanlib.api.nbt.NbtTag; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.nbt.NbtCompound; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntityType.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntityType.java index 83f405683..bfaebfdfa 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/ExtendEntityType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntityType.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.entity; +package net.pitan76.mcpitanlib.api.entity; import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index cab6612fb..76e5d1910 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -1,9 +1,9 @@ -package ml.pkom.mcpitanlibarch.api.entity; +package net.pitan76.mcpitanlib.api.entity; import dev.architectury.registry.menu.ExtendedMenuProvider; -import ml.pkom.mcpitanlibarch.api.gui.ExtendedNamedScreenHandlerFactory; -import ml.pkom.mcpitanlibarch.api.util.ScreenHandlerUtil; -import ml.pkom.mcpitanlibarch.core.player.ItemCooldown; +import net.pitan76.mcpitanlib.api.gui.ExtendedNamedScreenHandlerFactory; +import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; +import net.pitan76.mcpitanlib.core.player.ItemCooldown; import net.minecraft.block.BlockState; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.ItemCooldownManager; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/BaseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/BaseEvent.java new file mode 100644 index 000000000..4e770c96c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/BaseEvent.java @@ -0,0 +1,4 @@ +package net.pitan76.mcpitanlib.api.event; + +public class BaseEvent { +} \ No newline at end of file diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java similarity index 87% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java index 36b944fb0..ce84a734d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/CommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.StringRange; -import ml.pkom.mcpitanlibarch.api.command.AbstractCommand; +import net.pitan76.mcpitanlib.api.command.AbstractCommand; public class CommandEvent { public CommandContext context; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntitiesCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntitiesCommandEvent.java similarity index 82% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntitiesCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/EntitiesCommandEvent.java index d4c71c1f6..a54b1d57a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntitiesCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntitiesCommandEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import ml.pkom.mcpitanlibarch.api.command.argument.EntitiesCommand; +import net.pitan76.mcpitanlib.api.command.argument.EntitiesCommand; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntityCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntityCommandEvent.java similarity index 82% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntityCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/EntityCommandEvent.java index fadf3e096..150e0fd4e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/EntityCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntityCommandEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import ml.pkom.mcpitanlibarch.api.command.argument.EntityCommand; +import net.pitan76.mcpitanlib.api.command.argument.EntityCommand; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/IntegerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/IntegerCommandEvent.java similarity index 72% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/IntegerCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/IntegerCommandEvent.java index 8bb2ed715..240e325d3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/IntegerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/IntegerCommandEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.arguments.IntegerArgumentType; -import ml.pkom.mcpitanlibarch.api.command.argument.IntegerCommand; +import net.pitan76.mcpitanlib.api.command.argument.IntegerCommand; public class IntegerCommandEvent extends RequiredCommandEvent { public Integer getValue() { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ItemCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ItemCommandEvent.java similarity index 75% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ItemCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/ItemCommandEvent.java index 3e835b698..1490faf79 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ItemCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ItemCommandEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; -import ml.pkom.mcpitanlibarch.api.command.argument.ItemCommand; +import net.pitan76.mcpitanlib.api.command.argument.ItemCommand; import net.minecraft.command.argument.ItemStackArgumentType; import net.minecraft.item.Item; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayerCommandEvent.java similarity index 82% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayerCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayerCommandEvent.java index 49e85f5d6..a755544ef 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayerCommandEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import ml.pkom.mcpitanlibarch.api.command.argument.PlayerCommand; +import net.pitan76.mcpitanlib.api.command.argument.PlayerCommand; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayersCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayersCommandEvent.java similarity index 82% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayersCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayersCommandEvent.java index b8ba0c265..97c918c01 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/PlayersCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayersCommandEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import ml.pkom.mcpitanlibarch.api.command.argument.PlayersCommand; +import net.pitan76.mcpitanlib.api.command.argument.PlayersCommand; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/RequiredCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/RequiredCommandEvent.java similarity index 73% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/RequiredCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/RequiredCommandEvent.java index 13bf6e99c..0ac500819 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/RequiredCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/RequiredCommandEvent.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; public abstract class RequiredCommandEvent extends ServerCommandEvent { public abstract Object getValue(); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java index 46260a71f..6c0256f5b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/ServerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java @@ -1,10 +1,10 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.Command; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.command.ServerCommandSource; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/StringCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/StringCommandEvent.java similarity index 71% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/StringCommandEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/StringCommandEvent.java index d4a9b3963..35042c8f6 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/StringCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/StringCommandEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event; +package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.arguments.StringArgumentType; -import ml.pkom.mcpitanlibarch.api.command.argument.StringCommand; +import net.pitan76.mcpitanlib.api.command.argument.StringCommand; public class StringCommandEvent extends RequiredCommandEvent { public String getValue() { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockBreakEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java similarity index 86% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockBreakEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java index 1be1588d5..2291afa6f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockBreakEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; -import ml.pkom.mcpitanlibarch.api.entity.Player; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.BlockPos; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockPlacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java similarity index 91% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockPlacedEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java index e69aba827..8e39771e9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockPlacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java similarity index 89% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java index 1edb26048..82594c6e4 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockScheduledTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java index e681ed49a..31a5e3e3e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; -import ml.pkom.mcpitanlibarch.api.entity.Player; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/OutlineShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java similarity index 89% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/OutlineShapeEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java index ad8722a0f..db43da8fc 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/OutlineShapeEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; import net.minecraft.util.math.BlockPos; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java index 4e26da3b1..8be82972f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/PickStackEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/ScreenHandlerCreateEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java similarity index 84% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/ScreenHandlerCreateEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java index ec129d2a2..aeb7c404f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/ScreenHandlerCreateEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; -import ml.pkom.mcpitanlibarch.api.entity.Player; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java index 3a4aa68ff..bdabae527 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/StateReplacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.inventory.Inventory; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/TileCreateEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/TileCreateEvent.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/TileCreateEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/TileCreateEvent.java index 1e96b73e0..2378118c5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/TileCreateEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/TileCreateEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event.block; +package net.pitan76.mcpitanlib.api.event.block; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/result/BlockBreakResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/result/BlockBreakResult.java similarity index 82% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/result/BlockBreakResult.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/block/result/BlockBreakResult.java index 35c8ab0cb..4973eee09 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/block/result/BlockBreakResult.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/result/BlockBreakResult.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.event.block.result; +package net.pitan76.mcpitanlib.api.event.block.result; import net.minecraft.block.BlockState; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/CraftEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CraftEvent.java similarity index 90% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/CraftEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CraftEvent.java index eb9a25cb1..6281f4248 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/CraftEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CraftEvent.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.event.item; +package net.pitan76.mcpitanlib.api.event.item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemAppendTooltipEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java similarity index 90% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemAppendTooltipEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java index a1a21932a..215179dcf 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemAppendTooltipEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event.item; +package net.pitan76.mcpitanlib.api.event.item; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemFinishUsingEvent.java similarity index 87% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemFinishUsingEvent.java index 6e68eaa8a..9479c4b6d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemFinishUsingEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemFinishUsingEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event.item; +package net.pitan76.mcpitanlib.api.event.item; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.world.World; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java similarity index 89% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java index 30a675cd2..d8049cb1b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event.item; +package net.pitan76.mcpitanlib.api.event.item; -import ml.pkom.mcpitanlibarch.api.entity.Player; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java index a880b3143..70f1028cc 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event.item; +package net.pitan76.mcpitanlib.api.event.item; -import ml.pkom.mcpitanlibarch.api.entity.Player; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java similarity index 89% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java index e825bce27..bea21498a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/item/ItemUseOnEntityEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event.item; +package net.pitan76.mcpitanlib.api.event.item; -import ml.pkom.mcpitanlibarch.api.entity.Player; -import ml.pkom.mcpitanlibarch.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/tile/TileTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java similarity index 91% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/tile/TileTickEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java index 2a7c9f628..b3000b0d3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/tile/TileTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.event.tile; +package net.pitan76.mcpitanlib.api.event.tile; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/AttackEntityEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java similarity index 90% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/AttackEntityEventRegistry.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java index 8e8cf7638..5165e954e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/AttackEntityEventRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.event.v0; +package net.pitan76.mcpitanlib.api.event.v0; import dev.architectury.event.EventResult; import dev.architectury.event.events.common.PlayerEvent; -import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.Hand; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/ClientTickEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/ClientTickEventRegistry.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/ClientTickEventRegistry.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/ClientTickEventRegistry.java index c6635138d..4c4efbe16 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/ClientTickEventRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/ClientTickEventRegistry.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.event.v0; +package net.pitan76.mcpitanlib.api.event.v0; import dev.architectury.event.events.client.ClientTickEvent; import net.fabricmc.api.EnvType; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/EventRegistry.java similarity index 91% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/EventRegistry.java index 7112e8336..6bdf7f1f3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/EventRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/EventRegistry.java @@ -1,9 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.event.v0; +package net.pitan76.mcpitanlib.api.event.v0; import dev.architectury.event.events.common.LifecycleEvent; -import dev.architectury.event.events.common.PlayerEvent; -import ml.pkom.mcpitanlibarch.api.event.v0.event.ItemStackActionEvent; -import ml.pkom.mcpitanlibarch.api.event.v0.event.ServerConnectionEvent; +import net.pitan76.mcpitanlib.api.event.v0.event.ItemStackActionEvent; +import net.pitan76.mcpitanlib.api.event.v0.event.ServerConnectionEvent; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ItemStackActionEvent.java similarity index 89% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ItemStackActionEvent.java index 6afbab852..c5fd45409 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ItemStackActionEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ItemStackActionEvent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.event.v0.event; +package net.pitan76.mcpitanlib.api.event.v0.event; -import ml.pkom.mcpitanlibarch.api.event.v0.EventRegistry; +import net.pitan76.mcpitanlib.api.event.v0.EventRegistry; import net.minecraft.item.ItemStack; import java.util.ArrayList; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java index 472196688..012868689 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/RecipeManagerEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.event.v0.event; +package net.pitan76.mcpitanlib.api.event.v0.event; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; -import ml.pkom.mcpitanlibarch.api.recipe.CompatibleRecipeEntry; +import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeType; import net.minecraft.resource.ResourceManager; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ServerConnectionEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ServerConnectionEvent.java similarity index 79% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ServerConnectionEvent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ServerConnectionEvent.java index 2c13972bf..ec21cc0e7 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/event/v0/event/ServerConnectionEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ServerConnectionEvent.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.event.v0.event; +package net.pitan76.mcpitanlib.api.event.v0.event; import dev.architectury.event.events.common.PlayerEvent; -import ml.pkom.mcpitanlibarch.api.event.v0.EventRegistry; +import net.pitan76.mcpitanlib.api.event.v0.EventRegistry; public class ServerConnectionEvent { // Architectury: PlayerEvent diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/RecipeManagerRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/RecipeManagerRegistry.java index 33b46fc3a..840b0f04e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/RecipeManagerRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/RecipeManagerRegistry.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.api.event.v1; -import ml.pkom.mcpitanlibarch.api.event.v0.event.RecipeManagerEvent; +import net.pitan76.mcpitanlib.api.event.v0.event.RecipeManagerEvent; import java.util.ArrayList; import java.util.List; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedNamedScreenHandlerFactory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedNamedScreenHandlerFactory.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedNamedScreenHandlerFactory.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedNamedScreenHandlerFactory.java index 2a97c5b82..863fc52e9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedNamedScreenHandlerFactory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedNamedScreenHandlerFactory.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.gui; +package net.pitan76.mcpitanlib.api.gui; import dev.architectury.registry.menu.ExtendedMenuProvider; import net.minecraft.entity.player.PlayerEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandler.java similarity index 92% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandler.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandler.java index d6f3d6fe9..45d413cfb 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandler.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.gui; +package net.pitan76.mcpitanlib.api.gui; import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.ScreenHandlerType; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerTypeBuilder.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerTypeBuilder.java index 189408749..9c6a67e60 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/ExtendedScreenHandlerTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerTypeBuilder.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.gui; +package net.pitan76.mcpitanlib.api.gui; import dev.architectury.registry.menu.MenuRegistry; import net.minecraft.entity.player.PlayerInventory; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java similarity index 98% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java index 54f48dfb8..a946c8d7d 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.gui; +package net.pitan76.mcpitanlib.api.gui; -import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.Inventory; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandlerTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandlerTypeBuilder.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandlerTypeBuilder.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandlerTypeBuilder.java index d95902f28..e3c03f1b4 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/SimpleScreenHandlerTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandlerTypeBuilder.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.gui; +package net.pitan76.mcpitanlib.api.gui; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/inventory/IInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/IInventory.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/inventory/IInventory.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/IInventory.java index 95554c211..aea703cca 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/inventory/IInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/IInventory.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.gui.inventory; +package net.pitan76.mcpitanlib.api.gui.inventory; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventories; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java index 3e67fdf41..3c6550745 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/gui/slot/CompatibleSlot.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.gui.slot; +package net.pitan76.mcpitanlib.api.gui.slot; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ArmorEquipmentType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ArmorEquipmentType.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java index 867245177..9b68fb13a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ArmorEquipmentType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; import net.minecraft.entity.EquipmentSlot; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleArmorMaterial.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java index 0fe13c286..90bee44df 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleArmorMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; import net.minecraft.entity.EquipmentSlot; import net.minecraft.item.ArmorMaterial; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index e3e1fdaa6..10311f23f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java similarity index 77% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java index a0221f1a1..0c9748f87 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java @@ -1,6 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; import dev.architectury.registry.CreativeTabRegistry; +import net.pitan76.mcpitanlib.api.util.TextUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; @@ -60,18 +61,6 @@ public void setTexture(String texture) { } public ItemGroup build() { - /* - CreativeTabRegistry tabSupplier = CreativeTabRegistry.create(identifier, (builder -> { - if (displayName != null) builder.displayName(displayName); - if (iconSupplier != null) builder.icon(iconSupplier); - if (noRenderedName) builder.noRenderedName(); - if (noScrollbar) builder.noScrollbar(); - if (special) builder.special(); - if (texture != null) builder.texture(texture); - })); - return tabSupplier.get(); - - */ ItemGroup itemGroup = CreativeTabRegistry.create(identifier, iconSupplier); if (displayName != null) itemGroup.setName(displayName.getString()); if (noRenderedName) itemGroup.setName(""); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabManager.java similarity index 98% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabManager.java index 00935c38b..6347c9571 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/CreativeTabManager.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabManager.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/DefaultItemGroups.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/DefaultItemGroups.java index 05ef99108..ba9b0ab11 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/DefaultItemGroups.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/DefaultItemGroups.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; import net.minecraft.item.ItemGroup; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index c90de9ab8..faaf70183 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -1,7 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; -import ml.pkom.mcpitanlibarch.Dummy; -import ml.pkom.mcpitanlibarch.api.event.item.*; +import net.pitan76.mcpitanlib.core.Dummy; import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; @@ -14,6 +13,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.*; import org.jetbrains.annotations.Nullable; import java.util.List; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java similarity index 92% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java index 23cc52d91..af1e44c7a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendItemProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java @@ -1,9 +1,10 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; -import ml.pkom.mcpitanlibarch.api.event.item.*; +import net.pitan76.mcpitanlib.api.event.item.*; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.TypedActionResult; +import net.pitan76.mcpitanlib.api.event.item.*; public interface ExtendItemProvider { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java index 8b4462882..eb9f8fe7a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/ExtendSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/FixedRecipeRemainderItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/FixedRecipeRemainderItem.java similarity index 77% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/FixedRecipeRemainderItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/FixedRecipeRemainderItem.java index 1d9a3d348..c96382ed2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/FixedRecipeRemainderItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/FixedRecipeRemainderItem.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.item; +package net.pitan76.mcpitanlib.api.item; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java similarity index 85% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java index dbb4a43e5..e0a939eb1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java @@ -1,11 +1,10 @@ -package ml.pkom.mcpitanlibarch.api.item.tool; +package net.pitan76.mcpitanlib.api.item.tool; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; import net.minecraft.item.AxeItem; import net.minecraft.item.ItemStack; -import net.minecraft.item.PickaxeItem; import net.minecraft.item.ToolMaterial; public class CompatibleAxeItem extends AxeItem implements ExtendItemProvider { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java similarity index 85% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java index 45758e496..24ca5181e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java @@ -1,9 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.item.tool; +package net.pitan76.mcpitanlib.api.item.tool; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; -import net.minecraft.item.AxeItem; import net.minecraft.item.HoeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java similarity index 88% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java index 0aa7f3863..ac12f12f8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.item.tool; +package net.pitan76.mcpitanlib.api.item.tool; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.PickaxeItem; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java similarity index 88% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java index b466617cb..6e9b4221c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.item.tool; +package net.pitan76.mcpitanlib.api.item.tool; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.ShovelItem; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java similarity index 85% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java index de76d31e9..4758cb995 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java @@ -1,9 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.item.tool; +package net.pitan76.mcpitanlib.api.item.tool; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.minecraft.block.BlockState; -import net.minecraft.item.AxeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java similarity index 69% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleToolMaterial.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java index 5a5636e9d..22631df08 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/item/tool/CompatibleToolMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.item.tool; +package net.pitan76.mcpitanlib.api.item.tool; import net.minecraft.item.ToolMaterial; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/nbt/NbtTag.java b/common/src/main/java/net/pitan76/mcpitanlib/api/nbt/NbtTag.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/nbt/NbtTag.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/nbt/NbtTag.java index b46a37933..c82b24cf1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/nbt/NbtTag.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/nbt/NbtTag.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.nbt; +package net.pitan76.mcpitanlib.api.nbt; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetworking.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/ClientNetworking.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetworking.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/network/ClientNetworking.java index 99676c043..d24de60c8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ClientNetworking.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/ClientNetworking.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.network; +package net.pitan76.mcpitanlib.api.network; import dev.architectury.networking.NetworkManager; import net.minecraft.client.MinecraftClient; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/PacketByteUtil.java similarity index 99% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/network/PacketByteUtil.java index 9ba299858..3e17997a4 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/PacketByteUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/PacketByteUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.network; +package net.pitan76.mcpitanlib.api.network; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ServerNetworking.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/ServerNetworking.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ServerNetworking.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/network/ServerNetworking.java index 1f1ec4106..69577d801 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/network/ServerNetworking.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/ServerNetworking.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.network; +package net.pitan76.mcpitanlib.api.network; import dev.architectury.networking.NetworkManager; import net.minecraft.network.PacketByteBuf; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/packet/UpdatePacketType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/packet/UpdatePacketType.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/packet/UpdatePacketType.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/packet/UpdatePacketType.java index c2f6a40f1..2690dae1c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/packet/UpdatePacketType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/packet/UpdatePacketType.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.packet; +package net.pitan76.mcpitanlib.api.packet; public class UpdatePacketType { public static final UpdatePacketType NONE = new UpdatePacketType("NONE"); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java index d73370aed..9ff43baaf 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/recipe/CompatibleRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.recipe; +package net.pitan76.mcpitanlib.api.recipe; -import ml.pkom.mcpitanlibarch.api.util.RecipeUtil; +import net.pitan76.mcpitanlib.api.util.RecipeUtil; import net.minecraft.recipe.*; import net.minecraft.util.Identifier; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index 7a5b80f8f..d0a316188 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -2,11 +2,11 @@ import dev.architectury.registry.registries.RegistrySupplier; import net.pitan76.mcpitanlib.MCPitanLib; -import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; -import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; -import ml.pkom.mcpitanlibarch.api.gui.ExtendedScreenHandlerTypeBuilder; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.CreativeTabManager; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; +import net.pitan76.mcpitanlib.api.gui.ExtendedScreenHandlerTypeBuilder; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.CreativeTabManager; import net.pitan76.mcpitanlib.api.util.BlockUtil; import net.pitan76.mcpitanlib.api.util.ItemUtil; import net.pitan76.mcpitanlib.core.registry.FuelRegistry; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/MineableToolTags.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/MineableToolTags.java similarity index 73% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/MineableToolTags.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/tag/MineableToolTags.java index 5f383d112..85aeaacf9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/MineableToolTags.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/MineableToolTags.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.tag; +package net.pitan76.mcpitanlib.api.tag; public enum MineableToolTags { NONE, diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java index 94cd851f8..487c7509a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tag/TagKey.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.tag; +package net.pitan76.mcpitanlib.api.tag; -import ml.pkom.mcpitanlibarch.api.util.EntityTypeUtil; -import ml.pkom.mcpitanlibarch.api.util.FluidUtil; +import net.pitan76.mcpitanlib.api.util.EntityTypeUtil; +import net.pitan76.mcpitanlib.api.util.FluidUtil; import net.minecraft.block.Block; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/text/TextComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/text/TextComponent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java index f7c701f5a..ecb647bdf 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/text/TextComponent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.text; +package net.pitan76.mcpitanlib.api.text; -import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.util.TextUtil; import net.minecraft.text.MutableText; import net.minecraft.text.Text; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/text/VariableTextComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/VariableTextComponent.java similarity index 82% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/text/VariableTextComponent.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/text/VariableTextComponent.java index fd3905b7c..b231f4071 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/text/VariableTextComponent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/VariableTextComponent.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.text; +package net.pitan76.mcpitanlib.api.text; -import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.util.TextUtil; // 可変TextComponent public class VariableTextComponent extends TextComponent { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/BlockEntityTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/BlockEntityTypeBuilder.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java index 7df27746e..a098ed5a3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/BlockEntityTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.tile; +package net.pitan76.mcpitanlib.api.tile; import com.mojang.datafixers.types.Type; -import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java similarity index 89% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java index ac73c7841..1db7b3532 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.tile; +package net.pitan76.mcpitanlib.api.tile; -import ml.pkom.mcpitanlibarch.api.event.block.TileCreateEvent; -import ml.pkom.mcpitanlibarch.api.packet.UpdatePacketType; -import ml.pkom.mcpitanlibarch.api.world.ExtendWorld; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; +import net.pitan76.mcpitanlib.api.world.ExtendWorld; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntityTicker.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java similarity index 83% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntityTicker.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java index 5c3705bb0..745e6426f 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/tile/ExtendBlockEntityTicker.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.tile; +package net.pitan76.mcpitanlib.api.tile; -import ml.pkom.mcpitanlibarch.api.event.tile.TileTickEvent; +import net.pitan76.mcpitanlib.api.event.tile.TileTickEvent; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityTicker; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/MinecraftServerTimerAccess.java b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/MinecraftServerTimerAccess.java similarity index 79% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/MinecraftServerTimerAccess.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/timer/MinecraftServerTimerAccess.java index f7e41c65f..6d4c81259 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/MinecraftServerTimerAccess.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/MinecraftServerTimerAccess.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.timer; +package net.pitan76.mcpitanlib.api.timer; import java.util.function.Supplier; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/ServerWorldTimerAccess.java b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/ServerWorldTimerAccess.java similarity index 78% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/ServerWorldTimerAccess.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/timer/ServerWorldTimerAccess.java index a26c7e689..01eeb5f27 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/ServerWorldTimerAccess.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/ServerWorldTimerAccess.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.timer; +package net.pitan76.mcpitanlib.api.timer; import java.util.function.Supplier; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/TimerItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/TimerItem.java similarity index 89% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/TimerItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/timer/TimerItem.java index 25311a365..ecf00fc80 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/timer/TimerItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/TimerItem.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.timer; +package net.pitan76.mcpitanlib.api.timer; import java.util.function.Supplier; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ActionResultUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ActionResultUtil.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ActionResultUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/ActionResultUtil.java index 8977a4843..49bd97159 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ActionResultUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ActionResultUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.util.ActionResult; import net.minecraft.util.TypedActionResult; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java index da98e7d2f..b5e48b6e4 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/BlockEntityTypeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java index 300abe170..26444117f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; -import ml.pkom.mcpitanlibarch.api.tag.MineableToolTags; -import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.tag.MineableToolTags; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java index aa55d0046..89dd92c41 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.recipe.CompatibleRecipeEntry; -import ml.pkom.mcpitanlibarch.api.util.RecipeUtil; +import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; +import net.pitan76.mcpitanlib.api.util.RecipeUtil; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java index 04b47a975..8187c3fc2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/DamageSourceUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java index e1af4e49b..eeac60409 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityTypeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.entity.EntityType; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index 32fbee46f..9e10354f9 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EquipMaterialUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EquipMaterialUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java index b29b6daed..0b1487723 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/EquipMaterialUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.item.ArmorEquipmentType; -import ml.pkom.mcpitanlibarch.api.item.CompatibleArmorMaterial; +import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; +import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; import net.minecraft.item.ToolMaterial; import net.minecraft.recipe.Ingredient; import net.minecraft.sound.SoundEvent; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java index 3bd2481e8..44334ccc2 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/FluidUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.fluid.Fluid; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java similarity index 91% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java index af34ea1ea..2f9e22b3b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/IngredientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.recipe.Ingredient; import net.minecraft.tag.TagKey; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index 3f58b6f97..c356d1be7 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -1,10 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.item.ItemStack; import net.minecraft.util.collection.DefaultedList; -import java.util.Objects; - public class InventoryUtil { public static boolean insertItem(ItemStack insertStack, DefaultedList inventory) { return insertItem(insertStack, inventory, false); diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java similarity index 93% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index e4765aa5a..96f8a019b 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java index b7c2a5853..ca7be1810 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java index de82e535f..3fea12324 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/MathUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.util.math.Quaternion; import net.minecraft.util.math.Vec3f; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PersistentStateUtil.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/PersistentStateUtil.java index 7f657f8b7..35c861d15 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PersistentStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PersistentStateUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.MinecraftServer; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java index 975164401..88ce887a5 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlatformUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import dev.architectury.platform.Platform; import dev.architectury.utils.Env; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerUtil.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerUtil.java index c6cbac3c0..017cc0f68 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/PlayerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerUtil.java @@ -1,9 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; -import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java index 4849d9415..4096285f4 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/RecipeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ResourceUtil.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/ResourceUtil.java index 271741bed..7efbbf545 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ResourceUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ResourceUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.resource.Resource; import net.minecraft.resource.ResourceManager; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ScreenHandlerUtil.java similarity index 97% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/ScreenHandlerUtil.java index 2c78e2a1d..20b996e4e 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/ScreenHandlerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ScreenHandlerUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import dev.architectury.registry.menu.ExtendedMenuProvider; import dev.architectury.registry.menu.MenuRegistry; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java similarity index 92% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java index aee1aff58..11441b6b1 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SimpleInventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SlotUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java similarity index 90% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SlotUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java index ac3ea4bc4..8a2826b73 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/SlotUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TimerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java similarity index 76% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TimerUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java index 2db5369a1..ffb803902 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/TimerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java @@ -1,7 +1,7 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.timer.MinecraftServerTimerAccess; -import ml.pkom.mcpitanlibarch.api.timer.ServerWorldTimerAccess; +import net.pitan76.mcpitanlib.api.timer.MinecraftServerTimerAccess; +import net.pitan76.mcpitanlib.api.timer.ServerWorldTimerAccess; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ServerWorld; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldRandomUtil.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldRandomUtil.java index bb1714dfe..f3783a539 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldRandomUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldRandomUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; import net.minecraft.world.World; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java similarity index 98% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index e65cd32b3..9bb95e0c8 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.util; +package net.pitan76.mcpitanlib.api.util; -import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.ExperienceOrbEntity; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/MatrixStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java similarity index 62% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/MatrixStackUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java index 36e3e08ec..dc7f4469a 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/MatrixStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java @@ -1,9 +1,9 @@ -package ml.pkom.mcpitanlibarch.api.util.client; +package net.pitan76.mcpitanlib.api.util.client; -import ml.pkom.mcpitanlibarch.api.util.MathUtil; +import net.pitan76.mcpitanlib.api.util.MathUtil; import net.minecraft.client.util.math.MatrixStack; -import static ml.pkom.mcpitanlibarch.api.util.MathUtil.*; +import static net.pitan76.mcpitanlib.api.util.MathUtil.*; public class MatrixStackUtil { public static void multiply(MatrixStack matrixStack, MathUtil.RotationAxisType type, float deg) { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/RenderUtil.java similarity index 95% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/client/RenderUtil.java index bf21dc9d5..d98f56e84 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/RenderUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/RenderUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util.client; +package net.pitan76.mcpitanlib.api.util.client; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.render.GameRenderer; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java index 665281749..f4ed7c906 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/client/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java @@ -1,10 +1,9 @@ -package ml.pkom.mcpitanlibarch.api.util.client; +package net.pitan76.mcpitanlib.api.util.client; -import ml.pkom.mcpitanlibarch.api.client.gui.widget.CompatibleTexturedButtonWidget; -import ml.pkom.mcpitanlibarch.api.client.gui.widget.RedrawableTexturedButtonWidget; -import ml.pkom.mcpitanlibarch.api.util.TextUtil; -import ml.pkom.mcpitanlibarch.api.client.render.DrawObjectDM; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.RenderArgs; +import net.pitan76.mcpitanlib.api.client.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.widget.RedrawableTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; @@ -18,6 +17,7 @@ import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.TextUtil; @Environment(EnvType.CLIENT) public class ScreenUtil { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/BlockEventGenerator.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/BlockEventGenerator.java similarity index 68% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/BlockEventGenerator.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/event/BlockEventGenerator.java index d7429378a..f6290a120 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/BlockEventGenerator.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/BlockEventGenerator.java @@ -1,8 +1,8 @@ -package ml.pkom.mcpitanlibarch.api.util.event; +package net.pitan76.mcpitanlib.api.util.event; -import ml.pkom.mcpitanlibarch.api.event.block.BlockBreakEvent; -import ml.pkom.mcpitanlibarch.api.event.block.BlockPlacedEvent; -import ml.pkom.mcpitanlibarch.api.event.block.StateReplacedEvent; +import net.pitan76.mcpitanlib.api.event.block.BlockBreakEvent; +import net.pitan76.mcpitanlib.api.event.block.BlockPlacedEvent; +import net.pitan76.mcpitanlib.api.event.block.StateReplacedEvent; import net.minecraft.block.Block; public class BlockEventGenerator { diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/ItemEventGenerator.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java similarity index 74% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/ItemEventGenerator.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java index 4bc9991a2..73a18843c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/event/ItemEventGenerator.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.util.event; +package net.pitan76.mcpitanlib.api.util.event; -import ml.pkom.mcpitanlibarch.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.TypedActionResult; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java similarity index 96% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java index bf02fc644..0a8b02ad3 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/BoxUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util.math; +package net.pitan76.mcpitanlib.api.util.math; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java similarity index 94% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java index 7e3b3436f..0364cda41 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/util/math/PosUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.util.math; +package net.pitan76.mcpitanlib.api.util.math; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Position; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java index 1c43533c1..90621f2f3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.util.v1; -import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; -import ml.pkom.mcpitanlibarch.api.tag.MineableToolTags; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.tag.MineableToolTags; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java index 2711c74c9..87c93652d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.util.v1; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java index a30f0d1d3..0c2726b17 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.api.util.v2; -import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.block.Block; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.util.BlockUtil; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java index f98d494fd..b2295f2ce 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.api.util.v2; -import ml.pkom.mcpitanlibarch.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.util.ItemUtil; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/CompatiblePersistentState.java b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java similarity index 89% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/world/CompatiblePersistentState.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java index d7a50e4f6..c8206f828 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/CompatiblePersistentState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java @@ -1,4 +1,4 @@ -package ml.pkom.mcpitanlibarch.api.world; +package net.pitan76.mcpitanlib.api.world; import net.minecraft.nbt.NbtCompound; import net.minecraft.world.PersistentState; diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java b/common/src/main/java/net/pitan76/mcpitanlib/api/world/ExtendWorld.java similarity index 91% rename from common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/world/ExtendWorld.java index 4d74d03a8..cabc6499c 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/api/world/ExtendWorld.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/world/ExtendWorld.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.api.world; +package net.pitan76.mcpitanlib.api.world; -import ml.pkom.mcpitanlibarch.api.util.WorldUtil; +import net.pitan76.mcpitanlib.api.util.WorldUtil; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/Dummy.java b/common/src/main/java/net/pitan76/mcpitanlib/core/Dummy.java new file mode 100644 index 000000000..0386ac276 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/Dummy.java @@ -0,0 +1,4 @@ +package net.pitan76.mcpitanlib.core; + +public class Dummy { +} diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/core/player/ItemCooldown.java b/common/src/main/java/net/pitan76/mcpitanlib/core/player/ItemCooldown.java similarity index 81% rename from common/src/main/java/ml/pkom/mcpitanlibarch/core/player/ItemCooldown.java rename to common/src/main/java/net/pitan76/mcpitanlib/core/player/ItemCooldown.java index fcdb43b9d..2987a56aa 100644 --- a/common/src/main/java/ml/pkom/mcpitanlibarch/core/player/ItemCooldown.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/player/ItemCooldown.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.core.player; +package net.pitan76.mcpitanlib.core.player; -import ml.pkom.mcpitanlibarch.api.entity.Player; +import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.item.Item; public class ItemCooldown { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java b/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java index b1caccdf0..e4739840c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.debug; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItem; import static net.pitan76.mcpitanlib.MCPitanLib.*; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 69836997c..2d61563f5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.mixin; -import ml.pkom.mcpitanlibarch.api.event.item.*; -import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider; -import ml.pkom.mcpitanlibarch.api.item.ExtendItemProvider.Options; +import net.pitan76.mcpitanlib.api.event.item.*; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider.Options; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java index 5575a4c0c..0c5c2790b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.mixin; -import ml.pkom.mcpitanlibarch.api.event.v0.event.ItemStackActionEvent; +import net.pitan76.mcpitanlib.api.event.v0.event.ItemStackActionEvent; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; import org.spongepowered.asm.mixin.Mixin; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java index 977645d26..47beee8aa 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.mixin; -import ml.pkom.mcpitanlibarch.api.timer.MinecraftServerTimerAccess; -import ml.pkom.mcpitanlibarch.api.timer.TimerItem; +import net.pitan76.mcpitanlib.api.timer.MinecraftServerTimerAccess; +import net.pitan76.mcpitanlib.api.timer.TimerItem; import net.minecraft.server.MinecraftServer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java index 69d875fbc..d0f573b78 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java @@ -3,7 +3,7 @@ import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; import net.pitan76.mcpitanlib.api.event.v1.RecipeManagerRegistry; -import ml.pkom.mcpitanlibarch.api.event.v0.event.RecipeManagerEvent; +import net.pitan76.mcpitanlib.api.event.v0.event.RecipeManagerEvent; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; import net.minecraft.recipe.RecipeType; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java index ee9e64cfa..001458785 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.mixin; -import ml.pkom.mcpitanlibarch.api.timer.ServerWorldTimerAccess; -import ml.pkom.mcpitanlibarch.api.timer.TimerItem; +import net.pitan76.mcpitanlib.api.timer.ServerWorldTimerAccess; +import net.pitan76.mcpitanlib.api.timer.TimerItem; import net.minecraft.server.world.ServerWorld; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java index b22415118..b66d9d08f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.test; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import ml.pkom.mcpitanlibarch.api.command.CommandSettings; -import ml.pkom.mcpitanlibarch.api.command.LiteralCommand; -import ml.pkom.mcpitanlibarch.api.command.argument.IntegerCommand; -import ml.pkom.mcpitanlibarch.api.event.IntegerCommandEvent; -import ml.pkom.mcpitanlibarch.api.event.ServerCommandEvent; +import net.pitan76.mcpitanlib.api.command.CommandSettings; +import net.pitan76.mcpitanlib.api.command.LiteralCommand; +import net.pitan76.mcpitanlib.api.command.argument.IntegerCommand; +import net.pitan76.mcpitanlib.api.event.IntegerCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.item.ItemStack; public class ExampleCommand extends LiteralCommand { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java index 26e6b3499..b158a46b5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.test; -import ml.pkom.mcpitanlibarch.api.block.ExtendBlock; -import ml.pkom.mcpitanlibarch.api.event.block.BlockUseEvent; -import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; +import net.pitan76.mcpitanlib.api.util.TextUtil; import net.minecraft.block.BlockState; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java index 9b41576d2..46e36b176 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.test; -import ml.pkom.mcpitanlibarch.api.event.item.ItemUseEvent; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.ExtendItem; -import ml.pkom.mcpitanlibarch.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.minecraft.item.ItemStack; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java index 7e5e001b4..53984c5d9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java @@ -1,13 +1,13 @@ package net.pitan76.mcpitanlib.test; -import ml.pkom.mcpitanlibarch.api.block.CompatibleBlockSettings; -import ml.pkom.mcpitanlibarch.api.block.CompatibleMaterial; -import ml.pkom.mcpitanlibarch.api.block.ExtendBlock; -import ml.pkom.mcpitanlibarch.api.command.CommandRegistry; -import ml.pkom.mcpitanlibarch.api.gui.SimpleScreenHandlerTypeBuilder; -import ml.pkom.mcpitanlibarch.api.item.CompatibleItemSettings; -import ml.pkom.mcpitanlibarch.api.item.DefaultItemGroups; -import ml.pkom.mcpitanlibarch.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.command.CommandRegistry; +import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandlerTypeBuilder; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.DefaultItemGroups; +import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.screen.ScreenHandlerType; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java index 9ca57a61b..1f3f31261 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.test; -import ml.pkom.mcpitanlibarch.api.client.registry.ArchRegistryClient; +import net.pitan76.mcpitanlib.api.client.registry.ArchRegistryClient; public class ExampleModClient { public static void init() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java index fc8df857a..c4e562c31 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.test; -import ml.pkom.mcpitanlibarch.api.client.SimpleHandledScreen; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawBackgroundArgs; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.DrawMouseoverTooltipArgs; -import ml.pkom.mcpitanlibarch.api.client.render.handledscreen.RenderArgs; -import net.minecraft.client.gui.widget.TexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.SimpleHandledScreen; +import net.pitan76.mcpitanlib.api.client.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawBackgroundArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawMouseoverTooltipArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; @@ -22,7 +22,7 @@ public ExampleScreen(ScreenHandler handler, PlayerInventory inventory, Text titl public void initOverride() { super.initOverride(); System.out.println("hogehogehoge1111"); - this.addDrawableChild_compatibility(new TexturedButtonWidget(0, 0, 30, 30, 0, 0, 16, GUI, (buttonWidget) -> { + this.addDrawableCTBW(new CompatibleTexturedButtonWidget(0, 0, 30, 30, 0, 0, GUI, (buttonWidget) -> { System.out.println("hogehoge"); })); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java index fbe9110fd..e0e5d8b78 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.test; -import ml.pkom.mcpitanlibarch.api.entity.Player; -import ml.pkom.mcpitanlibarch.api.gui.SimpleScreenHandler; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandler; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; diff --git a/common/src/main/resources/icon.png b/common/src/main/resources/icon.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cdbbf1fa01dc31421f296cf56ce2025b449d13f5 100644 GIT binary patch literal 66211 zcmV);K!(4GP)s<`Q`fHU=`MV2-?1?Uj2I0z z5<(dH0Szx8Vev57LLdf&G>n9VkZcVW(jcCA;=v;g0s$H%1lGWa!FWd4jPcl}ZL4Wl zyW3q|T~%GzbNMfOXU5_oA~GXmM?~h{|KiH%FTjq9Hs-P){k5oG{y^JaM{Rh4mceu`7>S-Ac4M9<{%v z@RVZMh4wO)$iB2W2p{i0`KWHEE9DnxV|*$&a`=!>DLloaR?a#2G(T(eJZkyo>YS@z z8b5~zxbHhvYH1nbve(L4OP7|XmRCqus#}1x{?`QZ)GUzHs>p?N&qb`2IGhU3xmHCk zT`oQ+Was9arYrHTDTg_y zC2M4gS8l{x!`G~X8h#%OB()Ao>2jm{6koD5ay&{FLC(sVYju>-gs;`}vU#L!yGtH%+7fLEU*eml zNy8=lzRKb<6v(c$DX3nK5=ud2EX?Ne*ta}aRga7E*!4Z;c%<&BU3tg(mdX?Jh-q`_ z=6n-1+LT9*_8Jt(^;sYy^DK&{*%nH>y13$WQ@nS1a{11oFVV*FIhq{4WR(Pn@p0Qv zDU=dzPKcM3OHJUHaQl8#wYWLBi_oTU71l=@zY9J`Te1q$JfQ|ebMYlbkmE6h zFS(#{>1wpQK2!54Q|aa?iuk#Pd6BDkVeKMp_Z8Cn(8l;uco!bIbaQxw@SHMC(azyf z%VQV(tpd4)s|MBjyPJBiDL&*kCtZ$qsyro_;ycBo_Wjh#l&k+G!__H}IV+^5!f{;4 zt3(^)OSCzfDSYY@nv>TYMN)G`)$qG2pb~8@U5wB1NYkgZbMU(;h`CB(7o~FDFxT3c zLpukb3YHo^4X630qvn*hWNif667Q*WG32a?IFB$24{@r_9iHOja>TSHt170crK>$5 zUDM<(np_)*476cxrPf}l#S*`xoRxD)aCHhK78n&*-o!T^5`dt&$ zbMm_gj~d^Urk1`$vkN{)yDxs<-=(-({B=VrNK0|M((b~qgfE46Nw*8kNtY^-c!D~Y zJ{7VlP1@hmdIVve(oXS+)0H4j7l&)#MQpW{$`-Nr_yI0+}O7cNO^i z;^(BxBGbPkhyW(@a=7w|iNaJ&` z3+>$WyFyMl*Jx9GPNC%7P$fZ7!-d~D7fl?_xsOtJNg5vnVJWXtI8HZ38|NDf>5?la zjLb`Ai{oR#8z6@-wOeqLmD(uIBWEF%+9h^7rB+MMEtR%c%D2?E7gQ#fr$8=KP~VV8 z1@!P7H3~*C=f{8`%upaDfqfYYBqyM!@V5%2440umZsB@h-*+{q?@aZh>!2;sOyT$a z{@_AN;L%MjdClhT)MRaDEO*u!(Q>7cPldx)q3Zty;kS{ZWXDWy-tC44SE@{QBw<~u^Wm++CE6L$^RTy)W(o{H8zoL?;@u=muE51ZqqfeohZVvr* zz|;qtb2ZgycEOiiOS|A}uCS6@Ea%e6(WY*cIry9lri8!f@g+6dS{}7cf+>&E@g-@x zT3l{#h^pHMlIA;=Zb!J71(FkRB>^<&fo%c25bP1?5$K`1!M^~VqP-@Fl>!+-k>KMW zQoxJ4#|)iXn-*=fUgx>tso%M_+l5ChZi=Ra&!wM=+XX-O_pWqv@i!Gj>Q=`TzC^n# zJ{?)l$uCY5G&%g7JaY92_*Ajv@{LFDF)eIQ zrkC=KpIV!gR$--iq$|48{Ty+=yQGWTIi^j+X`OdT7r)OLu)hMSt&D=*6-OyAqoDhl zSC71=J|5208R3at% z8h$GNX(^M~8Ytmn{8U^TpA)`mx?O(HQ64d$QkocFqRr(M`cq*4{P&fi`_u!-j9$jr`+Q*#Cto^eID_9OL>I4$1bcGA1lEr9#^VBri5Y* zw-3D|@K0tG)+$(#RtD0cu-RZWjv*g43d;y%73?{*E$9Yl!5)HH%oFar;%n`l!_~rR z9&ubQU5d|@X&-z|!PL^$;&!E-i{A(Kad})9>{7O?qPoK1qFHBVV+pzQ8O&B4ULfMpFUo; z;~3+0q3A;CUhM{4yN2}|*5_WI9fDX`9D!MF*S99v=WHr0;d9}AXp=f`g>&>Zg^>Fw zr#fjVUG4WSakcoXfSS-s@g++oC*W%7Q+zJIWC`R(^R+x`)<-%bPkDs+)KyZ$=iD%H zS##+E#CtSqWsgVewY*c>v~0ODhtYjV7c8AP-`swUaO_FWVv5rR2=$7OOUdOMmow+W z%DtNk?503!${@whQ5;i`F-}02<~juQPD6KSFm#yH4)eHkiY1iC(+vtEr$89u{BOGy zSQ$nph_Gq*b-)%~p!`Enb#g}Mfn4>Iig7TLa0QWiw|+7V^4BQs0L}-;(lCnXXWZ%qb)5mh!qiRr^|g~ zv8!*6o9xmQNKLqv@R#|-pg>qTwQ@K;YSB)?bjVr}NQ(q@lZ&?}SSydoYxSI(3xNEKwuA@9T>tGJ=xwJvh zUZftm^mF?66yFjqq?`K6!1-xj}O01Qh^Ol)*TK} z`tkwY3rhEyLzaJbf}C08Jd7}4ucSzF@ug!= zb_wrGs}`pOTeLex?HRUxA8j9lZfNfQ2(q|`H21diO7lzO=HRD(&ruY+D4t#L`@qx) zHis{zN#kq3OSlrv9DL24k-B)M(x>jAG+i!S8hOX~Qo5RpD(7Yj!Z%KnqeDE89=}jnTHthGY*s#PH>5EQh^g0O zO0lH4_;-$GBCNQJWK>(A1uUv-paZq2o}%iM26lt9q^zUY4z(ws8x#vCZ_ymT3CsI+ zWl&Qfm#HwWNr9+pf$ornp#4WVbfFM8!V~a10>&MCez z$VQMekgh`;L3;%vV8A|D zA?FR!9H0*mkhXDxKJYLZzP&=kTNN8vY#1q!W(me7>6&~!c0EjSrgE62U{q0BV2#={ zR5zffs67W-Z1*v0*Pv@Rhf@Ko?_dsI%JWTmr*U)eQ@@{<0*QpBRoC;vFevuOH(vHQ zu}iNItkRD$Z1l~gd4x1Ni$}C|Rve8);VKVsXS->@3pT1_gbHY$Q&%1BD<{ak7TK&=eEKTF(w$`$ zH||#1J%eTq%^C21#CHj@@#!)zVi)BZ$Hy-!*-PSHnMGMUt3gk_LTFKa;w%eYqxQtd zpSi~ApI&?vUv(Ai8LDfP4VVLDUqvxTkxb!hALzcgS{hZ3|HHpZr;1g@_@Cg@j}d22zfa~WChaw5!4Sm%=J z!yDWrw|7fNJP2xbK!OOJ!r>lp?8xcZr))4!bCim{zTO z1FE$C1GdqJGZnrn+8fOSXkd4Rof`p{TuCu)DLjWqt(=w4bq~B|70YE++ z{+7alHjJFp4RIk{yVoP89TnKrd6XuvbK$hkxg$bi%OJIc;xfdvaUQWHR-;WP(NlaW zK3E(jd|D4u1+uR)$c1D2IV-M;JakKrJA4THr+Ja)%+S0qbdNtlkDz;L#o(A$x;vlJ z9Y4aJo?|w5G3{NTL1LaU?G;R@58G<3k!cZ*_1Mv68g14!juBJEaj2VNnRSzhK-;xWZ52SIs=AYwpPAS+C}#;!Z$NrxVYvql;LvCdVrJjIHD zQA~RerSa+AB~mU=9ZjSDY(eov*JOQUQLTyCKbrEhf?S5q$CT>7c9?SoI1V5}t4 zvc=&NZ7$s|`Noh_xVdz-?{cafX}-z(TWkq$s85Qgf_;~LAiJg$@d7GLZud23%aw#U z|NOy=7<-7EJ;t28Py4dL9ts>aJ*_=>49ioj{e;DnHxWHR!iGTs45(NzW7m;Ni#-5c zEYSwk;3wMu^tl!`ilF_w!6{<#^DV}YL3Zu9x$qqP93?XqKLfAUVwGF#V+Szt!kP4N zzLI5-i%Z>7xe;~z#OY$*F^`Zg#{-5VK+?Qw?yOSTYU$>juv?=|=QRTFt{bOI@wt3c z1rl3exw3_c^oYk|lu^m0w2K1BJ*B*IZmTUGg;iJ*g~2J4Fdwlv1`ZIt!{X6L*poBt zy*2i*@yC+@(xHu|J$@T>f#}M`iFyGUgk%I}jfzDZGcLn(4*gs}zhv2fo`bGI4(2O| zIU}oG@U^&F{2aW;-MX;mgB5YBuwd*5k()pg+K9IERQFu`l-f`kN&lG)(j|(|B?+mC3 z>2VwX7S_3xddp;mZj9R&mG%n(P;_w$YEV7*3PT5_m9h@!V11`(jsWVENUuCZ2&=!c zA3-gg`^ZYaZ-4^1g&kp+b}PBIYQk?<$hl>5Ja&P!Y$aD)tsbRxQ!cC$k6pgQU3lcm z8Q~Yb=1Q%I*maf0<>=CI(`+-{)!o&n6GlQ?03+y8gEj(;5i4mmMrR?5Z6ZAgtW_C_Rd; z3hSR+xH1s`5=ET#q3v|Xi^Er`KuU47_!@{zy2EcFf!yFRKq{=}Hf|~;Yjh#+QrY5g z&YiUnk2!rSH}?}yve%A;PnFD^dgPQ-X}~q*&Wht=e*SOXg*C@*719`keF5|s?8}Pz zM3Hka=b%f4g`kHW+5ii%N7h*zOJ`kRblCK_$9H}U*9Yp)$d{&p?jhKNafc5uM`2ur z0@;;z0_1ih;Z87eVa0+i=eCKJ$kgevLC{X&)A+!nzNqM3&^uro>$VDXUNHpg!do4>RCiUZ z0UEtk8qX5+BPrvo58YuBeXcU8<#qXg�aR|y0CVDEf-eKMU=jaRGFmdr!0bf ztde*%oy((ChB)0WFxCHR{A#qjd~A~~w#isO`zes*(FYcL7dQaD6AF6kPI}%z zRS}h|S0J_DwU2QZr7{V|c>!*f$80e1DHN9hvCCv1diM zxy0`>708_MR2ed1w+|#;aTUkK@$nPI^}Dxk;kkzP^bzLZnC0pK#3JJ7out|Bw7YiR z+Nf(6dzSP;dok03~Mf-}bF_H#_((|47oOYu{CMsoO^8z|KY`#^HEaX98NH(femUZRb3#q>UqBtaIx5o9B`3gmeQ(;$l#=I|I63#UNr zDUclP4!bLcr)7B*@M;8W6=TFL2)Ttxu;5%+kas(k6iR^7C^;5@HGF`Qa>m0WE(msu%~v^+VbmBvq%cPd>8U&><_H&{+lNBI5sfyCjBL0Wj~ z7a!fi?%>b15@XOdI%>XYkY>U1#n+wXVHyxae|HK3x`xxQ!Rj8)3YmF7$S$}k+EUzw z@d|3NwS)X_VFadWw)Z*Itby3FsL=+f;Zv8`l*=r2iIw(|#J_89vN&y=Uuq@Pjv2|N zOKEGarZ`<%_FQ;Q*>VbGbd*UzmXt;5iD;#5+%*@sa5Eq%1rfw7+&q;uVEnx)(WJLX z11M@O-IGty&fWPgVi51L8jjSDt;QO*vMt^e@&93-ea2325f1#8y z*zR^9DY-7sa#yG?BQ>ThmT)u?Ewi-F23N-l8qpn86$>U*b77i z@D@e0bV^$cCRPMu5M$giBU?f~5&kaI9Tk@Cs8&vNHm&2eYd^3A!W(tOjh2YmWI;xR6vch zVZGeBg#mb&L_KoKlB;3R(AuP^{Ak13?R}_P?K*oRjFi~7etEi@@f_m#DC<|~G zbv1Wj^#IJ$DUfCbs~5p5HdRG?!2qh-*H8Oe}4eXb>H}Lx`4X=S;rPr+mG9SXenf{#%*hq#oUO^~>av0wE5DtPbejft<2J4vuX0BT* z2=@4IiqFxO=yU1f^5k4brF5}{Rw_>^UCN^tt|`A1w%^i<^W{rTux>M z%>muXhuFvO(0%()7>y6R4&7{MAAN{9xPv)3hUKwaakYA(+(G^5=lC!EB|2-}aUi~K zVP8cM%*HFH5YEMw!n@F3gvUSo@BMXJD_C8y=^9jH%Z6;YgjWomdhuz6ASPdX{d2w# z8Eog3qG_T$464owlE$EF5i!`HZcXFjaJ`MNaGZO7^eix!YhfDQ%XT$NCUDMXq%P$ zEe$O0pteJ8i+%Jq_VmMXg=GP1p~}bpEfqqb(=}pFuA`6|7fYjKR&BH5gTI@d?nOFue2F5}gR| zL`!C+*BqFltyv5?d@fzdg2`C~B`aaddWg%DhI2e}w7ZmT!U`Ji0|_uSah_%-0vM!g zQ0wm%f0jW(BEPFO(rW~FQ?6n<^-~W45fTgA+Jm7jV};PSZ4{q#PsL|VnT2yDnI$al zI?G~l1kF7kcjVnm3s@YE6;fQq^&_n+) z07*naR3*wcn$$D^ol_vLgSz>Mwsmd+_nQ1DGJQod%w1rWt&8A-Pf~H^RK+&7cN50$ z%c}wt%cGk0k%n^<^5cvL{M00SE?pXq@wq)3rTreYeHoz~xw_?e#AS)orALy)JmOJM zZh=6|Po#1hZ=88ffuu?XMa~w;;pS$jk5E}Z%5sib8C*pk-<(;*D}>&H2qXgC(jDua z)+xw(0(~4N35V5Ey{m~qaY*APr-M>hJ#Yft9604*mhRlC=6J9+MtKEg)C_U`9rAgl zZ=ZaN?vt<3z5jc#c|u>i!?44_R*ig*~gy#Q|!qjWc3mv$C!Ijzli^W+pVt8 z&;AMLwp!A53pVEmZuGq)SmP}Pz+zmN?8HldI6XfG6>JB#HK=t4AjUYO#0cRX8Dss} z!wGn|TFgPO8(MM7$tZ{-qMV%{<7^3%e zOXSLx$kvI!0b+#`!c+S|Qiw<7kRORpK`fvHl-xk6@Sc0jNZ>J*F0OlNpGfQmi+P0l zPq@D7ljx=R44tST){vi&y=1UnAw>QGiA?kGArb!ttUr|_ZdmmSMXmbzi?I?Z)+Saq zAU*m?bRl4dGx(G|OSqIxMSAg?DTf#eL-bBRF^wA#)1vE^dWq0Mxsk zoC1hP3OnSXPSE4sQ(+YEx~4c~VL`26yRfXYS#hr@q;-xvC2 z3Bl?K_CgqJIuplxufmEpjWTl}@nANT&8I~r%Ilh-B<$mGsUPm@&e{cH1(xO$$EV*+ z%C|%t$M50>OO;_sPSnbq3Fr5L~EKkFeci^zp|-vw!$iWV1$A zN0`@s0+x5TI-y$oTOHBLxQq*nb_qJsb7KgW zgmnsmP7$vZ#N%`+*uw^vLpho!9p=1qA6zU$!-yz+Q!+fFN^@>8tI^{=jhMD@^g*IyKU?~LC*joyyTh&CTPHAk^byUC7$*MtC z#+l54W#<&ZU}ebgF~sc~6o`+M&ZRLH)I_Uk#N};6P{Ei3-1$*}Y3UD&l*U;W_H5wM z9J~Dyhi`Z#k+IZr?Hb3G+C4{8N|y<%TCi*E$$RLNcb)4hydW{i@vF$)*D-fL1NI5h zoj~^l77ds?$k7XM_Sh|supM-3^z1=4r$>h&4l>^L1*zy>`O813K?&3i3GoCn3M2 z;6}F=i;QTb@LN*6+bE_gEYFwN2J8a5MRW?J5!49nLTC>D5oGZK(82lJ(0<@6vx3Ea ze~fwO70A-Ls20(tx^zxruA+$XrSv%-X*zI|u;&la(+_Fi`k(xKhHv=h09oB(`91$U zvbu{H3nzc(>eV#PE4~nxU-${SkKU&H_?zhC5Bitded8Y>cfXEV93T(A7Y-k|J^(a4 zN2l1%5%fENQAJg@`*cshFu2MWC>zXXWt7p%DxXB`RMJ!kS9nDp?(4V@Xmngk>|zQK zgj;HT#3TP4K2Bd+g_VZWd`q;UtTB(c{JCRIV)xRh0Wxl>IL{DHdE}Hr&E1ujKXzwD z>86h|DaB_;*@9Ugz^P)7&X9G3Yz)ogC&3rse5t|J6#k^0GyFCg95_M0h%E^G+`?k) zLNW)#r1fG&?>1_dK#R~~&i@3J4js*nD0cH6be|xyLhWg$5OI0@%BP$n$hBV_m!q2s zm-6o0Pf+d9^$Fd#zl44KP3YD`=V%U)7v7|KS|2*dI8_tLR9J#Q>b{I9dBUzmA-zy*dcdR}TFP-vA zL;H_D!VyJTu&t*z1BpAu#V0CwkVVvO8tm7D<;oZ)+cS#5E1h6$h+o|mBHiTsHMy{2 z;g|}>)SVT_muO=sSu|5Fs#Iv#Xy;lnrOk$^3`oPdRam)j&Vos4a_RaJgC?u6;)a+~ zB1xv=!?Ibr<%6pYvR+`;3*_96&E@dX)G8)gcY(lg2Pu~^%Bk9mhPS3M){;yAhc)LkNy;S@$;DF z5qjr!$A3Q=dn2LWvlj&Co&qw?!_D#G=2k?8z8>7aTW%uUDlK&@uL3!MO0uD~|1mCS zKM5Y>Yq5+4b0ZA?`mAFGQpoTsApHjB2>cptI+s!s<~g_ucUG=ErFxX&Yi_GJybEoC z$Nny?!s@N&^d8Nbuzd6yXp0-Ve9IRgJTeXwh5O0p#%+{aS~mwFo4y|1{blCrsxbA!-=zKOue*I7*1PGN z187z(f9w~KW`S8O;Nc%R%R^w;mvRS=--OjG&>Z%IgVm4!0^PU&i0-Zb6+L_Gm6Fo^ z>2K1#^Lwm*e1RUnjvT)H+_ zR}+lgSm~;y6kj`yH;xZ5$DIXv7gt)o^hlBvp9=SwKG4PZp%J&sJmtbldH8hsqfF9- zaRze*qKFel;p6B>E8;AL<=tULQoK58v83NU-5kL31mt7fja66QL8l>7pwVP>wk_h{ zeez8Eh4@oE}w-J z64dZH1|u53Tvl-Z1yZx}JFX9KuBHR;b6>*pV4PR;F_=e;zO1JSK?(Zf!zbHlS4(0J zJ{JZj%)HhP}R~Gku`otY2{eRKNmwt%x4|To+dx~o0_X=g}&S3qaFXMv2^|PZAn2Rsa zC^%*D>DRFj{|r#K;_AtJ=-G#Z+bV$FU_bgY_T#Vk`r5p77Xf}ZX_Kg#)VERY%ro1f z-~KY)2Vdbo_|g0P_WS4jop;W+^Ld6q`@Kp-m)jYFu?ocFpnk3>bXg@~5St6amLJXQ zZkr|%K%6T~MCgwu(SfArmAvL?wfwk@q4>d?Qh)ag&KgNiA-*cuI?5zBN(pi4JO_;3 zHR;hJ0Uy4#Imd;}IgK}kl4X>pD;;GLm$Ou-+$yTHylEb}GURB3Y|gr{(uz$9x9X_a z|6bm6%U|`-?Uz^_F+NOC%FAAJqb?ZYyl2d8{9WE7Ws#(f^O7iTl&J!pa|bDeYfc8R zPQjQ;d&K$fp&Vx6)nZRS!k&B^`}iG)YfsS4BQM-D5br)O!9~A+&*MiQEI98hAD&zO z@Z$~ZXLU+MorR#`?;f+oZtyR|kEl<@`w8<#w)WjNxWbZ*%Y4--k^Tk_aZBRO)&MHv z&sb?_TcMEn7X{k2XBv! z-=L^88yzk13Uu4Eeo1^ToYo~Mn4mcDT2Hr5Zw-kQ- z%45#DjxjcM5 z>yzjqqZ&<4;N{Xy$VxV6h8P+z2C6rs135sSSQEH#Lv{Op=CM+r_Kx2eEM!2(trIG#={bvruPoiI_{Bhq2f7QE}Jiek70{?*3 zI5N#Yaxbur)YAntrFyvO37t3 zMO(_hR^E~#D7l(S{8D96%6A7I`F$YqGv_Fi9Bpo5e2&{{3%|X z#Sxd$D=ux}$=BfgU08qQaYyb>a8BuG6>Hi)#g*DOZJ(SHiD_@H@$r1YWeCOoHTome zjeCDiaafG+M{ZTqwp3RO;p&xGk{fZWpXlO9hC$Fc7w@*v9zUv@fP|%H{(Fe;E*WOl z6HBD;%06(_E-bC=0||mTCpSuy>1nxh_>?wvXXWT~acNmXIMAm&a`Z9e6h!Glsa!Z$ zj+Ca>7LYm0B!s7)TEV8$O$pTz?RLANf~e4R?*45H&Cg2p+SIV zqcp9%lD1n2c4*!gtPKZhMLscgiv@ZOrUPmirNx3qv7)q{p|hR4@xWe#3oCaTFXWFL86`B^ z@hNRi>Fn#mDk-{PvE=r4Y|Ju!IFzSf>7o{^y7ish!sUXx%gMptC%%{OaAX*} zcWf2sPF0KaOK!*CgX%Un8_lL0KPevTrl5aB#2soHa8ZAjpp5)&hNCWJ#TAvGM&FG0Tock$Y38I0 z%4RO@t~_F8Hb+ipU05)~26{TV>kT8uFq82F_x9`UoEJLG3Sd&o_Of9GHRclnt6v}T2>@??3$ z@4x;7bbu8DvTzDf7JkGJBBmOi!tb9>{d8J~i10gq=kL-hks!Ht1k)(aA_f(=A+f~} zc60xuFMpwzY}vE71gw!^9y^Sw#LWd_6rAE%P^sC@;VK`B9dtU|WeM-Tjd# z;>()>+YX08HVefV#WXG9e3LK!+kXR5ixF6v&ezVkdq`B>ccM008f<;sAegLny~1)r zN;z0=Fl=aySBDgw~+*o1`^ruEC{d|_ec(+NoYFRP4Nsme~M}HloWa1sL;SNGOD!WGMU9*d? zdimDH-i2kn>&k+`xa*Kbux*3jERzm*cZjh%nqL^_w_RBc6BSX6l?L^5n%8>gNN(c2 z1R`b2W5{@W5TRn{)Ddm687{RWc4zO2S0|a z?w891egmN|Kzf-}seLMKEXH6WGkOZF!dE_R`JVfWN!q6c8(pww$*1f4e4_UWFYDAE zaCUY;CkyYIG5e41uKJ&+*V8miI z%r{7yO%hjFsw+J@lir6#(6A@Pvzk0C(syxhPa!~SLDU^1)UFR)4x-qFI=5A4D@Vj< z6lTKSUBxSyropJ?+ON%>3v(=$UEND@e1IS`YVNL7F-*ClN^Y`}yDJ=lqUlj4X(2;6 zjjug(Xmk12(oBu}dS#OEFbyJiyj$xt7$azVfVQ8aYNLrp3wDie9=cyA-$3+rq*)dC zMP(9+6iKFjQ%X04d$X}#)c{uEPad^=>EjKr95x&;TwHtMGn@8<#=t8FhJ!}jWm2n` zc_PPrs`okPfHrbnbQr8U5pC6gn(LToPB&E zZ>1N&8BNiDUk>LEY)muEe1j?EUX1#}#2j?6P=Ih*C1Pt!4>GZ7Rl+uW4JRUBBc#H2 zN=eidLpt)0^GSt$2*>5f@tLAcEseMgQ?$AAWYP^TtbLC%nX^wMtz3;Z=Tb|*D2ek3 zzs+`f5ikeN5;=T;Ie!)1e2jVcyL7h2YKx7Xu-ysTozR}Whk4Wb~dB)Rzqk^!_I3CA)jw`yA#TLA33n2}?+&8LaGD z{WWy;fk^z^iOD5T^9qyYG5!LTaTi>T{b(v-A-Z5XC+$nu=k5x9aj(;b<$jb$^V9U6*#{B`Wfx11}?TPEW&7%-tT z1%*;k7;%Rz)mhzYt9ZhE3jXYI#|LMY!^Sm7H^Tyn2NRbCjlgfdw`L{6!oa`!7k_|L zdxuBuT`UW1n5+h@G<3Z}xu9gZY)C#z=R(mTe4)&vA+$Baz{q;>Sa~PT+R#yRnUEm7 zb7lNZOn{g$i7geO0f?r}^7P;;I&T8K3#&A_UAvU2WG%$$Qo2(5oO`KMo;a_Zn=DP2 z@`z>5RM{dPWfxW&t|^34x~V6otEJfjMf*F}L(~R;al!C$B5oJwx;i z**pZ+pzFcz26upBcjof#*4stcD*p`SQN`~!Bs}eu)9wZg-GOhN4juVll>2mYK*s`& zUX+4cX(O^daegDDRIV*usfCLaQHMVo|I}HpemDj`i7&C5$}h+TArZ*A0UP7Vd6?Y! z{!BwEcXCRi$d78XSSNk6CO!qT8G~pKE`|hC+L?{W60xio;t6G-i}W z<)B27h6cCK<9UFL#~pC{KDuD7g;VlxgyKj+e6hR>t9n`Z4qzF(>*i{u;2F8(?hzZr zHtR-o-`}9;y)|~t{zlhKk|?{YfsqTVFM#ZSlu7PFsf(V*8(SuEKJo7`cp-a6WBGkRtU%GbN!%J-%`4gB~x;_#k8f#^h~<# zqfF*n2yvm}aE-noJnL!LQU)rCb_8fY;(EY4ngv%dsaR%l8Ebg|f}W>O{*!~dEE}P* z9qYxCjVw7?9`X3_h)r{ImmXg?$fa9f&r>gYN{|}_=b$u~k)sRvDZ#$WimY0?oSfc; z$CO*HpG1!Z*_2f=#|4$r%-LvIRU#P;@-)Go!{!rM-ShRSD3F@c$ZR?kj^%J}C3uG57jGQBx42-BL| zDs^)~+5MDrgN+Nf?aqq#Xq2pqk{c|PB`$N2PbqE2!du6LIRF4407*naR2pw2tc{#= zTC+wocSK&YJbIe#HXK2}Z0-<|#?6Dc#Pn9e0HQ!$zmQ?{vlNcgSlB#9ZOd@xg112W z@?}S;-#J1)4$q;Tv^wH^=Y3dW4iU3Ln!_=Vcrv}8 zr(hgkD5q)*xOQvCsu=f?t(8@9WAACPo;>y@A4Z0=tiXrI=is#M60sY!+ayH@%YuD4tnA87nAenK zP*%9Z6mKn%n*z`HB>Hm(Ph}E49d*w+W+X>Db<9X9-?UGZCcsnPsnDOZZ>6+iD?Pp> zrrEMUwnqP%@YIv0o0F!-!$pqTQE1#bLaax;+$o?S+986`R z+moDL@ksP{j>60-kEE?`MaV7O!VQ6%z%42J(&Y56liG86`{lew z*qRtm+o!q@#O<88bz$8U@cTe+U062)+_+Az<$a8<&5Z>ol-)}r`4e_Sxa3}nX>(&TD7bZD z-6XhH7nbU<4jx?Cl%}TO;xsv>GUvFIIDNvSyc0cTJoTg% zt0|fij~Yz^68$xRO2cp=kNacQVr=Vf8(X~KE{h6E!bqY}%wTy4g92$j1hb478>d84 zWi+KEroy?St#9GEhs)mwatjxRlI)pM^d;r6tLrOGpBt2x(v@gqno_!{iTqez^^@o& z!JQqYX9VTk3#DrKs#40msNqi|A@2i!x^9^4c1N_gPriX{9y@o;oW?D|UU8o$Jvk`(b1F1IeM8wa;8teXYbwF)a1q`NG4Eybs!`Kf&% zC4M>gQc9asCb^0FG~H-GTd7kdw@g;B$3!JandF$4@HHM=d6izunBKhfkJH@$ewu@q z8J+y59lH6H&HI0k?$Q5;J$-LlnAhqa%G9sCl5sh6?UHlhB|Jm~BW74a_>9A|@4~9| z=Su{Q1=KARp??e4ploev;(3mItfiZhD>WHBM^es=?5$mi;nhi5weTbjFwX+pT>!iwWc>E^hX0;FZgDZZNf ztb{M|$ke&)!rJH9ku-h!GIo7j!tIKOXc2l#z#L%id>7pRBJ$C1Vb4FHJ^AKHDBDl| z2>a=mK{uE?pGEF`cA9so;kVkUQpZyLqj)!o{v5fmtU)bE2cquoy=@|J*M!_8E#i-D zS9hhY(GJ1VpcuM~i!gQSpb>*$Q5sfFi}klO4kZYScLX(#Rsa^vy4Xs6KGq7OBl9z_ z!5KlOzxRFa`w-OMN#e^E-_7R5eKXuzvX=q@byosduSREHxONf9p2q7C^+8_lLMF%y z>Nx+>@g*T$4Ilo-_n6l%txD5DJ>P(jU0>1P@r6<~O_j!%M%Fo+If66?r5D+!9q<-Q zxO0a)-v!GTFk-N$??ZRaFha6)pMC}1Ji@L&ffv3XX%=p**AJ!?F#>4zesXIq{_u78 zPrJU;#79$z2?8M$JKX22pl&5uNMivj^4zS#vYm~_+hK=J0vDFXmk$D7SSzTz&s+RE z6S39qItvWW=&;s{Sc_H=r7@t3@-pLT;%XMIr{*@eiJOlyQ~Hm znmQ)M>NWqAgL4y*BE7B{jf&xJ_Q*#})NBX&j8pOhNe;3qX z>u?QoYwnwMbqI36LfkYC&dmg6DJ@1V2Fr)Wf3?1PP_J8I-{tY)+GlHQ7cJI4lTTn3S ztqf5Pmuo~eG)6i4#lMK4i7csyccoqb%CEQs8>fyh3Go3+_*x!QeI?GfhTrOATDedv zF7T8h$yKhD=dL_lBqJ+*D^KXG()xyu-A<>S^6fLr-+udy^G^Br-16fu4;LD}dDrmd z<%Un!hx~8fJm~Ht-upMX~!SgmZDF@J1U{R#@9$)hUqd zoMjxI!tYBvH=UCo*w{_tBu@}Ck;~)a0{Chnj2y!jRqX|)T+%(R62`V_0fT5qXhfj{ z75Cn|4iQ0`sNMW`5Ik7@SCqUH_gWe!K!dByUxMc9<9SR?%qxz@zt7%63NzcGfA;S^ z`eyqIi*LuhnhO=v^R(7a+ginj&AU7HT|4(F6bNf)FL zr5_(Xh94Xixqbbuode%v_KO~ z4FPS&3Pco4B$=II;2edWs<&W;ruV?(-;7&$5>4l3!Py?(f)Hl~XcrWq%R~AZ9n;RU>@vxMAHb z`I$Ek`1|jz`DA_lmWX=yg<^d8hFc(^uZkP<4#UjwQZyzV{k^Fm!g!UF3}W`uERcAh z2wp(@Npz8cPc%`h@h8@I{RkiO^+gx2s7Br-@QNUr(k|62ew{id4c1G-f-8N~en53m zTh`5Si(5r0euxuXht~-?0UzRXG$rd{U$<0DTPj;6ov8}?IZt~3#lA`<&9k;6JJ85r z!p>bD-YNXXyKDaDpPcZkfAEM$YfJ0(#J!c_hhJLqpZw&D{7YXrSNGytU$QNH+^p?af@NjK;v{ueLrBkPf8WFy5cfo6i$|vV;Dex`a z!Yw@SaLwO&ECX|{rW{>O(Uj&>Ql4`s+;g-c>}m4Hxlfr(>BUG_Y$mzzkdNJ*Y%Qq# z@BX=0_VzXi&b77foNxHR?~XZK2tV`L!~HVd6P}w>Y@cy(V;8w~VSNXI6E$-EF09=;tI7$4(uSL~LQ)Wo1azYioO&J}W(bi48x@tQX(c;)b7f>#6%jP%!> zKP`B+Tv$rK7eVp+3;d5~9NcQAcvkuro?nPMu?-s!uh@m9>NXP2T`d(ujW$4T;8T*# zB_1h06W-njGUbX&3o_RgwF_;k`DVbqr6E4fp>$D?W*YYPQlATe(yv&O5OFJUZ{eAM zpg4T^I{R)a|7uF0WF4e&DZZ5MvQ}hCdZE-D*VV3WsI;N>$>WkCo@{^G7Do!tlnYCT zzasPsyT=^1l}PTy-uPtR+)2SD`8s7FMB&92 zqE`46zl$qsUmh7S%R68e(4Attmh^zN^A6rQY5A@9&w1~(<1Dg9HIdE|{hz{N1ON2v z2fTTA!Do(}EX`%Zv*p724uD%1)^`r{;_NB9u;OsZy%a;LP)d{Wb5>c+$v@#$zfh`V z3GC~N+AE!q3V5@;gDelxwL1w{yKqpNqdV^`Uwzo}U%z$2AAGdt)Ad+wq*jOXcW=Xs zD`8=TgGR1Rfjm%Zx)MHiXH|Ky4I&t6V0nl!3)FUe^6(SCqug+RCH(m}4*17jS@NHM=@Gy4!J7Z$ zTkA|lbvWIZe+Y+)ko@2ZFje(x-NmNogXxWIg2WIj_xg zqv-#+6DcN%`^!II;JurzLG z`A@yN;&@^B_NnEYCmo-x=SzcrO6^vFL=eA|+lIM?=LkyT=GyodtdCd@PPx2F@iC7W zau&!AJn}BAbfP+dcpFyoE8`h3(NEmxyY4Oc zp8KwPuN)fwtslC}kG-_y4?o`U*T3}0UmTUo`{}|>c41uGuJL(kG`F&{W}IFU zJY5%-Klyf-6LdQ0Pc@v=Ha(4R;Oe2B(MvE%v>kXF<4^ZhLAx1+pIg@Jf}7yN%605H z`#^H|G%i&tQ*N%>zLZ{p%ylo#RW50Pb8)3~v)osK4hTntDx6#8{j-jT8_PfV_L@f< z%TXh|d}ugmgg1^Ge(=G9g9d)|r3LSwTHZUgY;L-|zKjv@RZH6vXjo_O7coS|P~w#f z)8!jk+I`ZYZTjvoj=4Al`3mkJ*eg*cUh?)_E(P`X7?`CFW z-N5dBtuCz6eh#QBi@DZHNK^FiOemxhZx3Y`R+>1C+u0R0kuC=khBmo){{kA<;Nh-e zaJLYC^-;@z_2nmgdT#lVmzMn87mfh8g!hLYELj@iCthCh*M9#YAFnN+?l8H2m7r>e z5nZ_XXYb5rrq2oF9K_$%gu5h+T01~YB>Z6*Sx+gENEr4va#-u`z>t_oqjFr1L<+fB zOn*d+&5hn*=%=-=?8|CKmRCS3A{Jw{xTL&~i!Wu02yKVoC+5ncKo`FE=&uUSTNS@= z8J_e8bGXHF=Ihd)&lN&1mab_ZNNI#0$3eLrOZc3%P)fH8 zk4$;%SK7wmDfd$xu30RlbURrgzVnLj@#&}u_;js&y58{SUBkvI|Kw{c?k)@m4ZL#L zuoQQJ)PMiA1>bnwan`o1ZT@?CYA~T+s}MXKyHse3HpP4Qi3B%~fV&b&iRYhHByur% zixF``M0>RcU%3m~ypTwZoiAnLy%O*>I|59vT##J|jhezc4fMhzZ+#*y}mEzT@N zN^2g-V5Q}jwO$Ygd-;l$RDe{z&0T(*rb%gIiy{rjX>#e}_*{82wE6o$=D3z}LVhm& zK76(sGP)p|@x}Eq{LkMw=kLF_=B-C9zwmu``03XVIB4L71H%gkhQIL_Ugqzvry#yuZ7uq>RAyiuC01mXl%Yn^Gg6cmey(1lScAf30W8kYu@VIW=kUW4E> zihJJ**1Ai?#6Uw>Q78RoQoLfih!}9!vxW~&P#QWKHfpxIBH-@TmKpENfKl7m!}>N_ z+oh`m#$WrIVPbWB_q^{T&gw9JkB&oX=Zmrk?ojEky;a1o-r441{3u@~RT!RMukgXD z_<@0Vxgsp2>%Ubic^)H}A+JN;*8gp3F4q$A`-3eFt#(*#uGfW?LQc@vY8?}f(V8*=!KQi--wS-6ei99!O z38SbmX4@Y6sw$!#!Ic%euu?c}mEZkf&7Fnt$DeHYh3~(^(g;f<94&+&d1=YN`2%Q0Zy9|IVKfu`_X1ps(arC6z@?OUi!e+}N%XB6&tkNSE>b|_wl0H! zxBNm6Fh1GkeH)6ueqIfFO{ej8Y7sm?|B^Kv->%^+($R15vN+(?)7$u33vL?>^n9-JN!~?Y4(A{6W>LP=}_7DkHgxP57-+ithp?e0Ej?|;=CJdDd6b5_+_wbrV& z_S(Dup|j6lt7_Jqv*u;o=NNVN7BR>g71oke)0N!;Kr!;+s_Bvnxf(u8t2(IyvPGw2#eCH>d5f!szWVP3CbE_yEfUEf8-i^Kx}UKZdVeSO3zFY$$MjQF#k{~!p! z0|URL*;fR+rfiS!=@`;I)bnMLri2+uJ%(MjLql=6VuCeN`F>N@7z3F(y>0(=t*goq69 zB1mGzyP`Nzbd6O-s^MLm)e_Q$GwohJ3Aeg|Mc&C6@T+L-^Z8UFH!d2`iuV)Udc1O!VA25^Mp6OrCH@%x_jmq9{OmhFg0Jm9f-p}I)9)Ae{@C)U;@PC%i;aC0ucqzchj4yxabNJS?kKk+Xd}97SIt}>XhdyupChW1p*@VO>wl;mFj+HyH6sR~5ew`+T4gzA)&oi!qT@@$- z-pT6ED2DVJy}bZDiY~SSRp$us)vx}h){laLtIVoG>AB=Y>r+F$fT@^d4Y<;25$Vls zw(i;u&HF+qMIgfX&d+>4q>sHx5bAdz(Oz*HklQFWCZnko1Wr`|0v?7DBqNvvKmQN@ z7RVYO$dHiREPSdMDoJMSW9uh#`~pBmN-<2yB&ES9N@7Pl&XxSTSlVxyDeKpdGC+8M z0QjLF{gWud7z?9>CH_(n3_OBJ=lt2j`v8rgfxx6{Qld&&@-+rVkpl3LV)6|k!O&oM z0D>0}ufX&Q!yx#ZKk=tk+B+BTt|b?v|V=l(n0-xXB*LFVF*U0S90j0A2m@Y8!9Ur30>3!^VT|K|f8p`( z;T^n(cj$c(fOqi{e{}z=`0A_g#BYxuSMIP`q^fe*gRuwMfyABuD+5BQDgZE8zuSBD zdrWm9to@YAJ6t59J7cnzk=lrLSFNN;0-4biAgk49+o%3_%WgNEF}2r?G(?Wf7MScc z-;r2-Ap-GW5;C^}SX|FY9sT#@u0nPCN+=ca7Lz`T<5lA&eeKq=^~1;yVGs~lKgP}s z&Qv+|5SZWy0L?s+?WNdj3*$$@8QWMTb$3idy=cZEyCu|)r7|ff>K8H4>3E!)$lId?6|<>EZIVO>BFCA zyR^X$ZwZw0fDr>q8L;0EYFIQqb8H(aAQ|xM&pwT>%e(kxd>=ml>R0h`d=>A|`v8D< z<(v59FMk1#;{$$k_#S-i;Ug{gC5$2i-XC{(B?K9O{kX$^98kv7Ble1@ZoR<8XJhag z>j}W5Qnbin>)p20CSW2dAR(m?;70T%m~-px$~TS$N&0+rPrsjYhTB#>mF8OK4T&jLH=B2$$Rd@4z$ zW=`|qYcDYtg$fD{%Dvwz=g0!mUzC)4SRyj%{mlu;fAIb9;Gg~2GyLF3AMpQu?GeBB zjS;{6^~ba8`)5A(3?F^Y*rgckf9yM-fe85et2zmP?5qC|3O&Q4JmB%wGxZVy&|;BF zPFM;U1wZrRNASt<%lM}se+i$ZFXB0A)ZWj(`T{9FF;_>nK@E(0__8Y#258^BMFn$%^J^Or27_?x38%fUvY206L58|pO|9vbb z2aCqU9DM&#B|r@$+ae_%7;b13W7W&#oX8pdkJf-yTcpV9`C_a1(U^rIgvX*P%Ta)F z)OAaHSMyk(*o^uUqz{nCc5lLAaFu+TjEv`(^}WAmBqg!XN(d1Ah1qJ>dI3yu*%xkAGmm_q@Yr}GX~xtYptJq`O7HSVU!*A<1Qrhyu#*4%0qdDkIC2Y0xv;nH@$=RKq&Zb z`5nB2_u~GC=p{ZyU&F(*2XieHyy92b^K(4P@6CS0H}C>qz$frcyuerSF7}w)XnBLe zjH72laOzhOJ+eHX*H));Ir7VBi3UO1byQE?v;3(7&@2I1DfZ3vd*M4I`kSQ74VHDZ zZ*$QA>%Bbp6N$}#lZ^>?lF{tAS>anVcZW~Wz5D2 z&wcy>Kl)wI0RW%)z;%)^{VSh*F}?ZC|KqYsJ0|&q{2o4t_wb!)rHW7RH}DDm2JmoN z^*<-y2NA;G#UH^R;GMWHP`@izXOz88l;BRI@)9tmf7B<1JYkd1NDBnzzPn(eM1~Tn z7&0+L$mS6!7KCuiaobqaASE&F;^!zlj7hz(W(xJ}@^dY7pGE2aNm~nnpwJE$3!owb zlURt_@_nUxVm&hjiCZwqyO%4+RSdP&)7T7397gRS7=M#ew`7W>(ER-NzAHth!;}aR zv9vawzK^Ds&95L}N+a1x(A?@68AZ6Yy-P9$8P&!l&^S{OkA!_}4pEWtyNi;~Lsv9#Epwkv!Uvx%7QPu3qKAr-p%kew6UkGKa z1cD zMR^}Pyn=vHh$|o0i@fps(%rJ%eDrIvQSY2XrIr?OQgKk;)O{1?x;r;S_s_=2>>dSB z4bjqKGU}1C^q7vi0b2k<)%|IM@y-F8d{b8KOtmkH*DEGIY1R2Scz2dwzQiy%Ut!w` zV1dx)#dknVTB7^2{Y-2y9SM0CI$wLSu%OY!^%aZ-jxveCr8#eMMFa=_DnhQ;zr^$5kT%; zU%Kt$QCMR8*?3I$R3_%_&xz5U>ff6utpet48UFhivB>wk>$k>@_ufIZD}s04{|eq6 zN9^eV^y0hl{_b5o4j*|l6eC1S~KKGOM@1XbyIn-A3#}%Hzuyyad!Jeh&q>s z;2J8drcFT^sUslzEECEA#;jdD%BJxXBhDk?c3xP0r`C93<+4lf89Wh?8v+4%w*Mwx z?DZhx`@;vZ#}2|D#cK;+aw@p~8_>-$@z7n1G$@c%^DXZvLaoazY)e z+UeC-_FD)tqK<12TI+~QTIp4BDW$2dn@1xavNUejf|;`$M?JFgyL0cQ=T8LWM&RpF z4-M`hV7&A4s~Gn0VC0!Qih80pIN6;_>1kj3=$;k$=@>s!Z2M5hfodQIj={~>olsNRy7#24MFzz1QC>QMyFoE9VQ)CnnM!h>&WVUHCxKA7|<~^)cVFBoLuJQYcfZQ0;c0La0==8gVVEK#I zy_(OA9NedCYFyeNNAzC3jv15D8?F-g~YHkfK`V*=-ikq%DnqG|zl`dK=iU2BNS zI(BifCA+7(t5j1l=2cJgP1N#%*cYDXa_2x_$F+>;WS()N5t7@Fn^^~;=ITX4v}4$h zo9LX}{2a)V;e3fe^!FC-KM{~SfXUv<9M@`M15DgO)*2oI0dxk{rB}=GKG9tApfwr+ zYTJ%{ADzT9>6))?FR~Hdr!DbS*nDuf(oQWEhwDAF7N>FP%2$S+<~2+S0ngcuW{(L# zf{0HH#;M_@=q66X&YP0+)kr6`!lD6xL5AS1Z9BlJ$7WiURMi@sutHw9mO2~7mt1!b zy_bLEiGaLTsEk{iZ-D>}z_zGlonn{Z;XWbZV?;|r0R>TwCmI9+i_4N zDdfTba)%bc)ewG)dlRr3*@{WDsgyD0bw2=5hm>d3AlHKF@{xKusT^;^Aq~EN7m!xdk{b^++QcdYxkE?V3A`* zzb`!$0X##oa|vgduax91>zIW z^|>G+v@fLw4h(evJy)L-Tup^lqTclH=u7CnS-sw>A>PDbnpsEppu$=M3vRnn$CDBL z^}y#IejfthAMZbcS2Excu!TmkC?m?mSxD>x%$L;+jT&vC_(D_E7jSOP%NuvszVC}u z|2MbsCjH6dboO{n!8!I*G>8WweQV}tkDdLItd^YXhf8@2d`6xJH=EGxI8{{)+2WJ5 z7>?rAn8+npkQ0&D!t2+eQitm75vWWbOHHLLGF^zxE3fOE(kaIBT>hA}x3vT^FyZ`E zqTe3y?|%3f@rB3l!2kI5AH)~;@8W&fl5<>=xb<6u^fr_g8AGKD_(+}6AWlCU0+Yxi zk^VKht`^f$9*=$l`um|$!R6!TDxz%}U8~x&P2zCEF#Bi?9+(MhS8Oa1sdpAQX?}`{ z4Tr`k#mAzi(RHo_$24=BI3#R^U;27n1x58|Eiu#YIi_Wf=}FD#cG5yORbeej5`Mil zl*!EVO$o?Y#HjESEWrT53mWmU;XVA$_|EYcRzjRAK4V>GRnk_#p{j!V+6y3K;-&@Z za9G!wv@rvPk(ifQU0=n*ic6GSd)Nqr7Xddg9k8|9l+xkH8)hibAb#6i7tCPkVH*<6Ly zz+vjw&c%$2a&xlZ_o1&Jg4z#R_r_}tWzydR=IrClAGH^DX-2z&cCpr#R;-xSjQJAv~fe%u5 zo04Rm@$DQg?x!x5AtQh{4Y@NH$|OHK#q+AazoiQ6QGnlhDfr*M@E-p0AMEibzUKvA zjs<%;+{dlpv)}VMIB)b=cDh0Pg|NW9%q~o+oR&X+Z~TL%07*q?bM-zqgZW4KJ&k=O zJN(AuyZE*Jci{he`CWKVcIs^+yL2VK*Gzw4dwtaiseGBqLu#f zp9#}4DWUDvgtc#p2^kPEqlimz{e%+ZPqn!USt9I-$%^%n(+`)uH$Y*WX5gZvTq3|8 zI}|X424F{3dc77<8Ycqa@x(Izh`lDJmQ8~<(?5cMsj?L9uZUkce~(iJi1 z{z*m4?r0A{H{+Mz`&GDcaYw!}%c6J7j*6+Q_9!NKe4{+W*UNLfltIHv$Q~d0#uxD3 zvybBC!-vtaELb~mA%QFvr^-Zxg=U-w<2! zjw;Md7x`d>KyZB()>w+V43`qpkGM~@q+lx|nibNnCDu&6)^JOe__+YPIRW|QukZ28 zU*Edc6a(fdE(5oDP>QJ@f4&@Xsw{nj3}~=+Vm35ORXd6KK#04SSkLc7V}sgfUG*9Arp{#-%iPOFQyJ0 zl%?A*0g}2Z-gOQ|IaSH`N!gY9tIBg(S9)XyF%)s}{kGkt+VS4t# zEhG>k3R6vEBDGCFK=+A++E@RUB(avnG_YtHPml@R=pf;L{BL{`MSxKV@9$s0b3HqU zK@98_O+yG6!4P6g^rEy*OpF;Ujj0gfTjK{XmH{FIUcLVgM%m#}20Y4xy;qD#*g`GW zm3+^IXR^nO{d*W+ejUH}<=@0vnTj-?AxLOT{nna zjK`)bdHn8g{}!D0W)uHqY`-gzT$jGJH`*%GIql;ozWY;?ehQmJ>EC&4Ud^vD1Jd(_Ccxi8kA zka7pWh1Vj4Qq-dN!$113q6nju0sGLU>cJi&V0b_)BKC*bX0Ejjj`7!Zu_9g`6o4b#L$_N=B z@rvH5+>7Hm0!FG92jlI7#jV%C-ZoGH;T64r@PHzW_vsl%+F>sPUde-rW(7GqwG4HA zG9hw63lmDtZ4BF^A^=NBAeueUFdT^@8tf0B%@Hl(`kHZIWwwFm- zS3RnT0-cVa$xCt6=et&u4Yj#$;$CefUAexp-0=m7COTPw>f({Eyn8yGKakE*Z-b`9 zxN^VNtFCWH57qR2oGCZ)q_IPU+2Y$Qjz$Doth#BV8`iKj3ZV!C;T}?raYSqkP8Xh_ zKjb!Z?Z$bxoB4bPgRv2nZ@ZGlYf-ciO!VFvw@<+KpVwW~y+&1A*%!MPZ4m36^5IU~ z%MrQ<1kW`?P=^vVAt;3_X>A<4UVM(}{hJVw-`{-(yZyJY8^3{X;X}yT*gV0Cy1d&a zld3cJ#n>{v`YA8@1xnF8o!{aY7%^bP4v*NS$(jcub*WRzkEsfabmJAKARv#s7qLkN z1tbMbr>U^GJc2}fInn^30k3xN;^po`c=hn1^LZ=7djhJQeSTyH*%mQgzWb=z7+Dcw zzkOpGfhmna_`v)mghz-pA@-K74bv%0v#ET|ocV3O_DWJ%UkHr~EAK*%biFiNlSt+jg%~V)Lxb-d?lns8|4>q-g;iI31Kn-n$hr>fBieQ<=Qc@C1 zu3rG&tH?U=2=~JHT^iv=^np!JxF4H^u@>yCuU?T7Ng-Ch@pIm<>c{rxS;fZiGKi zi{t`903#0(>TN&lDgmLcd~=}-gGf-EfH5GxTW!4EkR(h1smIVbJWEK?2*^;-F(+q2 z=Gf1e^e%gvZ+0ah35ht;?~w87J$0@UhO5X3h%MSWObt*|L;9N~3@0MF+r|mbOBU4q z?W#W+Xxha~A-YJ-`1RG-llwN74PlUcx!ggQS|I5!uv#V85AnkAM*B(hQI$$M=i+N| zQ%Puh2}GAy#W}u7`nj42VE%WZOVnNaI-ZnpxB59FtzatU5ZRtXFlUWebR)P40VxBc z6m!Qrz=b$+Y1~VF(ELcml5x?HWQ0=b=g5t}*O%(f1l#0lBiyD&O3U83po{BviP7eT z1ZEtUWaOhTnENU8*$w7K$=PRsJleG#BGh>#tZ`t`ZM4B;Z?Rtd`?!*TdbX~rAM}`v zM7x3dcW5KsW<(wTFy(7 zMrMq`5|HP5bkoq)8oe*AiJ9o5SigVrkvz?T5DAW zl?Wq15S0s$)FuMeL;45^uD3c*fz7zI^beS0b!XHb2}IEN>xsS;_{R{P>!ZbzeD~*# zq^O6>!L>ZM;gZ-6Ko80t&?*(rl>xMgu`Y!zmc#+%Te<|GmJYdu$*(SVhr+HuVDhxOS7l0oh5KqPqq!=eFqJewjynRK~M`EvVr3!>?{js2@WO!WG<<00&L~jxPMXIfYfIIh zCPf}&FhFSajnnU<=J(;Y55iTabZ*^HH?WeXYTaN?p4xu86wk~Gk3PjK=Xoo*4FTZ+ zQphO#iZAOC+gj1r_944}`Cy5bfJDWq>4J=iAZJM2^F|(=_Ybah>KPi>hID5F{0vSX zX59E^$XJjMz7Z$fk;in!obs;StA^I5^JLP|8v!$j)TNHb^K9_ngmB05QO;_s<}3o4 zSC0{aAWZAV#+hOsQW~iR#LorrLuKL;lut@Jv^wXh`=$XwF!cJvP687HwHNS{vMZ(0BajXWUCNy7p6+ctdo%s2g%E)JP_a&gzjV%`k@xY~uS zK=fZ|Mhe-j{q_BM^%d5W&nC z)gSH-ERZ_ZUc{Lb__?3kspD@$K;{UcbD*J%Fp8PDeGgwyZ=}D{-lG9EH$sRUUAt?~ zSVY}Yx!k#La&_3<>AMm^$hYiwX*|`^_-1vMQ2nlA+iQdp-0XNT*EGQc=cFBFuPF9x znpZ~%zenM56w=K~&F57hAMiSxgOuw< z2;}M8GD|CI{U|d=-SQ!eM9^~?xtR+lu|HF^5om4{v9l^-_v%@y$~>B;Bl?5s`nSH3 zd#&{hPE$6$-0ZuBj@q2CsFakWdBB7|@}|OR>H2u-CIo~m0_4eY@G0TAW&_Tzpa>$z ziu_ieSZx+%dy0Ee#n8h<|M>bKbFeO<<)LqRE`JGUt+zZrF183jX~S$;JF3T8olX54(NG-&8l+F0tEiAc+zTpW*AQL-NHObo-E zd9`uG3QaaS<@b>TlRNo0EadCkq_Di5?ROJ@abqowDOQ|BvY*$Vlhu*=3fN`#ltX`4o-~g~4@)RH)cBF}@wGnI}&4^1< zg7CgrXD$!^k!+=ptKF+vN5;x_bxb z5COzui|sq7Rsc{#PS{OKfBnT?LRdmBNY5tkM)wMOQf$6y1TLQt%kF^A*l?q%Xkl(1vm}ubWIWDN z%nY_S;!&NwZ1-Bd;-}2}{_MsO>9=GTCqU%3jXj>@`B>aK40U0&?RnE=&c`8kjL zoM+bE;vvwkPA@*#_Tg@z_sRit4XKNWQUG-Z(5#~b7R^3VrN|Az*XjOnvD0DNQA^lq zgxskj+I2oB^%6HuB2J!2icJSYNVNeCVQ~MUaFYix>U8(GES3ga9Tu);-qGZ`(g$$w zDy)NbD(Ao%c^rcjp1I+4Q=KuPEBg=!xvoD~>me_0Uw@fvHQSK*X6V29RLptIJ7^B} zsc$|0TR8_J*~(eE_Fn@#b|#EOp_GzAKYcVLY|%v;5J5e=bATIG-b$uY_bHGVum*O% ztjG`|H{5h@f4uvHgdshg4}Nw?kQk6|Z7U&>DN`+oJo4w@5*Z1l0Q`{e_Ns^N;l5Q^ z8Dx4*`TorF9wr{aGw;Y;In;gX>aZF+V5yU@84h(Np1C@t^GYFKdVM9*j6(yq0h_Ul z`a)N**dGEA`K~?pwO4%bL!?tR+&iYy@67U99EznnOrc6e3T2Y;K^^`^j%eC(kGP4W z0?ibUh8HGEx`u->$(%}CU#NlZd`e7Pt#As?T@>-y5re^MNcJwDnPFIGz zR$(>J;FFok*3>_@aT=IAO<2SDO7a!&361Kw?~H)t?lefm7dN3%b)@ofh%A4j)ZrJ` zapgmN4e`h#4=Tc$i2cUJX4lGI0%@WyBc58%j|_ZHSq)mE zF|RJAG?|>$aEBNyZ_1>a2`BFMDTjQ{A*+YMRdp{OrhBlDhQ zi{qs*Po+CTUQ@xL9X~OymI_FCewhVxzjE$~EF!LEPA+y3(Ze~Y zejUv)c{W25sY%o(xKTSorsgR`Rb%$dzo~#QOvB!64I8K`gRn}8H72Dpz8)1|Bo4!Q zB&-vu`PG5Ryau@N;uN0%DaHszNO^xosd2y65`T4#PfapaLX)Hr8C8{43RlF+sOMKM z8#w*6t$gKu|63}8;h_#{IPE}<+U^vmd5qfkUD6U~rU*6lzzoD~()C)3Ksri)aL@Tr z2IHn>nbUi52>29n>O8nV71pd+o&Fi*B`FY4QA1u$e7`7PRzxGPqqZi)4uVJ&#Zq19 zT?{8XX)7%ge}j3t9HbEq)&KwiAOJ~3K~$=VSR~R2lZQQ_JkSb@TVC?mQbl^)H_ZdEalwrx_EKsBxVW z1QE{1Xehnw!xs)8)=2_V-jl9wsbyN6(Y_CBH`Yvo9JjB&nhx-GtLEAOpg>>0aDOVS zej)e9)MAk^198C;@st{D?8t^^cheIKDCq33)P2Qvs-06sqv=lwz+)$X9%}FAkYexn z5ewZ2da=Vx7^_r0v%GM)i(=|yJ}S42P<2opZ?>^Au9vdT!^3L~+^E>8Sb9(BM&wNN z(;O1)Y(j)U(UC9a#4p0yM8S62lGKlw<2CA&1p=lK5}eJKCgrc6djSah;<;@c5nJ?E zvE~oC5=*x)hyl^SeUGM6;-adP2qIck{E>m0y_RD_shPYT7f&TU$^%Ma2nN8UL}mfg zsK1T7rgJgBkCDZe8o1Pc4bxCCtH8b37?4rtL^X0+_rvf?zmV-KNi_4Qx0{UR0*28sX@O+@v85rh$p0_Im>DwYKJv0b+|e^PXf5TvH2b}6#WcMKXwuqbXLEyNjj{+Sz!f=GGl<%;-N%A)6$R#%Bf z<s0l?;NT_QLqLh2zWAQ8UivTZS z1jVb1C#|NyvDmn79{)FCXDd5e^~i>(gNwWapoGJ1991NCj<+6d^@HY_fRIs~CIuK# z-Ihd_VYrjQ^5@SEg?DV`;S%ws{5LTOR3#B5-d&TI?wy3Bquw>sd!$`5j@BEA&&rI? z%<^?ltuYA+cBc+a238|ub;Z=ld<&B{0bP3q^hY&EB>PiS=#ADtU+xO5CN3jCP zPfd6$CB~0uj8a6|gKv6|h}1>e`$M%2cU{m7nk9ZyO1h$bpdjY#`^y=u0uZwj+`Kgi zK|J&*TEU=0slh{~o&%9)-HHDPvG#-|hC2c*+6%*AyV3~Xwc#!$kmgkwaudXne;xpk zVBGs85q{%We=!hCald-wT%sE~v1WCa&-eceqOa(vlH~zA5*#vsfBMuDx=}^q5W~=v>c92 zR&l}<7+_ObeDy0|M6lIIR9J*^P>mL;oe2?Jp8$N~lb>wX)ok5qto+2jm`YLhl%l`Z z1(}<1@POy^<_ly3Y zA?dd?aYTAn&PBnFWA;bcl@&l((Nt(m?ILX&-y>~kiMs(IXpCn?vcw*l)i#VPfy=(y zM>6Llb#$vrB3&n3l68%aB=b2ANe4uH=3LbftkW!T8&1SjW{Q=Jcub_AOGS?)^h8y@ zetI!yJ!BW~`pq-zs(C5(CXDU6-W*5k83wAKoUFbQNRuL8gd3sMoM$3U817k#baCT& zl2EOyK8uP(yq(- zBoNq)yaO?c5kh8;nPIBtfoz-d>$!VN*LSMIS_c|(!zXh@=xEbo_elqUQ3#mjf|3T^ z-gPe%?>e=`Luc&t=l(zm1etR`g{!e~D+GW^RRWMn{8Ze<&=|khGzP>IW$<|?AF2tijH5&%Q1+R6)gR;Y9I03H{n9+ z*ujmfWXZa+gNV5O1%_ZK@Vq4SsJO^gROlosQ+;J(7)vX;wu@9lJ)lzST*#H9pbiIQ z5=f0WKw#|8GNM-|q;DyCGWjrKtjAs?u`8rwMw7K~b>($#wGW~a$Bux()Mf+p+jM*Q z0R@7Pj&d+Dsk;+5U&_P{@P#9#L>=zYE%2iYm#k)=@>@wD*TS%DHjJ+R!P?Ar5x}UX zjL4B`$wb!%feJtvAjA;aL(!~pfabwb!e%0Btd!}3d~IN#qTj^TreUfb;sKBmj7L1@ zy%`Woi_DC}oTQuWH7ut75D;FL2ME;DN*-Mj0gCXn9ssT%m`iO;nbKIiCDjnA_Flha zqrg{(zyq>Dmf0;s$Tr*u3Lz5z6p~;*2&__?Z|nlV%~bJr`q8W3$j;r^GtH-N43igW z>END>32^qVmh5kQ%C2e`>y_P@CNf01!veBKV;zt zg#u5(9SHrLM{Ym9Wnqyot^LYEYgOc=+3rzFxaQJL%y-94!#A041_~(yls%m4@*;QV zwr|k(Pv0OEd(Gt}*c?lGwgO@3PwITinzCr#I}lNi+)niM0F z&v{m20f~Bi$Y1_Yz#%_WZgd(CK6^cGc9}-nW&pEJ6o9o+|o3o6#`{yYT=Q>4J{?5uFfljk z_Bx1rWUZ{GIGt=6q9XNPpx6SF+7p&`CX>9n#1y4p`MpT|G2=Z-&@(?+9RSdv{1d zddGkSM3jcJIx=?^1fvyq42jNp84)2NziLd!fc4Rh4}sH)5jA8)wl=snXr(1gzD;0#llB8?XTKSh z;5LZvbm)h*%5KZ+dlurrY`WK+j%?Ra)215{P>apc+prJzYt7G*skUs7Xzu|k9-EVF^;l9W^L%JfFJRaBUSa?toEa93d z@0_j_6-C*c3rP^54@>##)%6?ArJmlfc3tLl0oSn5V_ z-zuyG?q2r^g)G2dXWwor{-5d^L0(c%F^rU|Zjf)-RGD{l=mnpIfWsTIOCtk6eF z)&0^9T>igZ;2J8d9_SXF;yrVs6D(n&SjM@+FdZQ7UaETSaG$4kPlju%upDlo1-L&I z)BsKRo1dsJAbO!}Ovitt20 zHiB4GS6jQuNcbjf^yKmM1osO!Gos%JZec|K_LM-L;A$Yaz7d^nX+&QIXZGWO2bl%Z zT~+l2P1yN}2t=NxpC=}15uS|br`G*8Ngz*f7jO&P-QDf&W9q3aefVL;NdGtUQs(Yf z9Hp2oLVB7ejuJR>eDV%?f;SBAPlfdaSA}mo71k*#Dw6^t_3WXr4=bd&93ns6G~(eo zH|$Ks^tj>^BzRI`onH4Xv;Z4NMp=NjWYXVs$SSOB!TqVQp5SeOFg(8{KCsu^A0l$~ zeeUq2!g_*j;g;t>0NjU|vkdp$yC=9kyj|x&ZX6Ug5<{STE=}c$J z3sR13afVy`$(2V(nm-pozo+vMo;=Mn5mK=n6Khk*bF>mqwZ){pFMZjZc&W~_d!7+V zn*Z}5>hMHNNc(tAe7t5Dx|JAS!D(VGSylU<=>4Xt{LXJZhGn0Ewag!XL!ilz2t zu6{mJMgRgK#!GsbA1g;d?%GQFgJqf|$&0^|XV92Vj2%V@fPuyGBm_maIXdIR3|D!5 zWuVC2y~#@E5($%H5scPphPwBjGu@%f0%WwIy`d;V03P@;;jRS)HhAe&h88|~2S5aa zjPP9O&*W7wT)K~BgIpzo=ky4&G`0ghf~a7ig59B<=)P8fNG%&5l*(wZ%eIoCjFWKg zT-xv8E(zOg8}VC!A{YkEfxe?B71n8xzavQ^eJ<>IJ~f+UJAce37jTIX)J$Wu@Vn-l zdp%Q0c@c=Kdo(9HMP5V!MUKMz<0iV{2au7Wp$>c;t?|YYtrrpo? z`sY=W8I?gq!NA54kytjr{6*4LtjtEMH>h&}L*znr%>lqbc~$Cl&L6HBOcA(DCK2n~ zRqeo}5`*!0GtR$lPjQ4x96e)P|r(1TGc+{&CS2gJzX5!tvJ~Q5mcuGk2ljnfdTi|RKpeI~77?F&)r%YnLH~-xB zGYSS0+uOQ+*bw<#(k{POpa{Mjnj{75otiEpa*;L!joC&mGfyU|dK*3T{ThgDE~+P1 zYIbud<@%uwZe~RHy;-<&V?f%oz7X<2<`k-l;rAr+4|v2t1q{J|^zZx$3?|w>kS1*Q zO+jMGpo}9L285sVXpM_=<mm z-JR7>J;JMqD4Pc7@)X6&D2Z4BG$`Twfgk%b5E?KNV~-s?zkNRzI{)>4A!=~?WbDR@ zYCry+pA6(2DMx+LI#aZynH7KvQ1)&gqW-a};0jfQ7Kp9ZA8%IU(xkm6?}+_-;K$(H z|L*_#mjEe{BB0$6+<88?GdCZH=Br*q)q4-#@1*9;XE)}qk31&;13hA3B_99zfAa5v zsDK&R(O$oIf$<;m_VFj+OTYDNDxpIn z|J1p#q^k0^b6>WG+nxjQwc(4;1(R%q&fh5AyORFeYedTJ4pgvX(=l?X=!T5oSOzsO z@1%b)k0hZ|=~^IHD3{BGQ3{v}$TkegsGNj%=L#IeWsumK%vlqm2I+CQjGO0dy@zOR}*F3xN~8I#6|Y=Z0`x}AX2QaS@+}V zhNlDs!40>4UWOhUCwA7G=%tkf0wM)H8=5mxv$Lv8eAzbVQsZEsA(^ zv=*AV*1x4zeXy)FvAjqY#(VDiz;hjb-*=kfa2N;-!N8QLc~^l_XYfRFI&f`2cTC-Y zFI-#G3~EMvsVpTs38ewebn{f0b!fSv2juGuWzrCjGphxZJ076Y2LuBb>@YTaiL5Y@ ziocwiEMiD8g_eMEREjfqp`KCBN5!Hs6xXzk`eaK8PT3Zy-3qd5(uuePCX`s%!~xm{ zDG*RG>jcrlr%LFj!v!IO2?%3<}M z_G0Ek1g(KP(@O1J?dZ}w&By59DT0~)+#DqFTy6v=0%6n@-w~-UM&YW1?C zNU4qh$P&^M2!#d|3}6~niV^}1Mf=xh_6sD^-CM#B#yr5)bvBMtfN?)mgp}(XY^;0n zS+IOQCHLb{e|pFphr7QMNUpEDK_x+qcs}ewDBv=JR$_oP-Agj>cEpi@9rk8`7VKz` zfeD0y-5~74oJ&Dk3@&SA zaL<(10|-#go5@^Z!&5_=c5mQ~cOC@m38c?As93A_u3y>-5+dV#k;+$9eZLD5VZcu+ zserC7mG81l?}S6S+uY0eJgN-vB1=8@S#$SnylC>g>vXRPnZD3r)O2qvn5%!WAmY3H z{Dw1ETdm>iY=yk1y`kx<-Lg}s(DReqNON|#xZ?zP^P};KA*!sT-5Tsr)GbbrzWLyK z-Ax>8XF+i_wL7pNoGb1I<|G66dc7H3e?D#lH`wQI89YVfJ*kQ7xA7F;X+7LztQ;x2 zv9(jXO;lI+1UFtvZ_CWEn8jqj*L6b*xSNGG= zHw5GseCQLL2yea$%k&o46>SLsKdG=*0X1hswyz!Gl0C?sp2JxKA^Tr@JzaM`ZVgW= ztmE*M6aA#R3Gl-**W4k+CPoPAPVXGBTV3CV?YRY{WHwi$=VsK3XSDMB}$l88OXxQpLaIqIK?)J7jfyT1W@siATFXc=J_Q(ZrUhoD+s2 zJH2j5CZA7uf<@R=Wx@azUqdSGsSt8r3zN5OT4&ED6*LC|mtA{LZgmRR6x5$oSl@Q= z z3W$oGs^@q%`_8Rkskxi4pC=>wtza&sJAj+}*nFEB(dQFNJ@Fe)FoDjSS`QJ5F%zw! z;*f{c)nTsL`^A4xumSYb`?lk+J2Ij#xwag6@doEW)L!e<{B2(nm%=U19ZXeN>|RoF z=u@AS*UfnMO5&TJj(<7_a(nQRem(vCwm1ipPY=r_9O5Y|EEh357ft{NtwB|VW&Nf} z4$CJ1jF9X2%&JUW!?a?$=}cMs>D@^e1Ram8lVlKns0W*BGvWXR6vLlsMxI;RNOGC9l}t7s53Qk+=sYKuJ*hsO`TUyt5Inosfb7yg)2Sz@5e{~^=| z>puXmW2mo1M~>7RDy*E4rQb5wP_GTgiyQ;rd# zL-2G$_B@@*sd=N++oQrFv9yl`s&)VXrkWq(k`E=R=Ri(a48bix4(uCEp~=GlVKiz0 zw#%*Z)(0NEXZj()Bs(2t99|Rr5DP>K3KbN#1>TR9Q5EtmZ6=+PpoTp+0;1`68RMwQ zrZk#Nn)6~ws2J0XhCNXF*WCsLGBzJI9fLkeRC4}m%JmCNbX>L)FpEI@IpTn7knH~q zDg}&!Vb|x$X}i58(6~X3HvdIhq$nH2foScUsOr8m`Ha zNs%xB#h;=^K#b{yw?>8KMA0RRITOU~A+umv9;~EA(|>yMotlhF?04x6ljqJAQH+aZ zdDouZ6HvoVp(4(vn-zfz`8Q!QJ}xaZVWlJq_MTBulz4bP_F@?ey__B}BUMEbAUx?% z*DgB3mmj9@kt$s}t&&^@ZP_Iskc=u=xv5QnNAHg|o};mN_RUDdB&ciI{zl)ut84J_ zsah8Qdr-S~RD7y+nr5KZch3Ge+}@^$myFPbVcU9;)#g^NZW_%0_4+1jS7sF}jZklM zyJh5Z!i@+B!|Y(51Zau7I|oilDCHd6Qa=+CaPG`A5(0u3c!fO?3I+{*5o$SvZuaEv z0|0rFUBaufGY)z#oA(_-AYt#L>adDgJauyn5bW?ME^T(-V*x5hS5pb#d9I022bh3y z1d0&$cz`F9dK?Ewk$5b&t{5n#ZrE8^Gf$>!9m+n|Oqs)kIjZhLlVmD9+CZJtK-#^f zbm@Fa@PZ$~*kizm2YCs?sQJYwIqL0|73k%-y-}L~54KK@@j;6STLe6))a(B|+vvqW zhEN5K)KN-_-=|0;G$hSNlC}fyB`9TR)lvQa7}NdysXfLH!eI;p0TA6od#f(^skQci zH6ZidxegRR@a1~g89cs(fM+Oc^EhV<>?UdQnlr+O2$&!dBviyEf*q?GW<A<`SE?!58t4 zj#|G`=AJLL;S(Z4z(6KxDDfC*#E$jAB~yuSj5RK)?a0+V9l;ivw!P_l?S13GopX8z z>E7(?RPlvHs)kNv1ra+8r$|Jns)t5w2lcJ4@oW~v`mC%d+%H*DG z12Rd7k}9Pah!gVe+p0*7`Fn?+(+wpMvPgBl2$t;Fv#_KZ@Vb!^el4s`EWLPmQB+(< z@QA#+=?Vs75CMBB;6!99zONgzPFDW7nddBu3{7R`z1Wan*bbb40F8uHztqkh1YuwZ zST}~Ltg5|Au?smT2p>n|Fb(O7s7gUMp|?p8ab=ACrD?|dQ$a*+Fcg1_{3kDkT0xv4&X)ljaWAEyh`QAL`fvSujO8h|5P~`j zF%XUzrOMOTgE5M(*T3@L{SPRkGmbl5_M<>V*O=u@Lugl6m3Fay$XO+UP%$DakX%-4gTT%d4Js2C4LA|%ZJ%Ei-qX8s}epZP@)mG|eD-hnr7`F2sCTb9I zAT_;{ic*wLn!7F8t9%$K)QIa=if1y--O9pjT1@!WOxN}Dh1 z>Na->$b0^5G}3r;dHwnE>6=8 z!|^6Y!b>5r<&k>^qKP{IQvMyHXg)kSi9w}~nw0vD&Zh-(jOi2*3(Ba3L2VukAy&gN zC6BCG-RNl`>95HRp)wd~->PhI!Wsx-ST-|liE}x#Yeg^&1%s)r2B;0vm44JPGg{uQ z3-zeYOh*$@=@HH#o;U>vuaXr)G#OJiJCu$urFxTXuq+U8_GeRKs8WIKh2KxZJ%Y_9LP|(LNuOLd>-nE4=FDL0^?`vhf-vG?7$=OzX`qI{ zzIW&1L>tNO?Gh67z-s?s672A(_B#k3xDt`VQtPtKux2&8XOR>&(h3C6d4v@EMYd0h zIS?GE@~H1udUr?(jOBv4c0OMRUuVEk{HaEC27}#$Bz2l#XpSr6qjohwc)&QS3VTng zw(1vx7$t8G$J#lk#D?iSVgL~bqd=vyK-YvD8PQ=*H{^sCz%A%w57R?~zCJ>)8Wh~# za84oZ0ZGzM7|t*Fn9LEj-1nV8>{CiN(DhN`pS$b^huXenL?1EuJy+kf+h2#Mh6yL1 zgqHK6`A#6zM459x3#x?G5vs26 zgvp|oe!X;CFiRxO?;F9ll?qD-Y{5=6wU2{6u#DLq{D}<1W;82Q*vib2(XxezM78C9K&u2iFpq) zsbTnR^^;see3t4|mWYVqzW)`m2nJE(>c9XoYxD=MY!nThqND5H(x>)oUTHc(#xd1p z1jMpK9~!sCJQ`i2y)?jQ5)W-u`&^&~oFOD@0u@$)n*hj(vleSR;dUpg78*MC2LTxD z+9a5~c8Mhn=}~r>X%MitPF6 zDPlam^L10Y%X2KWGpoEQNcZ;;oDuqEiKNo5GIw!iq}0$T=KwXU#5mBrXwIoRW5_KX z>q>W#gy_Jv#vNtzP{XX|^C_Yn@fzCe)g^(@DxDdiBht)j$cOVbsIIBU2nxu;E}8V? z#`QHPxTV;*Ohj&^Jt9`FQ)}doOt=_-o+V?a82;NGKk~cR#~^oB!91%>FvqO8+q1YNF0lxVg*WjaOm0#%Hw`R%V^NI782Vpx(=yb4gSt0ft=9xgapx zCxQ2upS0Z+@A$?AL`X8|D@6v+->XE#ZzE<_tNwsj(=twWg{t&f3f z6FK}9Y)Ad?U4wf6Kv1)K3)Q364$k^P8s9I6#=I9Q>>oW==FL5Th5@a&=#}A(S7Fr? zrE7?XE1{AtRk!btZ7FS6bLUmte|H z9V3cy_5pT#qKD17MCZC5-U=1gLGCIcc~5i{=CXvVtEQ^fRj-`C_4jQw>yBAKnZ2~NOnQ2pYDg9`imZ!!-FHzxDQT!PpP&Sv;^1INqwr0-{XLl8cCJrw18%@dDw&NcKJa47n@pjMa&CjhsQGgdI0D`nzcxcD zE)eVZ*ivfNbyb;RA+5#qo99%;$`DKQ?-uaJtFWSp-q$vu)e{owNn3|~sobmo_2`wo zXWSru_OqT&kBaA-UeoWaGZW_&?^FcoyCtZ|8^FL)ryv_VJ@qV6i=Spble!;uPbETO zSh$p`FLR$b6Xdki7Rih(%!UwIPMC9QNgtw|#+AUFLE>aHTU3LVh`3UY1t1w_*6o@O z`df7p1)MYi#m+l;@r|hF)&%$#Tg@p)lA=VJ#iWdf*ptTswpoq$E8`<^2Ca96g7dzr2D4=B|k@EN{MOi zTpDSBLN(ZQ*(HJ*9^x!!J_rd_%}c7RcTTw!$is7N84CMGpyMLdecje7cgohQd|7yN zy?NtyRdA_C*bZH$`}r@h!G?KTR9I^ykesR%Sohto+7PHOJc{~3lWvk+5pfmqTG7vr z3@x-brTDGyJZ*rm{5*pWQ_{V>iF>c(u;YvrW%1s>@06#o!%P*bN(%T||jLQ8;pXev4Yg{$d zjFb)Np|Oidr#aA9X?2m4&61Fe$TY8ZhGSE3=@bRMG%j%~BYNg+W(B~iX*gEH45URr zBFWFFn;>~ZO@}ve2~t())a$tjU zFrs%KQ%Z*(7pm%;jy)93c-?P{1QKd~9UZC4x)7#A#StPNQf!{%K<3dP0KguWxatMt z#8Zy;>hGp*&gmErGE$+|Iuq>utKb#qK>hoBm~q{V1)QWUhX~D({xnFD>SYKgoi8`Ve$9e329qp6JXn$hhX5ORoYMK1>oRd^$Db7^PRf2~5*EeY96i9vQYioM!z}IV1$@aK1 zH{EoKVh-AXqSq%RH#4HU6cDkBw!)K1h2;yMxCSQ)7=dEgkk3p+Gm=11%zfKWjI&MG zg&z~hiZ-2hmB6GCKr~CMMf5zyQz=Uu{k{7=VxkH|C148c!@>tf>E{{rq+Y53)E>VJ#4fgAn1vp&GUV!{}c3 z^@+&s&VjgUVxq1&L`j^g9$w~IRav8r*18+UTOc}s#%?L`vLWiuLB+h{~n zneX6AXqOPpK9rc0uH9U&f3Gh#M?kVz|1@f6r=?~nS4W~WpC&%$h_Vya z^2vMXN*k`1{x+^MfRK)5xawrO-Uzen7;3&3Oi%fb+Gmx2w zdB5F!-Yg#oM9v5^A>A(A56~q|yUnoH3d=_zx{{h=oubOZn67IX4fT zp`UWuLLiwU4*(E0mEr{+OG_KVm$1tU2P3BTYB0ZdXjt?9NU9jlK>_=-Ca0*dpyx;2 z7#%9CEg-Alwt~67MI>Vj{z;t*ODM+fO_M#gWZLHH&VK=@gTU-An(`^Luwb+~H-FKT zIZ8|d3BPOSfRN6T3X7#IEZrmE-#|0ji;zBHiCGzp5FA>6J;g2QKEd-E z0fb0Ct82j9tXMwlbA7~DeYICntj``og_1(ClX8xOfT(~63s1kb3hN|db_8NMF85I- zH>oNtO8z9Z8ZArPb?sWP+13l`wr&I0G1Q>+Bd8CX-uK5!9O{-P*fL^d>c!dEeLeGZ zxYAi>L`;kylm6kFaGQiu(0p8ukS7`sAPy+)9-ehrI& zmM}B~)w$S=bt(_Xrn>SxA#J~sR5vqj_51xRQr?gh+%Uqnvjw~~H&$IYG*{_SAZP|Z zw!e8k^v|Uma^nr1#qmkiZK%n%2aX!6gysA2o}eG@%|?%0nrRcC)c~Dh%ui}}u5l;g zQv2GQ-<&Xus}^GE=MXs+*BxK0J@!OW-Ktylt>*D21mqb%LPStdAkU3ndlp9m%0T9V zOEw{fzS5wQ8{!4PsDr=b5d#}bTmnkXfQwEjnrE?(Hs5Tme^iC zXD})B7m#8#5595Y85|ipt=oPiJS=c4|$hK$h2q+ejc%;HYe%Ve(mIh|FE*D&N|LBeB!KL>9*f`*=PU zsoVrJNW|{ht7HTuxyccLGMfBh(J>|Zq%~6!kg!QVRwm^@zZ4nh_lUWS5(XBa03!-^ zWGXD_UYHIbQpb@`c-#4W2uO1?i-0jIx|hn?Q}fj`3y<=JMqW)~43t=?TZl4R#Wt!D z7U@1C=AyJvWlY+e2d;7AjYI2n9u;@65yQP%6fIW-7P3h92!t!s;%J^IG@Pt&d+UZAS4j`U_~+&^fM(yM)kOUmXgWUHFSc(I*4Fm6(OnN8Vf9wA*xvuVPO(^0%q-)jc~X|dXz9wk)uKGL?~8A<=4pG z@o^RFub(S1KYb&714e|R&&qRUSK;|Q(6t-sc4wa>hzAGp0Ct>GH~4%sgkgHmVMxOi z)074y6VQB}pDo?1&+2?QvK=@P5qsC&o-fJTSo=M#5D_g{op@>GVk_`&%R0XqAp;yDkw zGq1Y52GIV;e_RRx9tIsGqV}2@g$Q8QYoOlq=d4I5?gQZ6PNQ59;l*G03#KEKb{8DF zKC$eN{QExz!hkXgL>`Q5k!C?N0V?Sz$5sT!NmEz0fLH@EKFBNV08lCTFaO++8z)-u zeAw3sGZoD_(O(6|nb?&7;;(%P#X_hSla`i{UL-s^fE0D16JF8_jD=Ca_;3H`pT%An zqcHa6x$!Iui_N{~I*B^W52aXCSCwqs?(r-C@NXOXFRJ@8HZqRj4AsWL<7g)q+qo?R zn=n=H7gr>UEX>{E>*HnhJ9eygoWJ^){ydme0(pSX`FZm}0A#G3Z7HhG`i;1Qh%Q@=6+JC?8=4$de`OV-`yc252l0Qk&jK6BoS2S5Of!YHHe zlRx)g{8uPNFpfZxok_5#&p8l4b3qqbCp zFxo-6mY2>5iU3oe)Nytsr`H}J*HtwPLKy)bj1z``CfUC;r4ec08%PY_N;(BDtpqT+ zo`0@(f3Z!d$*M*vrc!d$p^`|bnDRHsw8KOz+^Krv3fe-7>rG z!|vtZLI9akE*2N+5Ujag^PEY?he`kKn7|P1T=cDP9Juc8#kABl=kq&oa+k=9ffm}J zX&WSdRz{4owTRTV4=Y#NOE4Ar2-;qs1K06dt96zl*zZ-E9wj@pNcU2IJ-tT+lu@c! zu)3~vZH%#a%%H#_ZCN5C%ta-SN<2<%@1(NV2UTHZu0Hy3q!UY0K~uzd(3|K<$@pE> zU_<5(c1l;C64J_>5r84t9R|%XMt~GngP6rg*=nzlaoNgSm+%C+cp(tr%Bmq`3l8IuLO6p%XbB&B11%H{hvDutc5}gj&nq^>(`PtXbFUzHGST ztxddl?L+*4lkos-o=(Yq`V4pv7 z0@W5SjP0}mKS!ZR+QqWQahNIyZ$|2Lu;gRG->_i`vS1 zbf1+)umbYcGDB|1f!F`>FSW`zPSP-}3SG9X_50B=h)K3SGx_fz?W+RMH=r4lcJQJ7 z@{EG~j?dOlIF-9Pi2>}IPdHxZ*Mofs%kn1lgtk@g054g4MhL6ia@*&CHnL6Is9*)5 z0%Su&DTjN0F{{pE#2v#@(-W#^MLQKVkt_jn#3JL3^~ z6_F9}CcWGLpAo_WZ4Zd}Sm|B(DtIv>Z*mto5i;62Lsu+^lu!d>*YVuH&vn^yTH_rJ zqZwTb?#vmlR1uTlyu_BuQVrC)P+@iNz@xF$nYdV=n?|$Fi?9^Q$*$9b+RKjD7ZP-z zvS&OCJcX=vA(u*-?*ir#Acq+3{~k3S3?zB#%cm0L+8rVI>l={|)06OwNiT%ug|nUr z>#k4n(S*)??>X{=2gF8zOR5@(JTE{l@!W@g(%#M|z`umXss|4^HhvtsTKVp8yxE7n zIE15Fi)C!ufU0lZui~ZOBZXt8;~-z4vr1kXw|!-4m;Ln>)gxfHVVw2WjQ(mb$Z9;= zXJmQUY&`hWc^BBvLg}!TOpk`J#8;QvvfpQfuO&ScA5-Vo)kwFTfJ`X4h$92|&g}gz(pQ4Drfszu zPk849_wMX_Y5}VeXhtKoV^Z3tnS`|N4_Sv=>lqN8=g(m=c?MSxRHVRkfTp1yxS3K~ z@2S7?;TE~HqrHeF9b1JZy-fbUKTgumvaS}A_p9)C@q({10PHsTT?YCl%eflumYT0D z&9Ru?EB0<7EMRX$dLgWlxf8lFnjgb@l0y`UA&x-rEr=Px;V4Zr9>mK`+p0e*+X|i6 zgsozANdX7))CkEl>pFtGaXQU$|ADrpkXHxcPr|MPu)nkD|p?P`dZ*_KcS@7)rYJCGruLr^dllA9xXKE5G4O8mCxoyPl0B;4jRpuP;y4Yo)hX6DleQmks7tqIp{RxmSeeQY z>Z?IL)w9+zq3wQN+`OvmLRiUY*ZSEUT~#Ea0-I6i+gDgv`zVxrqGmz($OS;`$bMb8^o*^u ztW-c|{cj6V-F;zqhWhJ+y$TE1-tOMSc(AFkzSQY?tFVCjt<;mx#z&Bj(n>%bJ@c^x zrK}t1zUFA6`d@rz58!xgXw9o9F>axvHT)+=t-9}c@MX;wez87VFJgM-inDd*=kn%o zc?j!bs2 zQq=Q7d#o11lF=4Y2=eca*m##tdKS+Hd3fPVLqZL!e*Wl+JRYu{M86(59F_?87uVgv z>$YPCK1@%;GYH<~x&u^79mGDt12Jb?^j?B?)bhHis)eVvP3WWs(^YHo4RxSp>lWHP zkteZUEie2W%&Wa}I5VtVmO8r@1$+nSu0KC)>B1?g%#|)EhPUu*Jro&c7Lri6_Va z03ZNKL_t)KAL%yZajW;BtoJjsS3uZ#Y<2Ek8;AYbRYU+~AoI1LLYDt7CE@7`fzDxy z({Ppt?N#WH3}H=O*~(VH@j__35^aTgKH8?++&J!wKuQU;&}u~FyZA%FFc5s&Lt4M9 zc4#O8+oq_m58E6_v|LxGC0>AA??Hb~2rHEZxn0v*<->eN9KBTt~)9?5HK?F$&B?dBt(W!(ejF1|FQqnO*K}tHeQA$gUMo~Z*DKR9ZyFr*E z-_iqVi48`_Z=dV>{`U8-Yp>n+>ptgs&UxJDh^ft(wMs?{{=@hnn3-5xLwopc5VSl; z3dW4QQ&@ z&Sg>+9M1-scv4GDZfVo8k4viD^hxmon!jI|+$KXw41Esyq+ZB?4+)L#QwsSolj-?< z1_Al}lV;0oymxdZPi~=gI9M$b$T%xnKDJv)_3xzawi&VIcD~6p*pEj$V)+jT-(SjR zoS5OHE8P}NW9h5bgsS`Rz5CMT<4hR0c+LKqI7R)~>T=-_p_rw7OoS#iZ{AaKce<8x zLox{5XMY!*97(lU>p9YF6`4N6FX_fxBXd9A>W1gPg1;l_g&M-fQp_mt%VfC)rK2z} z4KBRm>-tiLUwdnmO-lO$<^5D5#Z4*uy`Z=t4SKH2iMHJxRyd=_-)_yLj$R6Ms(%6|66a>nlll2P-FdJa*2UbQg3W@29X1j5$dkv*K`AC7+=n1v0 z8HFsJ7z$?C8G-|O24vLC+Xr-8&lS^u9w}5b!>CKjYJayR^+aEhkK{V}Sk+24mK{@& zsn~T&OrQVAEcBmF@#q+9`#KDbf!l12)!r979sm8v=Ph5F|LVWJ!d$Omnn>D|3*o&i z-rI4*I|lJzXFkgD-k9XLjQ9{i37}M2T{OWYQh&~Hn@ImUa=+!?2EDaigzAYlWj&W? zbD>+~5i)8`VryXOZFl{_XhB)#jCXTnduQ3`G2ev8z1g*yNcS?kMwe#_PYbW<5^Tp z=Yk|znQKN%M5U)ga4D05f2T z&i*wES2&X zYcl{PZan5rUct`3C(vyw1T<%$l-yK^g8S9~oaQIrCQVls-O;=Cnl63d^ahpdZC<(V z_VYkiWOJp_YP}T~xS(RR40ZaA+{2^&ncvOv>!Y(uIBBzj-! zdIOoXp?_8Ilm7r;U3$Co@y@E%s^|z;o{r9JNK!_o&qCVa&QGYw;HC|1G+^~BR43S= z{h~(2RWFIQLUZ%kTqpr^C1KPwi8VNLB4lLW7;_fWFSNK__w5YE!3O3Tugi|b>&0su+s(K4F&`X+ zua+3EmYAd#Y?mniWEi0z2;R85u)U_th%}(hE6BAJmJg9%36PgZqskk2c>KVYI==#} zwRDR=q-`^6T<`5&`DAMZ%$tZ^3eT-bhn$;*)=50DWcvndDoi_b^l#8*F!64D z9^e(5r2E5RKp`k(7ghy-te6j5Gt={P6Q{r;qAtX>{rp0@8Hn-M*-r(8*5_VGeBv^Lt2W zDA8+s6LS+P@<=G0{biM239}}!cQI77=2b$+>Y|8t01a;mAYgx>HR=_eK$_b2vzrL1 z_mBLu_dv1A%2iPFRsx~%7z(utU%tf+v{p4it0+1A$vT!*GLtP4cA$(gWfiSc%d)f7eGT-LzaRkoGUw?x>-3O(?Z0ttG@tgQx5k;h8*f zL?i@N{eG+QQN!xbl9#_StjQZk+yu{^Hl%1Y6At$dzZ|Fj?%u|8^fEg29lak2q7sV` z@Y3>BYMVh}iFRLw0=W_Ybx9o$ZEeKOvpt0>^`!F_9c5mZpF1?@mN6F7>{%FXB~eYjaHh>Gm7ESb)dsmuQg-Wu2YW(uG^4SI=%i7dgMD zNLRt+)+LMBSyvoOxz2h!U!GLYb=Rde=|Qvv^2cix^auBk-#ZDo`-SxpJ68NOqOva5 zD7bRHozw3n?$+v-4Zr_H^FAy{UB|C|a8kZQ& zN5RA^PE~Q@H*B{y z;bw1}X$f@(e+{w=0<}b&F1yB^ao$(z{km(GWk0QbQGW$`8u}}v&bJIAXJEY zkdn?0NyA?mKRXTd!ok&@x>q@3Z2z z!@^df4v-B_e&fA!=i^G_TUolvmdtBuw&V$lb%a4hpXV%~pjj!kDJIHG)E~7Cq^W zSeQ!{g|3vSEcTXy$%4LxS73exMKRlmUgu2iXjNm7rh7PO1`_|{j zr@z~ACilN;Tzl^WcRX*kV86|E^9*heZs4qZ_jfgTethg$gIbv3h7Ny4H2c}>bYx0Z zoaJa-M|o7?5G>)UjoUxD5jwovPlz%Rj*(5}RYN5CEGRos5 zDpdBtcb?{oPNA>}MG;Wm{Hyc$J!!U}_JDJg1!^ffP0=SPwg^{S6t_jB#Qj-__WO5qfGj>CJrjgBqif266VqK6 zm^emsx&ioOza-b;(vp6p;CeTc*AiKN5<+B}5?sbh(>k>tnOwEuf^os%*<+{v`Ob$q zIpgQ5d~+y;K&^T)#UCoqv1&J8V>F_3Im+o!1>(rW)t_`I>qZTI(op)TZNrvr$W=U} z4QG4`3(MtysNr@TexJJwEEW68_`7YC>PFgv~@gi%4^_O%InM!fhenLt_gKE)f-mbNWTzAG4TGsaC$g zW0KAsgGV$Cznl5mcz%if`z47*4mQC*r=F5d;`R3~ShxLI!1^6Bx1ZiEay2gZ#gzDN z9I@-*?d5Ezl*c^X9+aPB1SB)pgQTRICWgN2>wF`$&=rOxs~D1mwY&kJ!86q-uAS68 zuuci~Ap0f9Ga6&+`XGu7SJc}H4y?QV^7g?uXp`RuE4ap{6>Td!l_)2hf zJFtjc4FukMC~2xd2(!0DsQu;@cPvZ==y103>$r3Xzv~TM&Hil~%>VmJI2FQ`{G9H$ zmX|!gfevv^&)vlb-N;sYsk@!cbN<8DGBmd=|AhaBaNb=ty%wD}W!>2l^Ob&{!}U}X zDpqb)rdKYIU9tYT*sYz}Ns1QR8)6h8L0c6;T^HBEf0Unpno)@jQ*-9FUtb%^pmW!- zjxnH}^qOJlP*WAv7NLlpd68^66sJ^wlZ^6-q0D^`jxJ98&68=m08K6Dp2yFp`rF1# z!(}C#@@Gy04_PwDYox^$CXl-Tp!VoZ19I|`H_f$(+zR56G)5A=GVVlUa`H$+yrB2$i?! z$?^4;?NY|~(lg2ssLAV@&&iLLhY79PC3)PoxGKK$5s#1qfmS9p1}oO@v?nST{nrtZ zGedPfD-ziLk?Ew<<`x@RXTpql|L&hvM4M0!>@8AILc8&H<<(W_1-pS=O)a3~@&Bn+ z`Oq4PEQ>9rmbY0>FQQl7{su>Hr-g5gP0Fa_6t$;Y4>7=AWuXg|H$7sPr;5EbTk_#kUVgqbh@C?gBFt1SJ3py9F{DgIEow{dl+X zAIu38?m2r(8vUeUJndb`FF3ro1QQ<~oi%T_+Ex=3t4PrF=#jYId+}=68|h)33!L9j zW*T&@%|^L-pY@ZxRF_fpYtuQ~mC=DDFt|yZs;YRr1>6RlPi5tet{8G@O7tl$J!>a= zEVp>XJdG+S-=CnbVhO!H;W!%~wT=sQ_&tOj;*tZhjmE^Id<}#77n2o6YrFFgwpMVW z3MvtkFSC?Z%e>?kg~eHM(uZ9RP0FYs1^}@`>x|G}SYT{sXE^%p7YOO<(4tH2Ixnq* zF}Xm7qc6c6znG?C?0z$eAf%MKr}N{eP>>m{j3wJV0I;UabX)G3rr2kVbJdtLgyLJz z*tKpWHuIgww64Y2X%$HaR(zlXL6W!p_zCoyLEXHyD&08Huq5ih52mjr>!PC8uOOYT zICh)l4i$~$sh;|TvYC2lX1wL=lutEKfvx?uE%Ju(SbSdl3mDMqA1JMLZm`VR&e`=EqY9LHE#juzFp8`!NH8_QsvY%zW*?TB$ zKXqUVr;6MvlIr66dNNDjk4ispF7I0AUfv`3VC%|y2;>$BgiO=j87cqxF}`1W{%r`z zS2}GqvQBGO-;g@){ek^0jm_jqBP9ho{&tzNHVzN_91TD+`Zf&`x!JC+LjK^9XGpiM zs{Kv)$Fu{;2ERLUG}R8v-CO57_qmNjP9wW1xcnMxC$?=5Ee* z@XUmW?bBC_WmQnx-A610TisHv>-w=)Zw$4Dv_z}S_y6kR0k9me*exJV5jLCt(=ghC zNvR-t^f(X#&WCF<)Sn!U(JpjTp)hO zR$k#b3xDkUY4ID)$+R0b$@J$P4hiff zpQTCrGiv`{yT_TtEXIk2F*?;In+-pHdVJgEFJNoMMooE>A#KM>y+8~c{t7$7iOh)y z&TDg**P2Cxb~utBszJN~Xt^ha>yOGuBC%R3W%=~LUGeNbykK9&qd;GmlA3iWfNep^QT^oRLTZ|X z6pGzC8nCU!bbn`DKkl*&I9L7DiA{gbrdLoU$FMHbTAyZikn#!#+1WSsP9TIbIfRu=EhpiwPH6}mm^9Md5Pk%PR&LG)O!<5JAijZFdF&!hXq zcnxGf^?b=g&b;lq(4s|Cir0Qi&&`KsyLl-`{|*1HO{O0P5jtiw`L>sAUQKENG1PY0 ziWj;z_diadmS|=j;DAYPY^7#vs$#|6v6VSjJ^k1rQLA90(a`k!N!NV2H!ngX&pa4$ zA;N^)OHg6Io^QW|L-OC;Au8C=XDS;VwYKC`PkT4qZhB#QUI#vqg_ar@l8N1w^AT!# zZsjA?skH8z{Z~iw^Hg4u@LvbN7-({DHfTKGod(lv@R8-ccUOvmx*(({`I|)Dt^;|@ zR{D426|WLp8GU}15Xhp(M%D?OWzGcA`ABP57?C1X9gmE-Dc<4F!;WFEYXje8x3=G) zs6cuz)-~n+FMLI(D&_Ye(=fj^qXuVU2F|n&6q*#i2N*xIf1u^?g;)G-{&=|)WY|$2 zZ_&X1?n=f%8=3>gaKWo^=I_(rt-*myh8q9rY%#p1T<9{_{+4D1tbluKz6e{0&BkpS zwh7kL^6PvbZW~IZZ41;@@m9+>bET}q-wCDr{uqCLpyQ`ZlfzO^c$c!(LfOY43cWV4$QC zeqo&LS=kZ-;Ze;$d(5&`_q|#KG{Tohk$aQK?8ub<)`fkJMfC}2RsUWo!*S|`%IZpm z&h}+Wx|REL&5j?$U~+@3_b^6~_l7Jqin(_WrzOolLQNu1#BPUwb%tPm``QQnOY}x| z8O?c`&JiAyUm5^%89ug<_0j1*taKo=Z=8Noy^D=#&R~AJ(#!mT1O-S3-zZI7Q|WQ~ z#EYj6y$rp~?7!*=xuyQyP_%$xG5eH8m$$%r@;3t@_Hl$}QkiM#t1qtlG_kZSEYcZJ&FlqnsE%(3 z`^>rz*Y2oyk+Aio$?%~LVwL^|N$vaJA$m*kKv=V1Mbs5OEo zre3PM3+ElXhv)i}$?ITs=P#5yzsc2lmpYdH9|aD15fFNs`M+Rb8{Cnlx2gQ1w!d}$ zJ2T7wa^e3M2^dnh;cLfI8?JYYDQW5-{kX!Oy?HuB1KxWoQDq|h6qsagF<*Qq%sQm< zPE+kt`*r=ItTH7}sc1_=Vv^x*pi^7p$fQAI=5!e{6WIB}xpaY?_2TmS0xcm9*|z~^ zhuq!u0<>SwwrlE@!m)0$uuN!%O~@#0ICT?PDQVUK4ihf)9hR#+<=(E9-#Q+WbFXFO zH!3H{%h>H+f`LtQL&r{hO;~Sy-0^#D&9Vw)aRF((tIh`2+1h3ex77p-j33)~-|2Ub z2^t8}lkc7ugXn0F{5IBywAh%07(=}4dJ{0USVhM}?TEeaKpCDpdQkP2|odd}n$sy+}u%6DE z$EXI|3`_;|I`1`4!jh}E@EEOP_O>zG(1Bt*435|DN~b=90{1#Pp6^K&4Ky zjZ)9Y(7zDccExkzWYpGoDUum~vb((g3L#nC%Ntt?GKXC@%r?kAf*w3*>kGyIX91v5 zeUm%)Dz;5jXP=lmyr5GQxmyGt{aV6@pYV6_xvP4v?(HRV@OR0?Z7`RioWC888!!sye z)^9f}I8Z|th{y0dTb8HN*$%=5@yP~hkm(g1`EhO}7oLSGvIOjgex}IE)Nxclr#z)F zKVz-h8tYZ2Z__g)_$3yyZ4R4Aw~XJb?It_|mKGnsh{=<%a<`3qHB?vUiQ$XNZn0b1?VSXjYQMJi)WScw~xv zeIU9uRQ7LzG!_t*{krIpt(x#iJcoOq4E>7wQi7Vf_bcj?#k}V{hW|hf3qXd?(=xZQ z%8Zi84R~3F>>`L)K%boF&x4J@Dm6XmReXFCuV_!J3Z0nI%)+qX0Ut%4SBqzc$*qpt zjzl%946`NtCn8u&-JE%kRfvuFSbMqN4N~yPB3a@%>{H_4*pXTFe3HD<#k=5NM2_Us zx6EbSP68b;0y;f$A4QO9Fog94$SQqs6?uUU(h@;VxEU|R(3dSj0_l~}Tjj&^8wwGH z>8)>t)m2iW@9suc`99X=x+^v(Z~#dQu2mQ=Yi1v<{uW&}?9kTng3LYe!*OTzi;|jo zKb8A+Oc~?~U*w&H$lQpm?#43mv&P4eHKFazF?)Sq*O^v#m0#7iwEB#8uu}+qUp&jr zKA|cJ1-elV`h=B#8~$F74v3xolhHuIzMIz}tQmfPV=5;|xl`#E_QOfv%wB3fsHQDr zA0?>UmyRjozKlF4+85Yp6cB9b7wE;eHRgm~9kwB;RLnR_kpXXF?W z*(|?3Uvwy@V|S^N+$p%mu8!;AZwywXD;HmV+F0x9?fh-unB5qBS6>V0ZW3(4pQ|@1K;W)np0ZcN* zpt2va>TQD|F8%H3Byt^9=iqL-^uTJR)wj>ZBgK@G{rU=t(;%A^ik8?+?)I13u2aGr z?Vtvb&Xu@(nz9&X8JB)c-$TDEK4Jk-I)moMFFi zdupY-YpBfJMn=oqDbMz^wdZs`Ftd9mAW!(#X;qv6NE;7xtv+OR5Y~*OP8oadvcQ9RM@>s#r)q0 z;%Afp3~j{cN?MM&N--rVxuxUD3c77FJ5#=Y=Wo5{MdSfWJ(a2g&GYyqW?hBH5hwIb zFRBy&7ZxW)FRf|*t<1k{wSVyPIkb(+0($OIPr8${+K;Q9lg;wL~l{Xn2T z*|Dhk=iSxKiw!GcTH!^gu{-{^H+)FZWjuzD=Y^FwA0-cQI;InUW;a#!Yu|6?`p0mZ z9q+vAlh{gm@*yT9J@aO)3;OH0QO@M2m_)q&d`qkkGST61%$xO7wCkjalm^q~GY#V5 zf@9!)-2>W~Ejjj`J$J%abzPUI5WcWOfA2?+ysMxRI$u09Pl*sG@7Ya z?0YYVGB2~JUP&IqpQr}NF^pccz5C-d>Y(fCRF9uWd(^w@?gdidCTMWE@41pLQt)S?TdXTfJ40#4=eW`nIVQaU zcsWfS(M0q2V&w420u{T*t=$wKz3Y(mF|;=#*gsBAHPS z)f|at#_Z@_LtCv&(jh1On^_#8NQQohEQkD?DyS>ofW^MMOI0(r(9;kp);W`ji`3GYZ_wUib9rDj7YptRI(+cXm(=dke>Hi2tG;NC6CEN_x zB0%nE%5qQ3Iy?Pn70Da?e)NTX!mZ@?%Pj56F66xa(n;Jv{!S2`PJI0(1KZ90@HWbq zErEEDfgKe_&;YaRjsI+$J*`>1#h1Q>4Zfc-=Gf+q?j2Y)qR-M3wX@+Ffkao?&(J9j zdVfYg{n@?TNvOCK2q@3t=n^HW9$RmTw3PX;AJ=_zKN&934d!|$v`6a^ImA|UgDbx; z)j+C((DLCe7>Wq_s}%n~XZ#aB^mL6FuftehTrTm|P{5-Q<(XOB(;6i9+DOYjI1WOci1! z{>>va_w#nXge;Edo5E6a3ItHp2r#Cz)&41Ws zQQZ=~O+G!|H5pXM-sNk}2o{MjA&K=Z?sbXK08L}HgL^-(3jD3zzF%A5S(39<$zyuB z=e5oEuC93NHL~CLs~{aa4h;oa#3M@%5Ua`mN~}YQ*>=m9kz)(MG>dTNOK}g4tM+x8 zLwhUC)8haSo){s_9BFeJvL z()=%qxuqMEu$R%?|P)+drIzu)0 z++5TV^^&B2`L0BJPI>lVKCL{+8fSxFb% zK%Q*D18J=@tU9V|1M-wO(YuMq@6%LQVeC4=a~UpdCEwEECA@WQeBbmwW)}I#xWII_ zD+v|Z7sU%aS9fT)IPI1)LbP-!>ora~inoluQx(Z}`(TGeZWy?qJIV{7j3uA2lNADz z{6Z@w&_l^x+qMKGU#1Hw9%tu&XwvbouI|y@~*BA z5iU&bpV4&{Lk@EHKO4wjn5;Z~V&WjqsCM(aP|A$7y=9WoYO0U(aXEXzyGD-MMqx8K z`HJh9mM4I^;5ZIQiv=~^Cz%_j3(VoT%iQ+7n8l3?2+5A`o0@CpNzutm^FjX`GWw1E zUJ`?bOqX?2iZxwy-xUaqQjh*7&e%0vvjM+DWS%#Xu6!2_ah!@y!WTR{q)#(SN=`Dm zY=-hveyc3cH{pF*sZwiV1?Yf#d(t6HR_bLv3Sa`IwN-5Meu`mh*k7{*>POJcr1%K7 z1&W!T>uGsl*vzdP)*fJSC@?gx(yTuD489rTUc{Z#0)?TK4clE5kbCbG?N4L<`OhvF z(WPJOM?w@B-r>Z7S%b0edc)q&gkZ!Wfkeq^XB$TM=z^NS0b8{7@~^8;qbT;%iLrZq zLr>5zDc&j+PFm4;eMugA@5^Y8P**K&*{27yOzbnJ&M90r(jS9-dU}jKvRu$)tp1Yg!cfM3>CFFR= zc|y|jBex?1A4`O0(A(_7ctH&^tCoEw>v`LuzFjSuIlXSu7vq5rmYEd(P^pRoenx$* z9ujahRf|M&qC%rKkNId#G*I(wE@+Vrt|h(;>QcLse^6F()=oA?cxeHk_qw8hyAyd z$DDPk%;Gkj5ib@fhpOKJv!k%eV3#mBRp-msz`cS0G-$E;nL0z?k;R|nf;FbUfcGlC zanb~6O2193P3vDx#&UdqkjoGNbIb5mkV@%X&4|yq_7Zxo;3H#beV`>g;Gm%UqQ2!Zl<=Yeq7Jr}?>(4iZ>P4?=O{^T%{;I zd5U5^D}wJ;-+&{d1j5sywTtTGuyYMxjsetoUq@EzE4Y}r!{B&OMO9iPsB^{cslFCs zpF~!8{g?fEHXNEenqfs7SP*n~+Nj5{F`5gXc-IUa)I;qF=bvN66Yo~l&4?PEG%1@7 zJS#%@Hn~HEhgMt*9XDG1e;!`RLQh$=3qc31zIXdRdZPA|Ga2K@VGT-cImfRD_q%MM z!H#MMN}rPLh$Hen55^spT0pA{2(I)50-liX%_t;V?};o3y=ki-b$s9n0=B}l^GG;X z9zI8EldjNyV8BR&O&yS*+@E8fm-`3xoX?uUbiOeshyGbHggA5XyG0xm-YK1wK|eaZ zSpueo;e94(3$Xlrb0qj8>wO;66!j?9dwX^}-Ks&!;oG=rV+Q+Rj^Pl>7Zjva=!PT1 z+XwKYrFAX3PUJw!P~}B$ zi|m#JQ3dq8(kN?4 zP!hX{4B9X-23`-Bi{E$FoNgKQdHI3 zv#My)stzfO?oE!roJp2GJ~_}fUpX3MZW}!i{MkxiE_6-D2v5gUu0J)u6!cP3IOWPd znR5H|`GJ(f@Lr(!dGP%+a>ORUn#OS>G4L5MeqtmgAj0FO5&*Kr6uYwWgv9)Gd)6oK zYqwugQ{-=gQM|*WA=?m!7_)ljHZ~s8zgo@V-M}4%v_484f`ymPSf_rz&hkouhQg3Lwx?;tY-`#k(u;M6I){wzA z7;%5alXNX3ogqdKvdX;2JePwdnRErIc`IH&{y9I5_pWoo#=U{4vV3sU=lxVtp|#@h zxw-DZzW&Oj)O$TE)V8o&6n+o zR(;7mb9BPlk#e71Adfa9A25R@-t+BHg|9JiQZq3E1rHqhr+q43S^N+DwJdEfhTimo z6N9QbvsyzO$^bFRKWPES#dsY}v4i)mDTzn^8;b*Y0VuWZ(9+Pbw?ueJ=)YKjmqYtq zCY=0|2fsZnT_xB#Px89ZYxrtS-M^gFd3=O9*FJzV}OPBj2+ z^i?!IwwVD7k!i@^n&3nNVWaYdJ2@|RuUs5I%k@8Ny}r$A2Hy)OE}J)i)iUw~rGnOW zu)nLr67~ju2(j?nx)tPmvKRXe#2+-KD($Hk`JMYU{-evr5D$m^f;SL61N8T9+iA+m zI84>c8M)&(ac~&4v9P0sz`P0RDllwCxx z`|NecZK=T^y*qBaf?{{;#I2r;KhV3|Md*6f`bNKHKV3OTW8DfTS=n5UcA)odW6u}^ zH!MoP=i4nSS>2r(mB<&_bzXE$IJdCCFK1<_pbM;20@55!Espo#*Lxza-`cxedbH!0 zj zL#01#Uqz8dtf)X!_5=>XettBfm#7kbgDz{Ed|fHkPZ*m67XM*vDoeH0dWB zGQ4>@c~%wG9McgnvjL9u?Mr)GX9eOlk~^O@<8_qf6AN6WOflXPSI*p2q71SV5i$E9 zzy5mCY}_hpl;C3j-;0(1)#Ke>aj>7X8Ela~kFJ6@Ku@*XB3IH~=cx6?1U}~&9vPle z+vt~WfrrKR17W8N{0(NnL15vyEGma2n+qL1^#@KGwyoVG=+Wl9pxXh?4)?ONT+?-7 z3SU?8bz5tZ&E-{T$_Zwofl{`^NqI%s@xWFXtr)%Va2s0)_i6`R(y7SPjR?V$1YiU-C$g&ambxw*!L2b@}va;09!8>3MbU>Jp6 z?MT=_^ky#}(O?>)^M#a*v(mB;{5VnOk%sY$Ta)Aiw6<{;)-09N_n+7YA@0jOsGjJ9c^fh_?$ymSHPmAGC9WQRa zajl-S^=jUM>?^!WJqRJi%(J>y?J>6-^bxCUd(g&6kHL?D2pEuY^mwD)NPvL&9j{{oDo18;5=Dj5-$lO6?r{WwYeTECn z6w+PAj)5&LVt0{+#*PdF)Qo5_t)}K`E0ZbX^!M;9V#^mt7;vGW$z^?kl-F;_TuZJb zCP~a0wy_k%e{LEC$3488NIbu5S?2SRmPybcMXY;dXC{tf;Kv;YI!*(bW_jA#{(45 zdce^QdA)~A{7dviIG!v;oc1se)k9IUygunoV46(uzfCZ)^w=~ohd!&J5> zW`(~BoNM?ORoYJQmPOE`!o_^N?V8|u#D^P5TdhvU)ri|zcHBt;*3A)_>C>?UQ zrHOnq-AZRpbowzQp^tu-8kv)~@2PaJOzN$(*0xVU8))YT3I3*!VTie#KfVB^YYm_8 zCTVN<=gOj$KBq`NB>~;2TZVyyTX6&7$&Z^BeZPPk*`%_mj-*e}B)sV#KAkvC+@5?f zg)(y=OkC2L13)32r%Q9ySa3FaksN6%_8!QnTdH}g;2|4KS!wD$)pJ6nc2(+nBHdfyp0G5jRWHlw z{_k-`H6%xewmwM5^ex+wOp%hcP2~Y!2xv7!jc4Rb?`5)QA-;+L?%hpCajm@PKmmmn1p^*1%D3n&y?TCstrDWZN(&7 zDX!XYT8zGeae<`s6|@NO7A@t`7!TyM@UPkfW@%{b?)(yfs%Lnm)@(|QXO$bkB<8_i zahfal0JI76BfViK3+QNsfD}?N>>;Cl?{54B!Wo13ouj3%6|oJw3(PiiFNB1!WkVLb zvtRHKmHC=t%oqcTtczP)YM_J9PnjP}S8>R($z1ao9-&r&m4((MmDl|sZua0lzm3$r zp2z?5u-y0uT0)BsZ360mbOmt2}kf)1}yj~$0cyULjXa`zQHYQfShN+5fYjbuU@ zLsYtoqGO&Hgn??s(ibFFV}Dw17)$>v#%lw>>e0P)KR&XGKfWbRWas)wndxfy1ZaCD zhSbEhOW$J)?y%Il2_oWZ`*vQWAl!0Fk(9qeqxQ<0J6s;wl;cJL*-Md#$_aX^CCj3~Unfy;=4yaOD0k#C^rB4&C3VAf@;2 zFut7Q2g}X_V6?l8FNtS1E?4kr6F)w&1h;sL1+$qcj}Q3ld-_?R=a!3|Awvil$N~8Q zi}dRGcJJXmX{FcvElu|xvOurOjn;e%(i~=9=BP+V$TbP|pbpYPJZxk8hiBLATE)0O z9jnS7Lak4)jea_yWtztvpqO!vQjDQOT%VQboE7k1`kgcx=w;zPNQZJO1Eq8)Q%9tfZwL16psZIH~|rv{1rmX?#FbqERVl7&+q9=Q>-(@L~Qh?(Mq0CAI24_yo)XCwn&D& z+IfgMJA{Mjaw2LhEQyH7nT)#_u@_clbu(AFP%j?+B!@yBUDE5EGnY^=Y6y+IMQwpN}p zhGr~UG@*Wi4%-uoiyx zLmq??U=o!|zI&rRc8PR$tM=!)eFJNyao!;UQXZca7>&a_-ty|8?$+7X;=nGoV zjsH+VpLYRa+NH`aJTVtUHS<;)KUe9w{DZ(jZLRHB$;WQStW#e(T_MT#x_1B( zf36`~9o^i6HE9Ix)90VlfixzAEzB#OzM#JDuDXqKU)lFNB0(>v=`@`inRk2lKQXa| zAKNiaGFn~LIpzBz6Nlv_vH$%&dmbFtplsS0d1nwvuG?4E@qGU904@OXq#EU5%9eLE zNaXlLS~#K5zA$S;g1i)VS)1eF)D(7P_2`uTIB*xgo{Emi@Y22M(PK6zB(I!_Thae;j z&F-$ev<8T(H&y=o10{fIL!TJZ^Ur?#UtMTZ(4p|1XX}?*;5%!>xXN2yJ`B{JJ3)|I zxbE0yEu{EBTw%0kACeH3PSOUD_!yJv9QxDg6-S&#g93Ltr0-3^TsX;5xPZg@IhnEp z>X_U1m_>p+Z6mlkOB!3_31x9Rkr1m*8e=%_q06zR`>NS YcBhujp!Wy)WTekCO+AfDwO1ehAHWUtk^lez literal 0 HcmV?d00001 diff --git a/common/src/main/resources/mcpitanlibarch-common.mixins.json b/common/src/main/resources/mcpitanlib-common.mixins.json similarity index 100% rename from common/src/main/resources/mcpitanlibarch-common.mixins.json rename to common/src/main/resources/mcpitanlib-common.mixins.json diff --git a/common/src/main/resources/mcpitanlibarch.accesswidener b/common/src/main/resources/mcpitanlib.accesswidener similarity index 100% rename from common/src/main/resources/mcpitanlibarch.accesswidener rename to common/src/main/resources/mcpitanlib.accesswidener diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java index f95115ce0..8c3380f7d 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.fabric.mixin; -import ml.pkom.mcpitanlibarch.api.item.FixedRecipeRemainderItem; +import net.pitan76.mcpitanlib.api.item.FixedRecipeRemainderItem; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 0bbcd3158..dce89a976 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "id": "mcpitanlibarch", + "id": "mcpitanlib", "version": "${version}", "name": "MCPitanLib", "description": "Pitan's Minecraft Mod Library", @@ -14,22 +14,26 @@ }, "license": "MIT", "icon": "icon.png", - "custom": { - "modmenu": { - "badges": ["library"] - } - }, "environment": "*", "entrypoints": { "main": [ "net.pitan76.mcpitanlib.fabric.MCPitanLibFabric" ] }, + "provides": [ + "mcpitanlibarch", + "mcpitanlib-impl" + ], + "custom": { + "modmenu": { + "badges": ["library"] + } + }, "mixins": [ - "mcpitanlibarch.mixins.json", - "mcpitanlibarch-common.mixins.json" + "mcpitanlib.mixins.json", + "mcpitanlib-common.mixins.json" ], - "accessWidener" : "mcpitanlibarch.accesswidener", + "accessWidener" : "mcpitanlib.accesswidener", "depends": { "fabricloader": "*", "minecraft": ">=1.18" diff --git a/fabric/src/main/resources/mcpitanlibarch.mixins.json b/fabric/src/main/resources/mcpitanlib.mixins.json similarity index 100% rename from fabric/src/main/resources/mcpitanlibarch.mixins.json rename to fabric/src/main/resources/mcpitanlib.mixins.json diff --git a/forge/build.gradle b/forge/build.gradle index e7d77521f..cd9cbcb00 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -13,8 +13,8 @@ loom { convertAccessWideners = true extraAccessWideners.add loom.accessWidenerPath.get().asFile.name - mixinConfig "mcpitanlibarch-common.mixins.json" - mixinConfig "mcpitanlibarch.mixins.json" + mixinConfig "mcpitanlib-common.mixins.json" + mixinConfig "mcpitanlib.mixins.json" } } diff --git a/forge/src/main/resources/mcpitanlibarch.mixins.json b/forge/src/main/resources/mcpitanlib.mixins.json similarity index 100% rename from forge/src/main/resources/mcpitanlibarch.mixins.json rename to forge/src/main/resources/mcpitanlib.mixins.json diff --git a/info.properties b/info.properties index 9bad58f41..68982b6c2 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=1.9.6 +mod_version=2.0.0 maven_group=net.pitan76 \ No newline at end of file diff --git a/neoforge/src/main/resources/mcpitanlib.mixins.json b/neoforge/src/main/resources/mcpitanlib.mixins.json new file mode 100644 index 000000000..df01c3ab5 --- /dev/null +++ b/neoforge/src/main/resources/mcpitanlib.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.pitan76.mcpitanlib.forge.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/MCPitanLibarchQuilt.java b/quilt/src/main/java/ml/pkom/mcpitanlib/quilt/MCPitanLibQuilt.java similarity index 50% rename from quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/MCPitanLibarchQuilt.java rename to quilt/src/main/java/ml/pkom/mcpitanlib/quilt/MCPitanLibQuilt.java index 6d40e85c6..72eb72979 100644 --- a/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/MCPitanLibarchQuilt.java +++ b/quilt/src/main/java/ml/pkom/mcpitanlib/quilt/MCPitanLibQuilt.java @@ -1,13 +1,13 @@ -package ml.pkom.mcpitanlibarch.quilt; +package net.pitan76.mcpitanlib.quilt; -import ml.pkom.mcpitanlibarch.MCPitanLibarch; +import net.pitan76.mcpitanlib.MCPitanLib; import org.quiltmc.loader.api.ModContainer; import org.quiltmc.qsl.base.api.entrypoint.ModInitializer; -public class MCPitanLibarchQuilt implements ModInitializer { +public class MCPitanLibQuilt implements ModInitializer { @Override public void onInitialize(ModContainer mod) { - MCPitanLibarch.init(); + MCPitanLib.init(); } } \ No newline at end of file diff --git a/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/mixin/RecipeMixin.java b/quilt/src/main/java/ml/pkom/mcpitanlib/quilt/mixin/RecipeMixin.java similarity index 90% rename from quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/mixin/RecipeMixin.java rename to quilt/src/main/java/ml/pkom/mcpitanlib/quilt/mixin/RecipeMixin.java index dd7f6e646..8c3380f7d 100644 --- a/quilt/src/main/java/ml/pkom/mcpitanlibarch/quilt/mixin/RecipeMixin.java +++ b/quilt/src/main/java/ml/pkom/mcpitanlib/quilt/mixin/RecipeMixin.java @@ -1,6 +1,6 @@ -package ml.pkom.mcpitanlibarch.fabric.mixin; +package net.pitan76.mcpitanlib.fabric.mixin; -import ml.pkom.mcpitanlibarch.api.item.FixedRecipeRemainderItem; +import net.pitan76.mcpitanlib.api.item.FixedRecipeRemainderItem; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; diff --git a/quilt/src/main/resources/mcpitanlibarch.mixins.json b/quilt/src/main/resources/mcpitanlib.mixins.json similarity index 77% rename from quilt/src/main/resources/mcpitanlibarch.mixins.json rename to quilt/src/main/resources/mcpitanlib.mixins.json index 864f03833..0a36c5829 100644 --- a/quilt/src/main/resources/mcpitanlibarch.mixins.json +++ b/quilt/src/main/resources/mcpitanlib.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "ml.pkom.mcpitanlibarch.fabric.mixin", + "package": "net.pitan76.mcpitanlib.fabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ "RecipeMixin" diff --git a/quilt/src/main/resources/quilt.mod.json b/quilt/src/main/resources/quilt.mod.json index 52ae411c9..5eb8ecd2a 100644 --- a/quilt/src/main/resources/quilt.mod.json +++ b/quilt/src/main/resources/quilt.mod.json @@ -22,7 +22,7 @@ "environment": "*", "entrypoints": { "init": [ - "ml.pkom.mcpitanlibarch.quilt.MCPitanLibarchQuilt" + "net.pitan76.mcpitanlib.quilt.MCPitanLibarchQuilt" ] }, "custom": { @@ -47,7 +47,7 @@ } ] }, - "accessWidener": "mcpitanlibarch.accesswidener", + "accessWidener": "mcpitanlib.accesswidener", "mixins": [ "mcpitanlibarch.mixins.json", "mcpitanlibarch-common.mixins.json" From 142f3dc2e833e1319afbb764b4924b84c2ed0c78 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 15 Feb 2024 16:41:06 +0900 Subject: [PATCH 237/617] 1201 --- .../widget/CompatibleTexturedButtonWidget.java | 2 -- neoforge/src/main/resources/mcpitanlib.mixins.json | 13 ------------- 2 files changed, 15 deletions(-) delete mode 100644 neoforge/src/main/resources/mcpitanlib.mixins.json diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java index a00972230..bd42171ef 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java @@ -1,8 +1,6 @@ package net.pitan76.mcpitanlib.api.client.widget; import net.pitan76.mcpitanlib.api.util.TextUtil; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ButtonTextures; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.text.Text; diff --git a/neoforge/src/main/resources/mcpitanlib.mixins.json b/neoforge/src/main/resources/mcpitanlib.mixins.json deleted file mode 100644 index df01c3ab5..000000000 --- a/neoforge/src/main/resources/mcpitanlib.mixins.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "net.pitan76.mcpitanlib.forge.mixin", - "compatibilityLevel": "JAVA_8", - "mixins": [ - ], - "client": [ - ], - "injectors": { - "defaultRequire": 1 - } -} From 36fe1393e8fee5dae2f38bba05e375102b966ab8 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 15 Feb 2024 16:51:11 +0900 Subject: [PATCH 238/617] 1192 --- .../java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java | 0 .../net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java | 2 +- .../api/client/widget/RedrawableTexturedButtonWidget.java | 3 +-- 3 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java diff --git a/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java b/common/src/main/java/ml/pkom/mcpitanlibarch/api/registry/ArchRegistry.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 59073d75f..63578e275 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -3,7 +3,6 @@ import net.pitan76.mcpitanlib.api.client.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; -import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.Drawable; @@ -16,6 +15,7 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; public abstract class SimpleHandledScreen extends HandledScreen { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java index 9d3c3b1c1..6dba29e5b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java @@ -1,10 +1,9 @@ package net.pitan76.mcpitanlib.api.client.widget; -import ml.pkom.mcpitanlibarch.api.util.client.RenderUtil; -import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.client.RenderUtil; public class RedrawableTexturedButtonWidget extends CompatibleTexturedButtonWidget { public Identifier texture; From a9a0901f68348d503a90fef36f6ba1f84cf90d05 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 15 Feb 2024 16:56:17 +0900 Subject: [PATCH 239/617] 1182 --- .../net/pitan76/mcpitanlib/api/command/CommandRegistry.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java index 06c6c286e..2eee11642 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java @@ -5,11 +5,8 @@ import dev.architectury.event.events.common.CommandRegistrationEvent; import net.pitan76.mcpitanlib.api.command.argument.*; import net.pitan76.mcpitanlib.api.event.*; -import net.minecraft.command.CommandRegistryAccess; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; -import net.pitan76.mcpitanlib.api.command.argument.*; -import net.pitan76.mcpitanlib.api.event.*; import java.util.Map; From 7c1a1c2387e9a10d54e6459a30682bf9e0358a6a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:13:15 +0900 Subject: [PATCH 240/617] rename mcpitanlib fix modinfo --- .../java/net/pitan76/mcpitanlib/MCPitanLib.java | 2 +- .../mcpitanlib/api/client/SimpleHandledScreen.java | 3 +-- .../widget/CompatibleTexturedButtonWidget.java | 2 +- .../widget/RedrawableTexturedButtonWidget.java | 2 +- .../mcpitanlib/api/util/client/ScreenUtil.java | 4 ++-- .../net/pitan76/mcpitanlib/test/ExampleScreen.java | 2 +- fabric/src/main/resources/fabric.mod.json | 4 ++-- forge/src/main/resources/META-INF/mods.toml | 8 ++++---- info.properties | 2 +- .../pitan76}/mcpitanlib/quilt/MCPitanLibQuilt.java | 0 .../mcpitanlib/quilt/mixin/RecipeMixin.java | 0 quilt/src/main/resources/quilt.mod.json | 14 +++++++------- 12 files changed, 21 insertions(+), 22 deletions(-) rename common/src/main/java/net/pitan76/mcpitanlib/api/client/{ => gui}/widget/CompatibleTexturedButtonWidget.java (96%) rename common/src/main/java/net/pitan76/mcpitanlib/api/client/{ => gui}/widget/RedrawableTexturedButtonWidget.java (97%) rename quilt/src/main/java/{ml/pkom => net/pitan76}/mcpitanlib/quilt/MCPitanLibQuilt.java (100%) rename quilt/src/main/java/{ml/pkom => net/pitan76}/mcpitanlib/quilt/mixin/RecipeMixin.java (100%) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java index 7b270d5ba..40aad375d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java @@ -13,7 +13,7 @@ import java.util.List; public class MCPitanLib { - public static final String MOD_ID = "mcpitanlibarch"; + public static final String MOD_ID = "mcpitanlib"; private static final File configFile = new File(PlatformUtil.getConfigFolder().toFile(), "mcpitanlib/blacklist.json"); private static final File oldConfigFile = new File(PlatformUtil.getConfigFolder().toFile(), "mcpitanlibarch/blacklist.json"); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 63578e275..fe8aadbe4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.api.client; -import net.pitan76.mcpitanlib.api.client.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.minecraft.client.MinecraftClient; @@ -15,7 +15,6 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; public abstract class SimpleHandledScreen extends HandledScreen { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java similarity index 96% rename from common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java index bd42171ef..d11188091 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/CompatibleTexturedButtonWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java @@ -1,4 +1,4 @@ -package net.pitan76.mcpitanlib.api.client.widget; +package net.pitan76.mcpitanlib.api.client.gui.widget; import net.pitan76.mcpitanlib.api.util.TextUtil; import net.minecraft.client.gui.widget.ButtonWidget; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/RedrawableTexturedButtonWidget.java similarity index 97% rename from common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/RedrawableTexturedButtonWidget.java index 6dba29e5b..7c3c00850 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/widget/RedrawableTexturedButtonWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/RedrawableTexturedButtonWidget.java @@ -1,4 +1,4 @@ -package net.pitan76.mcpitanlib.api.client.widget; +package net.pitan76.mcpitanlib.api.client.gui.widget; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java index f4ed7c906..fecfc086c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.util.client; -import net.pitan76.mcpitanlib.api.client.widget.CompatibleTexturedButtonWidget; -import net.pitan76.mcpitanlib.api.client.widget.RedrawableTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.gui.widget.RedrawableTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.fabricmc.api.EnvType; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java index c4e562c31..b9164f732 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.test; import net.pitan76.mcpitanlib.api.client.SimpleHandledScreen; -import net.pitan76.mcpitanlib.api.client.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawBackgroundArgs; import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawMouseoverTooltipArgs; import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index dce89a976..e7c85bbba 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -9,8 +9,8 @@ ], "contact": { "website": "https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch", - "repo": "https://github.com/Pitan76/mcpitanlibarch", - "issues": "https://github.com/Pitan76/mcpitanlibarch/issue" + "repo": "https://github.com/Pitan76/MCPitanLib", + "issues": "https://github.com/Pitan76/MCPitanLib/issue" }, "license": "MIT", "icon": "icon.png", diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 284bff096..0444bba6b 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -11,11 +11,11 @@ loaderVersion = "[40,)" #mandatory This is typically bumped every Minecraft vers # Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. license = "MIT" # A URL to refer people to when problems occur with this mod -issueTrackerURL = "https://github.com/Pitan76/mcpitanlibarch/issue" +issueTrackerURL = "https://github.com/Pitan76/MCPitanLib/issue" # A list of mods - how many allowed here is determined by the individual mod loader [[mods]] #mandatory # The modid of the mod -modId = "mcpitanlibarch" #mandatory +modId = "mcpitanlib" #mandatory # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it # ${version} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata # see the associated build.gradle script for how to populate this completely automatically during a build @@ -37,7 +37,7 @@ description = ''' Pitan's Minecraft Mod Library ''' # A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. -[[dependencies.mcpitanlibarch]] #optional +[[dependencies.mcpitanlib]] #optional # the modid of the dependency modId = "forge" #mandatory # Does this dependency have to exist - if not, ordering below must be specified @@ -49,7 +49,7 @@ ordering = "NONE" # Side this dependency is applied on - BOTH, CLIENT or SERVER side = "BOTH" # Here's another dependency -[[dependencies.mcpitanlibarch]] +[[dependencies.mcpitanlib]] modId = "minecraft" mandatory = true # This version range declares a minimum of the current minecraft version up to but not including the next major version diff --git a/info.properties b/info.properties index 68982b6c2..cd434f53c 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ -archives_base_name=mcpitanlib +archives_base_name=MCPitanLib mod_version=2.0.0 maven_group=net.pitan76 \ No newline at end of file diff --git a/quilt/src/main/java/ml/pkom/mcpitanlib/quilt/MCPitanLibQuilt.java b/quilt/src/main/java/net/pitan76/mcpitanlib/quilt/MCPitanLibQuilt.java similarity index 100% rename from quilt/src/main/java/ml/pkom/mcpitanlib/quilt/MCPitanLibQuilt.java rename to quilt/src/main/java/net/pitan76/mcpitanlib/quilt/MCPitanLibQuilt.java diff --git a/quilt/src/main/java/ml/pkom/mcpitanlib/quilt/mixin/RecipeMixin.java b/quilt/src/main/java/net/pitan76/mcpitanlib/quilt/mixin/RecipeMixin.java similarity index 100% rename from quilt/src/main/java/ml/pkom/mcpitanlib/quilt/mixin/RecipeMixin.java rename to quilt/src/main/java/net/pitan76/mcpitanlib/quilt/mixin/RecipeMixin.java diff --git a/quilt/src/main/resources/quilt.mod.json b/quilt/src/main/resources/quilt.mod.json index 5eb8ecd2a..f60a1636d 100644 --- a/quilt/src/main/resources/quilt.mod.json +++ b/quilt/src/main/resources/quilt.mod.json @@ -1,8 +1,8 @@ { "schemaVersion": 1, "quilt_loader" : { - "group": "ml.pkom", - "id": "mcpitanlibarch", + "group": "net.pitan76", + "id": "mcpitanlib", "version": "${version}", "metadata" : { "name": "MCPitanLib", @@ -12,8 +12,8 @@ ], "contact": { "homepage": "https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch", - "sources": "https://github.com/Pitan76/mcpitanlibarch", - "issues": "https://github.com/Pitan76/mcpitanlibarch/issue" + "sources": "https://github.com/Pitan76/MCPitanLib", + "issues": "https://github.com/Pitan76/MCPitanLib/issue" }, "license": "MIT", "icon": "icon.png" @@ -22,7 +22,7 @@ "environment": "*", "entrypoints": { "init": [ - "net.pitan76.mcpitanlib.quilt.MCPitanLibarchQuilt" + "net.pitan76.mcpitanlib.quilt.MCPitanLibQuilt" ] }, "custom": { @@ -49,7 +49,7 @@ }, "accessWidener": "mcpitanlib.accesswidener", "mixins": [ - "mcpitanlibarch.mixins.json", - "mcpitanlibarch-common.mixins.json" + "mcpitanlib.mixins.json", + "mcpitanlib-common.mixins.json" ] } From 744eba7f49b27fb0cb8bf7bdda3d39c6c60d1556 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:16:05 +0900 Subject: [PATCH 241/617] 1192 --- .../net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index fe8aadbe4..8cfca2638 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -15,6 +15,7 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; public abstract class SimpleHandledScreen extends HandledScreen { From 0f1756a8dc0335e5199bb2d80c7cde14600d70ee Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:34:15 +0900 Subject: [PATCH 242/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index cd434f53c..68982b6c2 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ -archives_base_name=MCPitanLib +archives_base_name=mcpitanlib mod_version=2.0.0 maven_group=net.pitan76 \ No newline at end of file From c0ae42db7ffa77c3f2b7f58b6807a22e024eb8e9 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 15 Feb 2024 19:58:13 +0900 Subject: [PATCH 243/617] import optimize --- .../net/pitan76/mcpitanlib/MCPitanLib.java | 2 +- .../mcpitanlib/api/block/ExtendBlock.java | 10 ++++----- .../api/block/ExtendBlockEntityProvider.java | 4 ++-- .../api/client/SimpleHandledScreen.java | 6 ++--- .../CompatibleTexturedButtonWidget.java | 2 +- .../client/registry/ArchRegistryClient.java | 2 -- .../client/registry/KeybindingRegistry.java | 4 ++-- .../api/command/CommandRegistry.java | 4 ++-- .../api/command/argument/EntitiesCommand.java | 4 ++-- .../api/command/argument/EntityCommand.java | 4 ++-- .../api/command/argument/ItemCommand.java | 4 ++-- .../api/command/argument/PlayerCommand.java | 4 ++-- .../api/command/argument/PlayersCommand.java | 4 ++-- .../mcpitanlib/api/entity/ExtendEntity.java | 2 +- .../pitan76/mcpitanlib/api/entity/Player.java | 6 ++--- .../api/event/EntitiesCommandEvent.java | 2 +- .../api/event/EntityCommandEvent.java | 2 +- .../api/event/ItemCommandEvent.java | 2 +- .../api/event/PlayerCommandEvent.java | 2 +- .../api/event/PlayersCommandEvent.java | 2 +- .../api/event/ServerCommandEvent.java | 2 +- .../api/event/block/BlockBreakEvent.java | 4 ++-- .../api/event/block/BlockPlacedEvent.java | 2 +- .../event/block/BlockScheduledTickEvent.java | 2 +- .../api/event/block/BlockUseEvent.java | 4 ++-- .../api/event/block/OutlineShapeEvent.java | 2 +- .../event/block/ScreenHandlerCreateEvent.java | 4 ++-- .../api/event/block/StateReplacedEvent.java | 2 +- .../api/event/block/TileCreateEvent.java | 2 +- .../event/item/ItemAppendTooltipEvent.java | 2 +- .../api/event/item/ItemFinishUsingEvent.java | 2 +- .../api/event/item/ItemUseEvent.java | 4 ++-- .../api/event/item/ItemUseOnBlockEvent.java | 4 ++-- .../api/event/item/ItemUseOnEntityEvent.java | 4 ++-- .../event/v0/AttackEntityEventRegistry.java | 2 +- .../api/event/v0/EventRegistry.java | 4 ++-- .../event/v0/event/ItemStackActionEvent.java | 2 +- .../event/v0/event/RecipeManagerEvent.java | 2 +- .../api/gui/SimpleScreenHandler.java | 2 +- .../api/item/CreativeTabBuilder.java | 1 - .../api/item/CreativeTabManager.java | 2 +- .../mcpitanlib/api/item/ExtendItem.java | 4 ++-- .../api/item/ExtendItemProvider.java | 1 - .../api/item/tool/CompatibleAxeItem.java | 4 ++-- .../api/item/tool/CompatibleHoeItem.java | 4 ++-- .../api/item/tool/CompatiblePickaxeItem.java | 4 ++-- .../api/item/tool/CompatibleShovelItem.java | 4 ++-- .../api/item/tool/CompatibleSwordItem.java | 4 ++-- .../api/recipe/CompatibleRecipeEntry.java | 7 ++++-- .../api/registry/CompatRegistry.java | 22 +++++++++---------- .../pitan76/mcpitanlib/api/tag/TagKey.java | 4 ++-- .../mcpitanlib/api/text/TextComponent.java | 2 +- .../api/tile/BlockEntityTypeBuilder.java | 2 +- .../api/tile/ExtendBlockEntity.java | 6 ++--- .../api/tile/ExtendBlockEntityTicker.java | 2 +- .../mcpitanlib/api/util/BlockUtil.java | 6 ++--- .../api/util/CompatibleRecipeEntryUtil.java | 3 +-- .../mcpitanlib/api/util/DamageSourceUtil.java | 2 +- .../mcpitanlib/api/util/EntityUtil.java | 2 +- .../api/util/EquipMaterialUtil.java | 4 ++-- .../mcpitanlib/api/util/ItemStackUtil.java | 2 -- .../pitan76/mcpitanlib/api/util/ItemUtil.java | 4 ++-- .../pitan76/mcpitanlib/api/util/MathUtil.java | 1 + .../mcpitanlib/api/util/PlayerUtil.java | 2 +- .../mcpitanlib/api/util/RecipeUtil.java | 2 +- .../pitan76/mcpitanlib/api/util/TextUtil.java | 3 ++- .../mcpitanlib/api/util/TimerUtil.java | 4 ++-- .../mcpitanlib/api/util/WorldUtil.java | 2 +- .../api/util/client/MatrixStackUtil.java | 4 ++-- .../api/util/client/ScreenUtil.java | 9 ++++---- .../api/util/event/BlockEventGenerator.java | 2 +- .../api/util/event/ItemEventGenerator.java | 2 +- .../mcpitanlib/api/util/v1/BlockUtilV1.java | 4 ++-- .../mcpitanlib/api/util/v1/ItemUtilV1.java | 4 ++-- .../mcpitanlib/api/util/v2/BlockUtilV2.java | 2 +- .../mcpitanlib/api/util/v2/ItemUtilV2.java | 2 +- .../mcpitanlib/api/world/ExtendWorld.java | 2 +- .../mcpitanlib/core/player/ItemCooldown.java | 2 +- .../pitan76/mcpitanlib/debug/DebugTool.java | 3 ++- .../pitan76/mcpitanlib/mixin/ItemMixin.java | 6 ++--- .../mcpitanlib/mixin/ItemStackMixin.java | 2 +- .../mixin/MinecraftServerTimer.java | 2 +- .../mcpitanlib/mixin/RecipeManagerMixin.java | 4 ++-- .../mcpitanlib/mixin/ServerWorldTimer.java | 2 +- .../mcpitanlib/test/ExampleCommand.java | 2 +- .../mcpitanlib/test/ExampleGuiBlock.java | 6 ++--- .../mcpitanlib/test/ExampleGuiItem.java | 8 +++---- .../pitan76/mcpitanlib/test/ExampleMod.java | 8 +++---- .../mcpitanlib/test/ExampleScreen.java | 8 +++---- .../mcpitanlib/test/ExampleScreenHandler.java | 4 ++-- .../mcpitanlib/fabric/MCPitanLibFabric.java | 2 +- .../mcpitanlib/fabric/mixin/RecipeMixin.java | 2 +- 92 files changed, 161 insertions(+), 165 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java index 40aad375d..9ee0a0c38 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib; +import net.minecraft.util.Identifier; import net.pitan76.easyapi.config.Config; import net.pitan76.easyapi.config.JsonConfig; import net.pitan76.mcpitanlib.api.registry.CompatRegistry; import net.pitan76.mcpitanlib.api.util.PlatformUtil; import net.pitan76.mcpitanlib.debug.DebugTool; -import net.minecraft.util.Identifier; import java.io.File; import java.util.ArrayList; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index d77a8970d..c6a90c9ef 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -1,7 +1,5 @@ package net.pitan76.mcpitanlib.api.block; -import net.pitan76.mcpitanlib.api.event.block.*; -import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; @@ -20,13 +18,13 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.World; - -import java.util.Random; - -import net.minecraft.world.WorldView; +import net.pitan76.mcpitanlib.api.event.block.*; +import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; import net.pitan76.mcpitanlib.api.util.TextUtil; import org.jetbrains.annotations.Nullable; +import java.util.Random; + public class ExtendBlock extends Block { public ExtendBlock(Settings settings) { super(settings); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java index cb5b24676..47b1a124e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java @@ -1,7 +1,5 @@ package net.pitan76.mcpitanlib.api.block; -import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; -import net.pitan76.mcpitanlib.api.tile.ExtendBlockEntityTicker; import net.minecraft.block.BlockEntityProvider; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; @@ -9,6 +7,8 @@ import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.tile.ExtendBlockEntityTicker; import org.jetbrains.annotations.Nullable; public interface ExtendBlockEntityProvider extends BlockEntityProvider { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 8cfca2638..6fd41125b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -1,8 +1,5 @@ package net.pitan76.mcpitanlib.api.client; -import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; -import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; -import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.Drawable; @@ -15,6 +12,9 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; public abstract class SimpleHandledScreen extends HandledScreen { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java index d11188091..e5b283b33 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.api.client.gui.widget; -import net.pitan76.mcpitanlib.api.util.TextUtil; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.TextUtil; public class CompatibleTexturedButtonWidget extends TexturedButtonWidget { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java index a4fd0409d..a234df103 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java @@ -21,11 +21,9 @@ import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.entity.model.EntityModelLayer; import net.minecraft.client.render.entity.model.EntityModelLoader; -import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.texture.Sprite; import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/KeybindingRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/KeybindingRegistry.java index f1ee47252..771f39bc4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/KeybindingRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/KeybindingRegistry.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.client.registry; import dev.architectury.registry.client.keymappings.KeyMappingRegistry; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.event.v0.ClientTickEventRegistry; import net.pitan76.mcpitanlib.api.network.ClientNetworking; import net.pitan76.mcpitanlib.api.network.PacketByteUtil; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.util.Identifier; public class KeybindingRegistry { public static void register(KeyBinding keyBinding) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java index 2eee11642..849654105 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java @@ -3,10 +3,10 @@ import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import dev.architectury.event.events.common.CommandRegistrationEvent; -import net.pitan76.mcpitanlib.api.command.argument.*; -import net.pitan76.mcpitanlib.api.event.*; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; +import net.pitan76.mcpitanlib.api.command.argument.*; +import net.pitan76.mcpitanlib.api.event.*; import java.util.Map; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntitiesCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntitiesCommand.java index 36c46a827..4157c76d3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntitiesCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntitiesCommand.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.command.argument; -import net.pitan76.mcpitanlib.api.event.EntitiesCommandEvent; -import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.event.EntitiesCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; public abstract class EntitiesCommand extends RequiredCommand { @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntityCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntityCommand.java index caf51cac1..cf0c76ec6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntityCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/EntityCommand.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.command.argument; -import net.pitan76.mcpitanlib.api.event.EntityCommandEvent; -import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.event.EntityCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; public abstract class EntityCommand extends RequiredCommand { @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java index 828172118..0a86e9727 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.command.argument; -import net.pitan76.mcpitanlib.api.event.ItemCommandEvent; -import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.ItemStackArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.event.ItemCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; public abstract class ItemCommand extends RequiredCommand { @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayerCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayerCommand.java index 90995ac8e..3a674b908 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayerCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayerCommand.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.command.argument; -import net.pitan76.mcpitanlib.api.event.PlayerCommandEvent; -import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.event.PlayerCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; public abstract class PlayerCommand extends RequiredCommand { @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayersCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayersCommand.java index d49a91420..195d81d3b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayersCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/PlayersCommand.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.command.argument; -import net.pitan76.mcpitanlib.api.event.PlayersCommandEvent; -import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.event.PlayersCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; public abstract class PlayersCommand extends RequiredCommand { @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntity.java index 8f8bbdd6c..2046f08c8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntity.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.entity; -import net.pitan76.mcpitanlib.api.nbt.NbtTag; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.Packet; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.nbt.NbtTag; public class ExtendEntity extends Entity { public ExtendEntity(EntityType type, World world) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 76e5d1910..7f8e101be 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -1,9 +1,6 @@ package net.pitan76.mcpitanlib.api.entity; import dev.architectury.registry.menu.ExtendedMenuProvider; -import net.pitan76.mcpitanlib.api.gui.ExtendedNamedScreenHandlerFactory; -import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; -import net.pitan76.mcpitanlib.core.player.ItemCooldown; import net.minecraft.block.BlockState; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.ItemCooldownManager; @@ -26,6 +23,9 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.gui.ExtendedNamedScreenHandlerFactory; +import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; +import net.pitan76.mcpitanlib.core.player.ItemCooldown; import java.util.OptionalInt; import java.util.UUID; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntitiesCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntitiesCommandEvent.java index a54b1d57a..38110c090 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntitiesCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntitiesCommandEvent.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.pitan76.mcpitanlib.api.command.argument.EntitiesCommand; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.command.argument.EntitiesCommand; public class EntitiesCommandEvent extends RequiredCommandEvent { public Entity getValue() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntityCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntityCommandEvent.java index 150e0fd4e..ea90b106e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntityCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/EntityCommandEvent.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.pitan76.mcpitanlib.api.command.argument.EntityCommand; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.command.argument.EntityCommand; public class EntityCommandEvent extends RequiredCommandEvent { public Entity getValue() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ItemCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ItemCommandEvent.java index 1490faf79..1888aa422 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ItemCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ItemCommandEvent.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.event; -import net.pitan76.mcpitanlib.api.command.argument.ItemCommand; import net.minecraft.command.argument.ItemStackArgumentType; import net.minecraft.item.Item; +import net.pitan76.mcpitanlib.api.command.argument.ItemCommand; public class ItemCommandEvent extends RequiredCommandEvent { public Item getValue() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayerCommandEvent.java index a755544ef..7fad3ba41 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayerCommandEvent.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.pitan76.mcpitanlib.api.command.argument.PlayerCommand; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.command.argument.PlayerCommand; public class PlayerCommandEvent extends RequiredCommandEvent { public Entity getValue() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayersCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayersCommandEvent.java index 97c918c01..aa845fd17 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayersCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/PlayersCommandEvent.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.pitan76.mcpitanlib.api.command.argument.PlayersCommand; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.Entity; +import net.pitan76.mcpitanlib.api.command.argument.PlayersCommand; public class PlayersCommandEvent extends RequiredCommandEvent { public Entity getValue() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java index 6c0256f5b..c2192c9d6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java @@ -4,12 +4,12 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.StringRange; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.Text; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; public class ServerCommandEvent extends CommandEvent { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java index 2291afa6f..25e353458 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.event.block; -import net.pitan76.mcpitanlib.api.entity.Player; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class BlockBreakEvent extends BaseEvent { public World world; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java index 8e39771e9..940958701 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.event.block; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class BlockPlacedEvent extends BaseEvent { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java index 82594c6e4..ef9adc67b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.event.block; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import java.util.Random; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java index 31a5e3e3e..6f20ad6a1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java @@ -1,7 +1,5 @@ package net.pitan76.mcpitanlib.api.event.block; -import net.pitan76.mcpitanlib.api.entity.Player; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; @@ -11,6 +9,8 @@ import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class BlockUseEvent extends BaseEvent { public BlockState state; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java index db43da8fc..8489bdacd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.api.event.block; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class OutlineShapeEvent extends BaseEvent { public BlockState state; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java index aeb7c404f..603fb0d27 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java @@ -1,12 +1,12 @@ package net.pitan76.mcpitanlib.api.event.block; -import net.pitan76.mcpitanlib.api.entity.Player; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class ScreenHandlerCreateEvent extends BaseEvent { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java index bdabae527..4cbe8096d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java @@ -1,12 +1,12 @@ package net.pitan76.mcpitanlib.api.event.block; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.inventory.Inventory; import net.minecraft.util.ItemScatterer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class StateReplacedEvent extends BaseEvent { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/TileCreateEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/TileCreateEvent.java index 2378118c5..ff0ad3ed9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/TileCreateEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/TileCreateEvent.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.event.block; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class TileCreateEvent extends BaseEvent { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java index 215179dcf..cd06bce81 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.api.event.item; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import org.jetbrains.annotations.Nullable; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemFinishUsingEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemFinishUsingEvent.java index 9479c4b6d..27f74b53b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemFinishUsingEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemFinishUsingEvent.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.event.item; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class ItemFinishUsingEvent extends BaseEvent { public ItemStack stack; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java index d8049cb1b..7405fede5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java @@ -1,12 +1,12 @@ package net.pitan76.mcpitanlib.api.event.item; -import net.pitan76.mcpitanlib.api.entity.Player; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class ItemUseEvent extends BaseEvent { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java index 70f1028cc..26ba42a6b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java @@ -1,7 +1,5 @@ package net.pitan76.mcpitanlib.api.event.item; -import net.pitan76.mcpitanlib.api.entity.Player; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; @@ -10,6 +8,8 @@ import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; import javax.annotation.Nullable; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java index bea21498a..c3dd5aa68 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java @@ -1,12 +1,12 @@ package net.pitan76.mcpitanlib.api.event.item; -import net.pitan76.mcpitanlib.api.entity.Player; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; public class ItemUseOnEntityEvent extends BaseEvent { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java index 5165e954e..9611269b6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java @@ -2,12 +2,12 @@ import dev.architectury.event.EventResult; import dev.architectury.event.events.common.PlayerEvent; -import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.Hand; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; import org.jetbrains.annotations.Nullable; public class AttackEntityEventRegistry { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/EventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/EventRegistry.java index 6bdf7f1f3..17b2fa79d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/EventRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/EventRegistry.java @@ -1,13 +1,13 @@ package net.pitan76.mcpitanlib.api.event.v0; import dev.architectury.event.events.common.LifecycleEvent; -import net.pitan76.mcpitanlib.api.event.v0.event.ItemStackActionEvent; -import net.pitan76.mcpitanlib.api.event.v0.event.ServerConnectionEvent; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.v0.event.ItemStackActionEvent; +import net.pitan76.mcpitanlib.api.event.v0.event.ServerConnectionEvent; public class EventRegistry { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ItemStackActionEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ItemStackActionEvent.java index c5fd45409..f8872ead7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ItemStackActionEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ItemStackActionEvent.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.event.v0.event; -import net.pitan76.mcpitanlib.api.event.v0.EventRegistry; import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.event.v0.EventRegistry; import java.util.ArrayList; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java index 012868689..10d7a5c62 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java @@ -2,12 +2,12 @@ import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; -import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeType; import net.minecraft.resource.ResourceManager; import net.minecraft.util.Identifier; import net.minecraft.util.profiler.Profiler; +import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; import java.util.Map; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java index a946c8d7d..4e913186c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.gui; -import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.Inventory; @@ -9,6 +8,7 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; +import net.pitan76.mcpitanlib.api.entity.Player; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java index 0c9748f87..84e43149d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java @@ -1,7 +1,6 @@ package net.pitan76.mcpitanlib.api.item; import dev.architectury.registry.CreativeTabRegistry; -import net.pitan76.mcpitanlib.api.util.TextUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabManager.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabManager.java index 6347c9571..18086706d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabManager.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabManager.java @@ -3,8 +3,8 @@ import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; -import net.pitan76.mcpitanlib.api.util.ItemUtil; import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.util.ItemUtil; import java.util.ArrayList; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index faaf70183..ba1f5416d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -1,7 +1,5 @@ package net.pitan76.mcpitanlib.api.item; -import net.pitan76.mcpitanlib.core.Dummy; -import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; @@ -14,6 +12,8 @@ import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.*; +import net.pitan76.mcpitanlib.core.Dummy; +import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import org.jetbrains.annotations.Nullable; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java index af1e44c7a..6b9512e4d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.item; -import net.pitan76.mcpitanlib.api.event.item.*; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.TypedActionResult; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java index e0a939eb1..cdec86aa8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.item.tool; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; import net.minecraft.item.AxeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; public class CompatibleAxeItem extends AxeItem implements ExtendItemProvider { public CompatibleAxeItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java index 24ca5181e..f384d4790 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.item.tool; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; import net.minecraft.item.HoeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; public class CompatibleHoeItem extends HoeItem implements ExtendItemProvider { public CompatibleHoeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java index ac12f12f8..ef69ed51b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.item.tool; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.PickaxeItem; import net.minecraft.item.ToolMaterial; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; public class CompatiblePickaxeItem extends PickaxeItem implements ExtendItemProvider { public CompatiblePickaxeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java index 6e9b4221c..7efc94dac 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.item.tool; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.ShovelItem; import net.minecraft.item.ToolMaterial; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; public class CompatibleShovelItem extends ShovelItem implements ExtendItemProvider { public CompatibleShovelItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java index 4758cb995..e18a53618 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.item.tool; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; public class CompatibleSwordItem extends SwordItem implements ExtendItemProvider { public CompatibleSwordItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java index 9ff43baaf..d6297cb7a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java @@ -1,8 +1,11 @@ package net.pitan76.mcpitanlib.api.recipe; -import net.pitan76.mcpitanlib.api.util.RecipeUtil; -import net.minecraft.recipe.*; +import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeSerializer; +import net.minecraft.recipe.RecipeType; +import net.minecraft.recipe.ShapelessRecipe; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.RecipeUtil; import org.jetbrains.annotations.Nullable; public class CompatibleRecipeEntry { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index d0a316188..2884943b5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -1,17 +1,6 @@ package net.pitan76.mcpitanlib.api.registry; import dev.architectury.registry.registries.RegistrySupplier; -import net.pitan76.mcpitanlib.MCPitanLib; -import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; -import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; -import net.pitan76.mcpitanlib.api.gui.ExtendedScreenHandlerTypeBuilder; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.CreativeTabManager; -import net.pitan76.mcpitanlib.api.util.BlockUtil; -import net.pitan76.mcpitanlib.api.util.ItemUtil; -import net.pitan76.mcpitanlib.core.registry.FuelRegistry; -import net.pitan76.mcpitanlib.core.registry.MCPLRegistry; -import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.EntityType; @@ -23,7 +12,18 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.MCPitanLib; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; +import net.pitan76.mcpitanlib.api.gui.ExtendedScreenHandlerTypeBuilder; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.CreativeTabManager; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.api.util.BlockUtil; +import net.pitan76.mcpitanlib.api.util.ItemUtil; +import net.pitan76.mcpitanlib.core.registry.FuelRegistry; +import net.pitan76.mcpitanlib.core.registry.MCPLRegistry; +import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; import java.util.function.Supplier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java index 487c7509a..e4a437863 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java @@ -1,7 +1,5 @@ package net.pitan76.mcpitanlib.api.tag; -import net.pitan76.mcpitanlib.api.util.EntityTypeUtil; -import net.pitan76.mcpitanlib.api.util.FluidUtil; import net.minecraft.block.Block; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; @@ -10,6 +8,8 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; import net.pitan76.mcpitanlib.api.util.BlockUtil; +import net.pitan76.mcpitanlib.api.util.EntityTypeUtil; +import net.pitan76.mcpitanlib.api.util.FluidUtil; import net.pitan76.mcpitanlib.api.util.ItemUtil; public class TagKey { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java index ecb647bdf..c1a834c17 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.text; -import net.pitan76.mcpitanlib.api.util.TextUtil; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.util.TextUtil; import javax.annotation.Nullable; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java index a098ed5a3..9f305ac51 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java @@ -1,12 +1,12 @@ package net.pitan76.mcpitanlib.api.tile; import com.mojang.datafixers.types.Type; -import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.BlockPos; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; import java.util.ArrayList; import java.util.Collections; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java index 1db7b3532..9f1ca8651 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java @@ -1,8 +1,5 @@ package net.pitan76.mcpitanlib.api.tile; -import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; -import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; -import net.pitan76.mcpitanlib.api.world.ExtendWorld; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; @@ -12,6 +9,9 @@ import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; +import net.pitan76.mcpitanlib.api.world.ExtendWorld; import org.jetbrains.annotations.Nullable; public class ExtendBlockEntity extends BlockEntity { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java index 745e6426f..d5c0edda9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.tile; -import net.pitan76.mcpitanlib.api.event.tile.TileTickEvent; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityTicker; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.tile.TileTickEvent; public interface ExtendBlockEntityTicker extends BlockEntityTicker { @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java index 26444117f..f464ea938 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; -import net.pitan76.mcpitanlib.api.tag.MineableToolTags; -import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.tag.MineableToolTags; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.util.v1.BlockUtilV1; import net.pitan76.mcpitanlib.api.util.v2.BlockUtilV2; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java index 89dd92c41..18fda59b1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java @@ -1,11 +1,10 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; -import net.pitan76.mcpitanlib.api.util.RecipeUtil; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; public class CompatibleRecipeEntryUtil { public static CompatibleRecipeEntry createShapelessRecipe(Identifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java index 8187c3fc2..2d6e3b0d7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; +import net.pitan76.mcpitanlib.api.entity.Player; public class DamageSourceUtil { public static DamageSource thrownProjectile(Entity projectile, Entity attacker, Entity source) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index 9e10354f9..1be594da5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; public class EntityUtil { public static World getWorld(Entity entity) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java index 0b1487723..9afdc655a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; -import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; import net.minecraft.item.ToolMaterial; import net.minecraft.recipe.Ingredient; import net.minecraft.sound.SoundEvent; +import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; +import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; public class EquipMaterialUtil { public static ToolMaterial createToolMaterial(int durability, float miningSpeedMultiplier, float attackDamage, int miningLevel, int enchantability, Ingredient repairIngredient) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 96f8a019b..6644d937a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -2,8 +2,6 @@ import net.minecraft.item.ItemStack; -import java.util.Objects; - public class ItemStackUtil { public static ItemStack copy(ItemStack stack) { return stack.copy(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java index ca7be1810..8fb88bdf0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java @@ -1,12 +1,12 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.util.v1.ItemUtilV1; import net.pitan76.mcpitanlib.api.util.v2.ItemUtilV2; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java index 3fea12324..e6af344bc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java @@ -2,6 +2,7 @@ import net.minecraft.util.math.Quaternion; import net.minecraft.util.math.Vec3f; + import java.util.Random; public class MathUtil { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerUtil.java index 017cc0f68..90f67e846 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerUtil.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; import java.util.ArrayList; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java index 4096285f4..0f6ded1ce 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java @@ -4,8 +4,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeType; import net.minecraft.recipe.ShapelessRecipe; -import net.minecraft.recipe.*; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java index 49cbbcd4f..af1e1a988 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.util; -import net.minecraft.text.*; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; public class TextUtil { public static MutableText literal(String string) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java index ffb803902..7018af034 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.timer.MinecraftServerTimerAccess; -import net.pitan76.mcpitanlib.api.timer.ServerWorldTimerAccess; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ServerWorld; +import net.pitan76.mcpitanlib.api.timer.MinecraftServerTimerAccess; +import net.pitan76.mcpitanlib.api.timer.ServerWorldTimerAccess; import java.util.function.Supplier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 9bb95e0c8..005fa5d1f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.util; -import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.ExperienceOrbEntity; @@ -20,6 +19,7 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; import org.jetbrains.annotations.Nullable; import java.util.Objects; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java index dc7f4469a..e9a7aecc2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.util.client; -import net.pitan76.mcpitanlib.api.util.MathUtil; import net.minecraft.client.util.math.MatrixStack; +import net.pitan76.mcpitanlib.api.util.MathUtil; -import static net.pitan76.mcpitanlib.api.util.MathUtil.*; +import static net.pitan76.mcpitanlib.api.util.MathUtil.getRotationDegrees; public class MatrixStackUtil { public static void multiply(MatrixStack matrixStack, MathUtil.RotationAxisType type, float deg) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java index fecfc086c..473f798c1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java @@ -1,9 +1,5 @@ package net.pitan76.mcpitanlib.api.util.client; -import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; -import net.pitan76.mcpitanlib.api.client.gui.widget.RedrawableTexturedButtonWidget; -import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; -import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; @@ -13,10 +9,13 @@ import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.gui.widget.RedrawableTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.util.TextUtil; @Environment(EnvType.CLIENT) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/BlockEventGenerator.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/BlockEventGenerator.java index f6290a120..9b6d83c3d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/BlockEventGenerator.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/BlockEventGenerator.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.util.event; +import net.minecraft.block.Block; import net.pitan76.mcpitanlib.api.event.block.BlockBreakEvent; import net.pitan76.mcpitanlib.api.event.block.BlockPlacedEvent; import net.pitan76.mcpitanlib.api.event.block.StateReplacedEvent; -import net.minecraft.block.Block; public class BlockEventGenerator { public static void onPlaced(Block block, BlockPlacedEvent e) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java index 73a18843c..caf91b12e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.api.util.event; -import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.TypedActionResult; +import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; public class ItemEventGenerator { public static TypedActionResult onRightClick(Item item, ItemUseEvent e) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java index 90621f2f3..56990e603 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/BlockUtilV1.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.util.v1; -import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; -import net.pitan76.mcpitanlib.api.tag.MineableToolTags; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.tag.MineableToolTags; import java.util.ArrayList; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java index 87c93652d..b202b06a9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v1/ItemUtilV1.java @@ -1,13 +1,13 @@ package net.pitan76.mcpitanlib.api.util.v1; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.tag.TagKey; import java.util.ArrayList; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java index 0c2726b17..a3d771a06 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.util.v2; -import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.block.Block; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.util.BlockUtil; import java.util.ArrayList; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java index b2295f2ce..ff8ded40b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.util.v2; -import net.pitan76.mcpitanlib.api.tag.TagKey; import net.minecraft.item.Item; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.util.ItemUtil; import java.util.ArrayList; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/world/ExtendWorld.java b/common/src/main/java/net/pitan76/mcpitanlib/api/world/ExtendWorld.java index cabc6499c..865a2694f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/world/ExtendWorld.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/world/ExtendWorld.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.world; -import net.pitan76.mcpitanlib.api.util.WorldUtil; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.WorldUtil; public class ExtendWorld { public World world; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/player/ItemCooldown.java b/common/src/main/java/net/pitan76/mcpitanlib/core/player/ItemCooldown.java index 2987a56aa..4aac66ae5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/player/ItemCooldown.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/player/ItemCooldown.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.core.player; -import net.pitan76.mcpitanlib.api.entity.Player; import net.minecraft.item.Item; +import net.pitan76.mcpitanlib.api.entity.Player; public class ItemCooldown { public final Player player; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java b/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java index e4739840c..7f403b183 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java @@ -3,7 +3,8 @@ import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.ExtendItem; -import static net.pitan76.mcpitanlib.MCPitanLib.*; +import static net.pitan76.mcpitanlib.MCPitanLib.id; +import static net.pitan76.mcpitanlib.MCPitanLib.registry; /** * A tool for debugging. diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 2d61563f5..8d31e566c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -1,8 +1,5 @@ package net.pitan76.mcpitanlib.mixin; -import net.pitan76.mcpitanlib.api.event.item.*; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider.Options; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; @@ -14,6 +11,9 @@ import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.*; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider.Options; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java index 0c5c2790b..e70dd0bd4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.mixin; -import net.pitan76.mcpitanlib.api.event.v0.event.ItemStackActionEvent; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; +import net.pitan76.mcpitanlib.api.event.v0.event.ItemStackActionEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java index 47beee8aa..b62d23a71 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.mixin; +import net.minecraft.server.MinecraftServer; import net.pitan76.mcpitanlib.api.timer.MinecraftServerTimerAccess; import net.pitan76.mcpitanlib.api.timer.TimerItem; -import net.minecraft.server.MinecraftServer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java index d0f573b78..50ded73c2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java @@ -2,14 +2,14 @@ import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; -import net.pitan76.mcpitanlib.api.event.v1.RecipeManagerRegistry; -import net.pitan76.mcpitanlib.api.event.v0.event.RecipeManagerEvent; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; import net.minecraft.recipe.RecipeType; import net.minecraft.resource.ResourceManager; import net.minecraft.util.Identifier; import net.minecraft.util.profiler.Profiler; +import net.pitan76.mcpitanlib.api.event.v0.event.RecipeManagerEvent; +import net.pitan76.mcpitanlib.api.event.v1.RecipeManagerRegistry; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java index 001458785..7c8b7a21d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.mixin; +import net.minecraft.server.world.ServerWorld; import net.pitan76.mcpitanlib.api.timer.ServerWorldTimerAccess; import net.pitan76.mcpitanlib.api.timer.TimerItem; -import net.minecraft.server.world.ServerWorld; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java index b66d9d08f..62951d417 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java @@ -1,12 +1,12 @@ package net.pitan76.mcpitanlib.test; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.item.ItemStack; import net.pitan76.mcpitanlib.api.command.CommandSettings; import net.pitan76.mcpitanlib.api.command.LiteralCommand; import net.pitan76.mcpitanlib.api.command.argument.IntegerCommand; import net.pitan76.mcpitanlib.api.event.IntegerCommandEvent; import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; -import net.minecraft.item.ItemStack; public class ExampleCommand extends LiteralCommand { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java index b158a46b5..f2a5ef3e1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java @@ -1,14 +1,14 @@ package net.pitan76.mcpitanlib.test; -import net.pitan76.mcpitanlib.api.block.ExtendBlock; -import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; -import net.pitan76.mcpitanlib.api.util.TextUtil; import net.minecraft.block.BlockState; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.util.ActionResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; +import net.pitan76.mcpitanlib.api.util.TextUtil; public class ExampleGuiBlock extends ExtendBlock { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java index 46e36b176..12650ad2c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java @@ -1,13 +1,13 @@ package net.pitan76.mcpitanlib.test; -import net.pitan76.mcpitanlib.api.util.TextUtil; -import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.minecraft.item.ItemStack; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.util.TypedActionResult; +import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.util.TextUtil; public class ExampleGuiItem extends ExtendItem { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java index 53984c5d9..2d054e9d4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java @@ -1,5 +1,9 @@ package net.pitan76.mcpitanlib.test; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; import net.pitan76.mcpitanlib.api.block.ExtendBlock; @@ -8,10 +12,6 @@ import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.DefaultItemGroups; import net.pitan76.mcpitanlib.api.item.ExtendItem; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.registry.CompatRegistry; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; import net.pitan76.mcpitanlib.api.util.ItemUtil; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java index b9164f732..45e7a0295 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java @@ -1,14 +1,14 @@ package net.pitan76.mcpitanlib.test; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.client.SimpleHandledScreen; import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawBackgroundArgs; import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawMouseoverTooltipArgs; import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; public class ExampleScreen extends SimpleHandledScreen { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java index e0e5d8b78..90d2e6e45 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java @@ -1,9 +1,9 @@ package net.pitan76.mcpitanlib.test; -import net.pitan76.mcpitanlib.api.entity.Player; -import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandler; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandler; public class ExampleScreenHandler extends SimpleScreenHandler { diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/MCPitanLibFabric.java b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/MCPitanLibFabric.java index 42ac02f7c..939cd37a0 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/MCPitanLibFabric.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/MCPitanLibFabric.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.fabric; -import net.pitan76.mcpitanlib.MCPitanLib; import net.fabricmc.api.ModInitializer; +import net.pitan76.mcpitanlib.MCPitanLib; public class MCPitanLibFabric implements ModInitializer { @Override diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java index 8c3380f7d..f16705691 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.fabric.mixin; -import net.pitan76.mcpitanlib.api.item.FixedRecipeRemainderItem; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.item.FixedRecipeRemainderItem; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; From a3db9504b58477747df69440348b54bbb666ab55 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 15 Feb 2024 19:47:54 +0900 Subject: [PATCH 244/617] fix mixin --- .../main/java/net/pitan76/mcpitanlib}/mixin/RecipeMixin.java | 2 +- common/src/main/resources/mcpitanlib-common.mixins.json | 3 ++- fabric/src/main/resources/fabric.mod.json | 2 +- fabric/src/main/resources/mcpitanlib.mixins.json | 2 +- info.properties | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) rename {fabric/src/main/java/net/pitan76/mcpitanlib/fabric => common/src/main/java/net/pitan76/mcpitanlib}/mixin/RecipeMixin.java (96%) diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeMixin.java similarity index 96% rename from fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java rename to common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeMixin.java index f16705691..8c06e793a 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeMixin.java @@ -1,4 +1,4 @@ -package net.pitan76.mcpitanlib.fabric.mixin; +package net.pitan76.mcpitanlib.mixin; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; diff --git a/common/src/main/resources/mcpitanlib-common.mixins.json b/common/src/main/resources/mcpitanlib-common.mixins.json index 398165fe8..d8b00665a 100644 --- a/common/src/main/resources/mcpitanlib-common.mixins.json +++ b/common/src/main/resources/mcpitanlib-common.mixins.json @@ -9,7 +9,8 @@ "ItemUsageContextMixin", "MinecraftServerTimer", "RecipeManagerMixin", - "ServerWorldTimer" + "ServerWorldTimer", + "RecipeMixin" ], "client": [ ], diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index e7c85bbba..84158b7d3 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -33,7 +33,7 @@ "mcpitanlib.mixins.json", "mcpitanlib-common.mixins.json" ], - "accessWidener" : "mcpitanlib.accesswidener", + "accessWidener": "mcpitanlib.accesswidener", "depends": { "fabricloader": "*", "minecraft": ">=1.18" diff --git a/fabric/src/main/resources/mcpitanlib.mixins.json b/fabric/src/main/resources/mcpitanlib.mixins.json index 0a36c5829..d4b92ebd9 100644 --- a/fabric/src/main/resources/mcpitanlib.mixins.json +++ b/fabric/src/main/resources/mcpitanlib.mixins.json @@ -4,7 +4,7 @@ "package": "net.pitan76.mcpitanlib.fabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ - "RecipeMixin" + ], "client": [ ], diff --git a/info.properties b/info.properties index 68982b6c2..2b6f072f2 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.0 +mod_version=2.0.1 maven_group=net.pitan76 \ No newline at end of file From cd13e5bf16c547e1a2e11f47d5c604fedcedf005 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 15 Feb 2024 19:58:32 +0900 Subject: [PATCH 245/617] gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9e153e2d4..f4896a499 100644 --- a/build.gradle +++ b/build.gradle @@ -53,7 +53,7 @@ allprojects { // for more information about repositories. } - tasks.withType(JavaCompile) { + tasks.withType(JavaCompile).configureEach { options.encoding = "UTF-8" options.release = 17 } From a97d4c64f99fa2d9353507be5f2aa1de67c51a87 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 15 Feb 2024 20:05:48 +0900 Subject: [PATCH 246/617] 1182 --- .../main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java index af1e1a988..49cbbcd4f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java @@ -1,7 +1,6 @@ package net.pitan76.mcpitanlib.api.util; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; +import net.minecraft.text.*; public class TextUtil { public static MutableText literal(String string) { From c82a6853de2d13f4df8dd917bfbda495e549316a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 16 Feb 2024 15:10:23 +0900 Subject: [PATCH 247/617] add APIs --- .../mcpitanlib/api/block/ExtendBlock.java | 52 +++++++ .../api/block/ExtendBlockProvider.java | 107 ++++++++++++++ .../api/event/block/CollisionShapeEvent.java | 13 ++ .../api/event/v1/BlockEventRegistry.java | 22 +++ .../api/event/v1/listener/BlockBreakTask.java | 9 ++ .../event/v1/listener/BlockPlacedTask.java | 8 + .../mcpitanlib/api/item/ExtendBlockItem.java | 138 ++++++++++++++++++ .../mcpitanlib/api/item/ExtendItem.java | 35 ++++- .../api/item/ExtendItemProvider.java | 4 +- .../mcpitanlib/mixin/AbstractBlockMixin.java | 95 ++++++++++++ .../pitan76/mcpitanlib/mixin/BlockMixin.java | 60 ++++++++ .../pitan76/mcpitanlib/mixin/ItemMixin.java | 9 +- .../mcpitanlib/mixin/RecipeManagerMixin.java | 1 + .../resources/mcpitanlib-common.mixins.json | 6 +- info.properties | 2 +- 15 files changed, 545 insertions(+), 16 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/CollisionShapeEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/BlockEventRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/listener/BlockBreakTask.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/listener/BlockPlacedTask.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index c6a90c9ef..23bf0a3db 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -34,6 +34,26 @@ public ExtendBlock(CompatibleBlockSettings settings) { super(settings.build()); } + /** + * get collision voxel shape + * @param event CollisionShapeEvent + * @return VoxelShape + */ + public VoxelShape getCollisionShape(CollisionShapeEvent event) { + return super.getCollisionShape(event.state, event.world, event.pos, event.context); + } + + @Deprecated + @Override + public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return getCollisionShape(new CollisionShapeEvent(state, world, pos, context)); + } + + /** + * get outline voxel shape + * @param event OutlineShapeEvent + * @return VoxelShape + */ public VoxelShape getOutlineShape(OutlineShapeEvent event) { return super.getOutlineShape(event.state, event.world, event.pos, event.context); } @@ -44,6 +64,10 @@ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos po return getOutlineShape(new OutlineShapeEvent(state, world, pos, context)); } + /** + * block scheduled tick event + * @param event BlockScheduledTickEvent + */ public void scheduledTick(BlockScheduledTickEvent event) { super.scheduledTick(event.state, event.world, event.pos, event.random); } @@ -69,6 +93,7 @@ public ActionResult onRightClick(BlockUseEvent event) { return super.onUse(event.state, event.world, event.pos, event.player.getPlayerEntity(), event.hand, event.hit); } + @Deprecated @Nullable @Override public NamedScreenHandlerFactory createScreenHandlerFactory(BlockState state, World world, BlockPos pos) { @@ -77,11 +102,20 @@ public NamedScreenHandlerFactory createScreenHandlerFactory(BlockState state, Wo ); } + /** + * screen handler create event + * @param event ScreenHandlerCreateEvent + * @return ScreenHandler + */ @Nullable public ScreenHandler createScreenHandler(ScreenHandlerCreateEvent event) { return null; } + /** + * get screen title + * @return Text + */ @Nullable public Text getScreenTitle() { return TextUtil.literal(""); @@ -93,6 +127,10 @@ public void onPlaced(World world, BlockPos pos, BlockState state, @Nullable Livi onPlaced(new BlockPlacedEvent(world, pos, state, placer, itemStack)); } + /** + * block placed event + * @param event BlockPlacedEvent + */ public void onPlaced(BlockPlacedEvent event) { super.onPlaced(event.world, event.pos, event.state, event.placer, event.stack); } @@ -103,6 +141,11 @@ public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity pl onBreak(new BlockBreakEvent(world, pos, state, player)); } + /** + * block break event + * @param event BlockBreakEvent + * @return BlockBreakResult + */ public BlockBreakResult onBreak(BlockBreakEvent event) { super.onBreak(event.world, event.pos, event.state, event.getPlayerEntity()); return new BlockBreakResult(event.state); @@ -114,6 +157,11 @@ public ItemStack getPickStack(BlockView world, BlockPos pos, BlockState state) { return getPickStack(new PickStackEvent(world, pos, state)); } + /** + * block pick stack event + * @param event PickStackEvent + * @return ItemStack + */ public ItemStack getPickStack(PickStackEvent event) { return super.getPickStack(event.blockView, event.pos, event.state); } @@ -124,6 +172,10 @@ public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockSt onStateReplaced(new StateReplacedEvent(state, world, pos, newState, moved)); } + /** + * block state replaced event + * @param event StateReplacedEvent + */ public void onStateReplaced(StateReplacedEvent event) { super.onStateReplaced(event.state, event.world, event.pos, event.newState, event.moved); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java new file mode 100644 index 000000000..1ae252675 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java @@ -0,0 +1,107 @@ +package net.pitan76.mcpitanlib.api.block; + +import net.minecraft.item.ItemStack; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.shape.VoxelShape; +import net.pitan76.mcpitanlib.api.event.block.*; +import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; +import net.pitan76.mcpitanlib.api.util.TextUtil; + +public interface ExtendBlockProvider { + + /** + * get collision voxel shape + * @param event CollisionShapeEvent + * @param options Options + * @return VoxelShape + */ + default VoxelShape getCollisionShape(CollisionShapeEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * get outline voxel shape + * @param event OutlineShapeEvent + * @param options Options + * @return VoxelShape + */ + default VoxelShape getOutlineShape(OutlineShapeEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * block scheduled tick event + * @param event BlockScheduledTickEvent + * @param options Options + */ + default void scheduledTick(BlockScheduledTickEvent event, Options options) { + options.cancel = false; + } + + /** + * block right click event + * @param event BlockUseEvent + * @param options Options + * @return ActionResult + */ + default ActionResult onRightClick(BlockUseEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * screen handler create event + * @param event ScreenHandlerCreateEvent + * @param options Options + * @return ScreenHandler + */ + default ScreenHandler createScreenHandler(ScreenHandlerCreateEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * get screen title + * @return Text + */ + default Text getScreenTitle() { + return TextUtil.literal(""); + } + + /** + * block placed event + * @param event BlockPlacedEvent + * @param options Options + */ + default void onPlaced(BlockPlacedEvent event, Options options) { + options.cancel = false; + } + + /** + * block break event + * @param event BlockBreakEvent + * @param options Options + * @return BlockBreakResult + */ + default BlockBreakResult onBreak(BlockBreakEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * block state replaced event + * @param event StateReplacedEvent + * @param options Options + */ + default void onStateReplaced(StateReplacedEvent event, Options options) { + options.cancel = false; + } + + public static class Options { + public boolean cancel = true; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/CollisionShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/CollisionShapeEvent.java new file mode 100644 index 000000000..43fab8bc5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/CollisionShapeEvent.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; + +public class CollisionShapeEvent extends OutlineShapeEvent { + + public CollisionShapeEvent(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + super(state, world, pos, context); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/BlockEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/BlockEventRegistry.java new file mode 100644 index 000000000..6b6465b87 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/BlockEventRegistry.java @@ -0,0 +1,22 @@ +package net.pitan76.mcpitanlib.api.event.v1; + +import net.pitan76.mcpitanlib.api.event.v1.listener.BlockBreakTask; +import net.pitan76.mcpitanlib.api.event.v1.listener.BlockPlacedTask; + +import java.util.ArrayList; +import java.util.List; + +public class BlockEventRegistry { + public static List onPlacedListeners = new ArrayList<>(); + public static List onBreakListeners = new ArrayList<>(); + + public static void register(BlockPlacedTask listener) { + if (onPlacedListeners.contains(listener)) return; + onPlacedListeners.add(listener); + } + + public static void register(BlockBreakTask listener) { + if (onBreakListeners.contains(listener)) return; + onBreakListeners.add(listener); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/listener/BlockBreakTask.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/listener/BlockBreakTask.java new file mode 100644 index 000000000..ae0300d00 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/listener/BlockBreakTask.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.api.event.v1.listener; + +import net.pitan76.mcpitanlib.api.event.block.BlockBreakEvent; +import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; + +@FunctionalInterface +public interface BlockBreakTask { + BlockBreakResult onBreak(BlockBreakEvent event); +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/listener/BlockPlacedTask.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/listener/BlockPlacedTask.java new file mode 100644 index 000000000..eca682318 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/listener/BlockPlacedTask.java @@ -0,0 +1,8 @@ +package net.pitan76.mcpitanlib.api.event.v1.listener; + +import net.pitan76.mcpitanlib.api.event.block.BlockPlacedEvent; + +@FunctionalInterface +public interface BlockPlacedTask { + void onPlaced(BlockPlacedEvent event); +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java new file mode 100644 index 000000000..842e964ab --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java @@ -0,0 +1,138 @@ +package net.pitan76.mcpitanlib.api.item; + +import net.minecraft.block.Block; +import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.*; +import net.pitan76.mcpitanlib.core.Dummy; +import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ExtendBlockItem extends BlockItem { + public ExtendBlockItem(Block block, Settings settings) { + super(block, settings); + } + + public ExtendBlockItem(Block block, CompatibleItemSettings settings) { + super(block, settings.build()); + } + + + + // ExtendItem + @Deprecated + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + return onRightClick(new ItemUseEvent(world, user, hand)); + } + + @Deprecated + @Override + public ActionResult useOnBlock(ItemUsageContext context) { + ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; + return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())); + } + + @Deprecated + @Override + public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { + return onFinishUsing(new ItemFinishUsingEvent(stack, world, user)); + } + + @Deprecated + @Override + public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) { + return onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand)); + } + + @Deprecated + @Override + public boolean hasRecipeRemainder() { + return hasRecipeRemainder(new Dummy()); + } + + @Deprecated + @Override + public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { + appendTooltip(new ItemAppendTooltipEvent(stack, world, tooltip, context)); + } + + @Deprecated + @Override + public void onCraft(ItemStack stack, World world) { + onCraft(new CraftEvent(stack, world)); + } + + /** + * item right click event + * + * @param event ItemUseEvent + * @return ActionResultType + */ + public TypedActionResult onRightClick(ItemUseEvent event) { + return super.use(event.world, event.user.getPlayerEntity(), event.hand); + } + + /** + * item right click event on block + * @param event ItemUseOnBlockEvent + * @return ActionResultType + */ + public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { + return super.useOnBlock(event.toIUC()); + } + + /** + * item finish using event + * @param event ItemFinishUsingEvent + * @return ItemStack + */ + public ItemStack onFinishUsing(ItemFinishUsingEvent event) { + return super.finishUsing(event.stack, event.world, event.user); + } + + /** + * item right click event on entity + * @param event ItemUseOnEntityEvent + * @return ActionResultType + */ + public ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { + return super.useOnEntity(event.stack, event.user.getEntity(), event.entity, event.hand); + } + + /** + * check if item has recipe remainder + * @param dummy Dummy + * @return boolean + */ + public boolean hasRecipeRemainder(Dummy dummy) { + return super.hasRecipeRemainder(); + } + + /** + * append tooltip to item + * @param event ItemAppendTooltipEvent + */ + public void appendTooltip(ItemAppendTooltipEvent event) { + super.appendTooltip(event.stack, event.world, event.tooltip, event.context); + } + + /** + * on craft event + * @param event CraftEvent + */ + public void onCraft(CraftEvent event) { + super.onCraft(event.stack, event.world); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index ba1f5416d..1c916e340 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -64,6 +64,12 @@ public void appendTooltip(ItemStack stack, @Nullable World world, List too appendTooltip(new ItemAppendTooltipEvent(stack, world, tooltip, context)); } + @Deprecated + @Override + public void onCraft(ItemStack stack, World world, PlayerEntity player) { + onCraft(new CraftEvent(stack, world)); + } + /** * item right click event * @@ -83,28 +89,45 @@ public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { return super.useOnBlock(event.toIUC()); } + /** + * item finish using event + * @param event ItemFinishUsingEvent + * @return ItemStack + */ public ItemStack onFinishUsing(ItemFinishUsingEvent event) { return super.finishUsing(event.stack, event.world, event.user); } + /** + * item right click event on entity + * @param event ItemUseOnEntityEvent + * @return ActionResultType + */ public ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { return super.useOnEntity(event.stack, event.user.getEntity(), event.entity, event.hand); } + /** + * check if item has recipe remainder + * @param dummy Dummy + * @return boolean + */ public boolean hasRecipeRemainder(Dummy dummy) { return super.hasRecipeRemainder(); } + /** + * append tooltip to item + * @param event ItemAppendTooltipEvent + */ public void appendTooltip(ItemAppendTooltipEvent event) { super.appendTooltip(event.stack, event.world, event.tooltip, event.context); } - @Deprecated - @Override - public void onCraft(ItemStack stack, World world, PlayerEntity player) { - onCraft(new CraftEvent(stack, world)); - } - + /** + * on craft event + * @param event CraftEvent + */ public void onCraft(CraftEvent event) { super.onCraft(event.stack, event.world, null); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java index 6b9512e4d..e8f6a3366 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java @@ -50,7 +50,7 @@ default ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event, Options op /** * item has recipe remainder - * @param dummy Dummy + * @param options Options * @return boolean */ default boolean hasRecipeRemainder(Options options) { @@ -63,7 +63,7 @@ default boolean hasRecipeRemainder(Options options) { * @param event ItemAppendTooltipEvent */ default void appendTooltip(ItemAppendTooltipEvent event, Options options) { - options.cancel = true; + options.cancel = false; } public static class Options { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java new file mode 100644 index 000000000..d499ae280 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java @@ -0,0 +1,95 @@ +package net.pitan76.mcpitanlib.mixin; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.screen.SimpleNamedScreenHandlerFactory; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider; +import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider.Options; +import net.pitan76.mcpitanlib.api.event.block.*; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(AbstractBlock.class) +public class AbstractBlockMixin { + @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) + private void inject_getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + VoxelShape returnValue = provider.getCollisionShape(new CollisionShapeEvent(state, world, pos, context), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) + private void inject_getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + VoxelShape returnValue = provider.getOutlineShape(new OutlineShapeEvent(state, world, pos, context), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "scheduledTick", at = @At("HEAD"), cancellable = true) + private void inject_scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random, CallbackInfo ci) { + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + provider.scheduledTick(new BlockScheduledTickEvent(state, world, pos, random), options); + if (options.cancel) + ci.cancel(); + } + } + + @Inject(method = "onUse", at = @At("HEAD"), cancellable = true) + private void inject_onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + ActionResult returnValue = provider.onRightClick(new BlockUseEvent(state, world, pos, player, hand, hit), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "createScreenHandlerFactory", at = @At("HEAD"), cancellable = true) + private void inject_createScreenHandlerFactory(BlockState state, World world, BlockPos pos, CallbackInfoReturnable cir) { + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + NamedScreenHandlerFactory returnValue = new SimpleNamedScreenHandlerFactory((syncId, inventory, player) -> + provider.createScreenHandler(new ScreenHandlerCreateEvent(state, world, pos, syncId, inventory, player), options), provider.getScreenTitle()); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "onStateReplaced", at = @At("HEAD"), cancellable = true) + private void inject_onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved, CallbackInfo ci) { + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + provider.onStateReplaced(new StateReplacedEvent(state, world, pos, newState, moved), options); + if (options.cancel) + ci.cancel(); + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java new file mode 100644 index 000000000..404bdc047 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java @@ -0,0 +1,60 @@ +package net.pitan76.mcpitanlib.mixin; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider; +import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider.Options; +import net.pitan76.mcpitanlib.api.event.block.BlockBreakEvent; +import net.pitan76.mcpitanlib.api.event.block.BlockPlacedEvent; +import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; +import net.pitan76.mcpitanlib.api.event.v1.BlockEventRegistry; +import net.pitan76.mcpitanlib.api.event.v1.listener.BlockBreakTask; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Block.class) +public class BlockMixin { + + @Inject(method = "onPlaced", at = @At("HEAD"), cancellable = true) + private void inject_onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack, CallbackInfo ci) { + if (!BlockEventRegistry.onPlacedListeners.isEmpty()) { + BlockEventRegistry.onPlacedListeners.forEach(l -> l.onPlaced(new BlockPlacedEvent(world, pos, state, placer, stack))); + } + + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + provider.onPlaced(new BlockPlacedEvent(world, pos, state, placer, stack), options); + if (options.cancel) + ci.cancel(); + } + } + + @Inject(method = "onBreak", at = @At("HEAD"), cancellable = true) + private void inject_onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfoReturnable cir) { + if (!BlockEventRegistry.onBreakListeners.isEmpty()) { + BlockState newState = state; + for (BlockBreakTask l : BlockEventRegistry.onBreakListeners) { + newState = l.onBreak(new BlockBreakEvent(world, pos, state, player)).getState(); + } + if (newState != state) + cir.setReturnValue(newState); + } + + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + BlockBreakResult returnValue = provider.onBreak(new BlockBreakEvent(world, pos, state, player), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue.getState()); + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 8d31e566c..9204af80c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -30,7 +30,7 @@ private void use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnab ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); TypedActionResult returnValue = provider.onRightClick(new ItemUseEvent(world, user, hand), options); - if (options.cancel) + if (options.cancel && returnValue != null) cir.setReturnValue(returnValue); } } @@ -42,7 +42,7 @@ private void useOnBlock(ItemUsageContext context, CallbackInfoReturnable map, ResourceManager resourceManager, Profiler profiler, CallbackInfo ci, Map, ImmutableMap.Builder>> map2) { + if (RecipeManagerRegistry.managers.isEmpty()) return; RecipeManagerRegistry.managers.forEach((manager) -> manager.apply(new RecipeManagerEvent(map, resourceManager, profiler, map2))); } diff --git a/common/src/main/resources/mcpitanlib-common.mixins.json b/common/src/main/resources/mcpitanlib-common.mixins.json index d8b00665a..c255e797f 100644 --- a/common/src/main/resources/mcpitanlib-common.mixins.json +++ b/common/src/main/resources/mcpitanlib-common.mixins.json @@ -4,13 +4,15 @@ "package": "net.pitan76.mcpitanlib.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ + "AbstractBlockMixin", + "BlockMixin", "ItemMixin", "ItemStackMixin", "ItemUsageContextMixin", "MinecraftServerTimer", "RecipeManagerMixin", - "ServerWorldTimer", - "RecipeMixin" + "RecipeMixin", + "ServerWorldTimer" ], "client": [ ], diff --git a/info.properties b/info.properties index 2b6f072f2..7bd2a3f7f 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.1 +mod_version=2.0.2 maven_group=net.pitan76 \ No newline at end of file From c58a6b802084ca2e78124b0d94542a193d85dc36 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 16 Feb 2024 15:13:58 +0900 Subject: [PATCH 248/617] 1201 --- .../java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java index 842e964ab..d7efce86d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java @@ -70,7 +70,7 @@ public void appendTooltip(ItemStack stack, @Nullable World world, List too @Deprecated @Override - public void onCraft(ItemStack stack, World world) { + public void onCraft(ItemStack stack, World world, PlayerEntity player) { onCraft(new CraftEvent(stack, world)); } @@ -133,6 +133,6 @@ public void appendTooltip(ItemAppendTooltipEvent event) { * @param event CraftEvent */ public void onCraft(CraftEvent event) { - super.onCraft(event.stack, event.world); + super.onCraft(event.stack, event.world, null); } } From be9f32164898e2bf86054d2bdbdfcf4faf4c8438 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 16 Feb 2024 15:20:24 +0900 Subject: [PATCH 249/617] onBreak --- .../net/pitan76/mcpitanlib/mixin/BlockMixin.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java index 404bdc047..c75fd3225 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java @@ -18,7 +18,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Block.class) public class BlockMixin { @@ -39,22 +38,19 @@ private void inject_onPlaced(World world, BlockPos pos, BlockState state, Living } @Inject(method = "onBreak", at = @At("HEAD"), cancellable = true) - private void inject_onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfoReturnable cir) { + private void inject_onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfo ci) { if (!BlockEventRegistry.onBreakListeners.isEmpty()) { - BlockState newState = state; for (BlockBreakTask l : BlockEventRegistry.onBreakListeners) { - newState = l.onBreak(new BlockBreakEvent(world, pos, state, player)).getState(); + l.onBreak(new BlockBreakEvent(world, pos, state, player)); } - if (newState != state) - cir.setReturnValue(newState); } if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); BlockBreakResult returnValue = provider.onBreak(new BlockBreakEvent(world, pos, state, player), options); - if (options.cancel && returnValue != null) - cir.setReturnValue(returnValue.getState()); + if (options.cancel) + ci.cancel(); } } } From ef60fecc568286b86d33085be5b2e0a7df4e9cba Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 16 Feb 2024 15:20:29 +0900 Subject: [PATCH 250/617] 1182 --- .../java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java index d499ae280..9b37d9712 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java @@ -11,7 +11,6 @@ import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.random.Random; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.World; @@ -24,6 +23,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Random; + @Mixin(AbstractBlock.class) public class AbstractBlockMixin { @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) From f51c762dad0df336c1c14f8941b843f87b3a81b3 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:36:47 +0900 Subject: [PATCH 251/617] Add new Event APIs --- .../api/event/v1/BlockEventRegistry.java | 24 +-- .../api/event/v2/AbstractEvent.java | 18 ++ .../api/event/v2/BlockEventRegistry.java | 25 +++ .../mcpitanlib/api/event/v2/OrderedEvent.java | 167 ++++++++++++++++++ .../api/registry/CompatRegistry.java | 14 ++ .../api/registry/result/RegistryResult.java | 10 ++ .../pitan76/mcpitanlib/mixin/BlockMixin.java | 27 ++- info.properties | 2 +- 8 files changed, 269 insertions(+), 18 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/AbstractEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/BlockEventRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/OrderedEvent.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/BlockEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/BlockEventRegistry.java index 6b6465b87..cfc8397de 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/BlockEventRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/BlockEventRegistry.java @@ -3,20 +3,24 @@ import net.pitan76.mcpitanlib.api.event.v1.listener.BlockBreakTask; import net.pitan76.mcpitanlib.api.event.v1.listener.BlockPlacedTask; -import java.util.ArrayList; -import java.util.List; - +@Deprecated public class BlockEventRegistry { - public static List onPlacedListeners = new ArrayList<>(); - public static List onBreakListeners = new ArrayList<>(); - + @Deprecated public static void register(BlockPlacedTask listener) { - if (onPlacedListeners.contains(listener)) return; - onPlacedListeners.add(listener); + net.pitan76.mcpitanlib.api.event.v2.BlockEventRegistry.ON_PLACED.register(listener); } + @Deprecated public static void register(BlockBreakTask listener) { - if (onBreakListeners.contains(listener)) return; - onBreakListeners.add(listener); + net.pitan76.mcpitanlib.api.event.v2.BlockEventRegistry.ON_BREAK.register(listener); + } + + public static void registerPlacedListener(BlockPlacedTask listener) { + net.pitan76.mcpitanlib.api.event.v2.BlockEventRegistry.ON_PLACED.register(listener); + + } + + public static void registerBreakListener(BlockBreakTask listener) { + net.pitan76.mcpitanlib.api.event.v2.BlockEventRegistry.ON_BREAK.register(listener); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/AbstractEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/AbstractEvent.java new file mode 100644 index 000000000..4ad62500e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/AbstractEvent.java @@ -0,0 +1,18 @@ +package net.pitan76.mcpitanlib.api.event.v2; + +import java.util.List; + +public abstract class AbstractEvent { + + public abstract void register(T listener); + + public abstract void unregister(T listener); + + public abstract T getListener(int index); + + public abstract List getListenersAsList(); + + public int getListenerCount() { + return getListenersAsList().size(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/BlockEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/BlockEventRegistry.java new file mode 100644 index 000000000..50f50a605 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/BlockEventRegistry.java @@ -0,0 +1,25 @@ +package net.pitan76.mcpitanlib.api.event.v2; + +import net.pitan76.mcpitanlib.api.event.v1.listener.BlockBreakTask; +import net.pitan76.mcpitanlib.api.event.v1.listener.BlockPlacedTask; + +public class BlockEventRegistry { + /** + * Event that is called when a block is placed + *
{@code
+     * BlockEventRegistry.ON_PLACED.register((event) -> {
+     *     // Do something
+     * }
+ */ + public static OrderedEvent ON_PLACED = new OrderedEvent<>(); + + /** + * Event that is called when a block is broken + *
{@code
+     * BlockEventRegistry.ON_BREAK.register((event) -> {
+     *     // Do something
+     *     return new BlockBreakResult(event.state);
+     * }
+ */ + public static OrderedEvent ON_BREAK = new OrderedEvent<>(); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/OrderedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/OrderedEvent.java new file mode 100644 index 000000000..019d5f5a7 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/OrderedEvent.java @@ -0,0 +1,167 @@ +package net.pitan76.mcpitanlib.api.event.v2; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class OrderedEvent extends AbstractEvent { + + public volatile Map listeners = new HashMap<>(); + public volatile int maxPriority = 0; + + /** + * Check if the event has any listeners + * @return Whether the event has any listeners + */ + public boolean isEmpty() { + return listeners.isEmpty(); + } + + /** + * Check if a listener is registered + * @param listener The listener to check + * @return Whether the listener is registered + */ + public boolean isExists(T listener) { + return listeners.containsKey(listener); + } + + /** + * Alias for isExists + * @param listener The listener to check + * @return Whether the listener is registered + */ + public boolean has(T listener) { + return isExists(listener); + } + + /** + * Check if a listener has a priority + * @param listener The listener to check + * @return Whether the listener has a priority + */ + public boolean hasPriority(T listener) { + if (!isExists(listener)) return false; + return listeners.get(listener) != null && listeners.get(listener) != 0; + } + + /** + * Set the priority of a listener + * @param listener The listener to set the priority of + * @param priority The priority to set + */ + public void setPriority(T listener, int priority) { + if (!isExists(listener)) { + listeners.put(listener, priority); + return; + } + listeners.replace(listener, priority); + } + + /** + * Register a listener with a priority + * @param listener The listener to register + * @param priority The priority of the listener + */ + public void register(T listener, int priority) { + this.listeners.put(listener, priority); + if (priority > maxPriority) { + maxPriority = priority; + } + } + + /** + * Register a listener (no priority) + * @param listener The listener to register + * @throws IllegalArgumentException If the listener is already registered + */ + @Override + public void register(T listener) { + if (isExists(listener)) throw new IllegalArgumentException("Listener already exists"); + this.listeners.put(listener, 0); + } + + /** + * Register a listener (no priority) + * @param listener The listener to register + */ + public void registerNonSafe(T listener) { + if (isExists(listener)) return; + register(listener); + } + + /** + * Unregister a listener + * @param listener The listener to unregister + */ + @Override + public void unregister(T listener) { + if (!isExists(listener)) return; + this.listeners.remove(listener); + } + + /** + * Get all listeners + * @return A list of all listeners + */ + @Override + public List getListenersAsList() { + return listeners.keySet().stream().toList(); + } + + /** + * get the priority of a listener + * @param listener The listener to get the priority of + * @return The priority of the listener + */ + public int getPriority(T listener) { + return listeners.get(listener); + } + + /** + * Get the highest priority + * @return The highest priority + */ + public int getMaxPriority() { + return maxPriority; + } + + /** + * Get the next priority + * @return The next priority + */ + public int nextPriority() { + return maxPriority + 1; + } + + @Deprecated + public T getListener(int index) { + return getListenersAsList().get(index); + } + + /** + * Get all listeners with a specific priority + * @param priority The priority to get listeners for + * @return A list of listeners with the specified priority + */ + public List getListenersAsList(int priority) { + List listeners = new ArrayList<>(); + for (Map.Entry entry : this.listeners.entrySet()) { + if (entry.getValue() == priority) { + listeners.add(entry.getKey()); + } + } + return listeners; + } + + @Deprecated + @SuppressWarnings("unchecked") + public T[] getListeners(int priority) { + return (T[]) getListenersAsList(priority).toArray(); + } + + public Map getListeners() { + return listeners; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index 2884943b5..b03f669f7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -32,15 +32,29 @@ public class CompatRegistry { private final MCPLRegistry mcplr; private final MCPLRegistry1_20 mcplr1_20; + /** + * @deprecated Use {@link #createRegistry(String)} instead + */ public CompatRegistry(String MOD_ID) { mcplr = new MCPLRegistry(MOD_ID); mcplr1_20 = new MCPLRegistry1_20(mcplr); } + /** + * Create a new CompatRegistry + * @param MOD_ID The mod id + * @return The new CompatRegistry + */ public static CompatRegistry createRegistry(String MOD_ID) { return new CompatRegistry(MOD_ID); } + /** + * Register an item + * @param id The item id + * @param supplier The item supplier + * @return The registry result + */ public RegistryResult registerItem(Identifier id, Supplier supplier) { if (MCPitanLib.isItemBlackListed(id)) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); RegistrySupplier registrySupplier = mcplr.registryItem(id, supplier); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/RegistryResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/RegistryResult.java index a19dd2e16..52fc504e7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/RegistryResult.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/RegistryResult.java @@ -3,6 +3,16 @@ import dev.architectury.registry.registries.RegistrySupplier; import org.jetbrains.annotations.Nullable; +/** + * The result of a registry + * @param The type of the registry + * + *
{@code
+ * RegistryResult ITEM = registry.registerItem(new Identifier("mcpitanlib", "example"), ExampleItem::new);
+ * ITEM.getOrNull(); => The item (Item.class) or null
+ * ITEM.get(); => The item (Item.class)
+ * }
+ */ public class RegistryResult { public RegistrySupplier supplier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java index c75fd3225..378937844 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java @@ -12,8 +12,9 @@ import net.pitan76.mcpitanlib.api.event.block.BlockBreakEvent; import net.pitan76.mcpitanlib.api.event.block.BlockPlacedEvent; import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; -import net.pitan76.mcpitanlib.api.event.v1.BlockEventRegistry; import net.pitan76.mcpitanlib.api.event.v1.listener.BlockBreakTask; +import net.pitan76.mcpitanlib.api.event.v1.listener.BlockPlacedTask; +import net.pitan76.mcpitanlib.api.event.v2.BlockEventRegistry; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -24,10 +25,17 @@ public class BlockMixin { @Inject(method = "onPlaced", at = @At("HEAD"), cancellable = true) private void inject_onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack, CallbackInfo ci) { - if (!BlockEventRegistry.onPlacedListeners.isEmpty()) { - BlockEventRegistry.onPlacedListeners.forEach(l -> l.onPlaced(new BlockPlacedEvent(world, pos, state, placer, stack))); + // イベントを呼び出す + if (!BlockEventRegistry.ON_PLACED.isEmpty()) { + int maxPriority = BlockEventRegistry.ON_PLACED.getMaxPriority(); + for (int p = maxPriority; p >= 0; p--) { + for (BlockPlacedTask listener : BlockEventRegistry.ON_PLACED.getListenersAsList(p)) { + listener.onPlaced(new BlockPlacedEvent(world, pos, state, placer, stack)); + } + } } + // ExtendBlockProviderを実装している場合 if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); @@ -38,13 +46,18 @@ private void inject_onPlaced(World world, BlockPos pos, BlockState state, Living } @Inject(method = "onBreak", at = @At("HEAD"), cancellable = true) - private void inject_onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfo ci) { - if (!BlockEventRegistry.onBreakListeners.isEmpty()) { - for (BlockBreakTask l : BlockEventRegistry.onBreakListeners) { - l.onBreak(new BlockBreakEvent(world, pos, state, player)); + private void inject_onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfoReturnable cir) { + // イベントを呼び出す + if (!BlockEventRegistry.ON_BREAK.isEmpty()) { + int maxPriority = BlockEventRegistry.ON_BREAK.getMaxPriority(); + for (int p = maxPriority; p >= 0; p--) { + for (BlockBreakTask listener : BlockEventRegistry.ON_BREAK.getListenersAsList(p)) { + listener.onBreak(new BlockBreakEvent(world, pos, newState, player)); + } } } + // ExtendBlockProviderを実装している場合 if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); diff --git a/info.properties b/info.properties index 7bd2a3f7f..7b95e0339 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.2 +mod_version=2.0.3 maven_group=net.pitan76 \ No newline at end of file From 9b017d23f00aa7f8529781853726d60e9af0b296 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:40:56 +0900 Subject: [PATCH 252/617] 1192 --- .../main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java index 378937844..e5b15a4df 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java @@ -46,13 +46,13 @@ private void inject_onPlaced(World world, BlockPos pos, BlockState state, Living } @Inject(method = "onBreak", at = @At("HEAD"), cancellable = true) - private void inject_onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfoReturnable cir) { + private void inject_onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfo ci) { // イベントを呼び出す if (!BlockEventRegistry.ON_BREAK.isEmpty()) { int maxPriority = BlockEventRegistry.ON_BREAK.getMaxPriority(); for (int p = maxPriority; p >= 0; p--) { for (BlockBreakTask listener : BlockEventRegistry.ON_BREAK.getListenersAsList(p)) { - listener.onBreak(new BlockBreakEvent(world, pos, newState, player)); + listener.onBreak(new BlockBreakEvent(world, pos, state, player)); } } } From 5923d913b1761d7f58cd10a68626f0693e353d13 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:41:58 +0900 Subject: [PATCH 253/617] Deprecated --- .../java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index b03f669f7..6aa557b8e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -35,6 +35,7 @@ public class CompatRegistry { /** * @deprecated Use {@link #createRegistry(String)} instead */ + @Deprecated public CompatRegistry(String MOD_ID) { mcplr = new MCPLRegistry(MOD_ID); mcplr1_20 = new MCPLRegistry1_20(mcplr); From 7ce504f51c4102466cdfd3d213bbcf2b2f33b40f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 16 Feb 2024 21:50:20 +0900 Subject: [PATCH 254/617] add CompatibleArmorItem (2.0.4) --- .../api/item/CompatibleArmorItem.java | 40 +++++++++++++++++++ info.properties | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java new file mode 100644 index 000000000..8a81fb2ba --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java @@ -0,0 +1,40 @@ +package net.pitan76.mcpitanlib.api.item; + +import net.minecraft.item.ArmorItem; + +public class CompatibleArmorItem extends ArmorItem implements ExtendItemProvider { + public final ArmorEquipmentType type; + + public CompatibleArmorItem(CompatibleArmorMaterial material, ArmorEquipmentType type, CompatibleItemSettings settings) { + super(material, type.getType(), settings.build()); + this.type = type; + } + + /** + * get ArmorEquipmentType + * @return ArmorEquipmentType + */ + public ArmorEquipmentType getArmorEquipmentType() { + return type; + } + + /** + * @deprecated Use {@link #getArmorEquipmentType()} instead + */ + @Deprecated + @Override + public Type getType() { + return super.getType(); + } + + /** + * get ArmorMaterial + * @return CompatibleArmorMaterial + */ + public CompatibleArmorMaterial getArmorMaterial() { + if (!(this.getMaterial() instanceof CompatibleArmorMaterial)) { + throw new IllegalStateException("ArmorMaterial is not CompatibleArmorMaterial"); + } + return (CompatibleArmorMaterial) this.getMaterial(); + } +} diff --git a/info.properties b/info.properties index 7b95e0339..d364431c7 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.3 +mod_version=2.0.4 maven_group=net.pitan76 \ No newline at end of file From 1c7eb22502d01bf8099b6868a4882317e9ea474a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 16 Feb 2024 22:00:50 +0900 Subject: [PATCH 255/617] add CompatibleArmorItem (2.0.4) --- .../mcpitanlib/api/item/CompatibleArmorItem.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java index 8a81fb2ba..e0fba3a48 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java @@ -6,7 +6,7 @@ public class CompatibleArmorItem extends ArmorItem implements ExtendItemProvider public final ArmorEquipmentType type; public CompatibleArmorItem(CompatibleArmorMaterial material, ArmorEquipmentType type, CompatibleItemSettings settings) { - super(material, type.getType(), settings.build()); + super(material, type.getSlot(), settings.build()); this.type = type; } @@ -18,15 +18,6 @@ public ArmorEquipmentType getArmorEquipmentType() { return type; } - /** - * @deprecated Use {@link #getArmorEquipmentType()} instead - */ - @Deprecated - @Override - public Type getType() { - return super.getType(); - } - /** * get ArmorMaterial * @return CompatibleArmorMaterial From a115c44653557b38c7b3ec0a6af4e0b886208222 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 17 Feb 2024 22:00:51 +0900 Subject: [PATCH 256/617] add APIs --- .../api/block/CompatChestBlock.java | 33 ++++ .../api/block/ExtendBlockEntityProvider.java | 15 ++ .../api/block/ExtendBlockProvider.java | 1 - .../api/client/SimpleInventoryScreen.java | 34 ++++ .../client/registry/ArchRegistryClient.java | 1 + .../client/registry/CompatRegistryClient.java | 179 ++++++++++++++++++ .../api/event/tile/TileTickEvent.java | 6 +- .../api/tile/CompatBlockEntity.java | 58 ++++++ .../api/tile/CompatChestBlockEntity.java | 58 ++++++ .../api/tile/ExtendBlockEntity.java | 45 +---- .../api/tile/ExtendBlockEntityTicker.java | 6 +- .../mcpitanlib/api/util/BlockUtil.java | 20 ++ .../pitan76/mcpitanlib/api/util/ItemUtil.java | 20 ++ .../util/client/BlockEntityRendererUtil.java | 14 ++ .../mcpitanlib/api/util/v2/BlockUtilV2.java | 20 ++ .../mcpitanlib/api/util/v2/ItemUtilV2.java | 20 ++ 16 files changed, 480 insertions(+), 50 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatChestBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatChestBlockEntity.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/BlockEntityRendererUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatChestBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatChestBlock.java new file mode 100644 index 000000000..b507732c8 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatChestBlock.java @@ -0,0 +1,33 @@ +package net.pitan76.mcpitanlib.api.block; + +import net.minecraft.block.BlockState; +import net.minecraft.block.ChestBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.block.entity.ChestBlockEntity; +import net.minecraft.util.math.BlockPos; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; + +import java.util.function.Supplier; + +public class CompatChestBlock extends ChestBlock { + public CompatChestBlock(Settings settings, Supplier> supplier) { + super(settings, supplier); + } + + /** + * @deprecated Use {@link #createBlockEntity(TileCreateEvent)} instead. + */ + @Deprecated + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return createBlockEntity(new TileCreateEvent(pos, state)); + } + + /** + * @see ExtendBlockEntityProvider#createBlockEntity(TileCreateEvent) + */ + public BlockEntity createBlockEntity(TileCreateEvent event) { + return super.createBlockEntity(event.getBlockPos(), event.getBlockState()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java index 47b1a124e..2b9481a95 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockEntityProvider.java @@ -12,11 +12,26 @@ import org.jetbrains.annotations.Nullable; public interface ExtendBlockEntityProvider extends BlockEntityProvider { + + /** + * @deprecated Use {@link #createBlockEntity(TileCreateEvent)} instead. + */ + @Deprecated @Nullable default BlockEntity createBlockEntity(BlockPos pos, BlockState state) { return createBlockEntity(new TileCreateEvent(pos, state)); } + /** + * create instance of BlockEntity + * @param event TileCreateEvent + * @return BlockEntity + * + *
{@code
+     * public BlockEntity createBlockEntity(TileCreateEvent e) {
+     *    return new ExampleBlockEntity(e); // ExampleBlockEntity extends CompatBlockEntity
+     * }
+ */ @Nullable default BlockEntity createBlockEntity(TileCreateEvent event) { if (getBlockEntityType() == null) return null; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java index 1ae252675..aa475c456 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.block; -import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java new file mode 100644 index 000000000..c8587bd0c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java @@ -0,0 +1,34 @@ +package net.pitan76.mcpitanlib.api.client; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawBackgroundArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawForegroundArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawMouseoverTooltipArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; +import net.pitan76.mcpitanlib.api.util.client.RenderUtil; + +public abstract class SimpleInventoryScreen extends SimpleHandledScreen { + + public SimpleInventoryScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + public abstract Identifier getTexture(); + + @Override + public void drawBackgroundOverride(DrawBackgroundArgs args) { + RenderUtil.setShaderToPositionTexProgram(); + RenderUtil.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + callDrawTexture(args.drawObjectDM, getTexture(), x, y, 0, 0, backgroundWidth, backgroundHeight); + } + + @Override + public void renderOverride(RenderArgs args) { + this.callRenderBackground(args); + super.renderOverride(args); + this.callDrawMouseoverTooltip(new DrawMouseoverTooltipArgs(args.drawObjectDM, args.mouseX, args.mouseY)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java index a234df103..9ee4a182d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/ArchRegistryClient.java @@ -42,6 +42,7 @@ import java.util.Random; import java.util.function.Supplier; +@Deprecated @Environment(EnvType.CLIENT) public class ArchRegistryClient { public static > void registerScreen(ScreenHandlerType type, ScreenFactory factory) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java new file mode 100644 index 000000000..a71c39e0e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -0,0 +1,179 @@ +package net.pitan76.mcpitanlib.api.client.registry; + +import dev.architectury.registry.client.level.entity.EntityRendererRegistry; +import dev.architectury.registry.client.particle.ParticleProviderRegistry; +import dev.architectury.registry.client.rendering.BlockEntityRendererRegistry; +import dev.architectury.registry.client.rendering.RenderTypeRegistry; +import dev.architectury.registry.menu.MenuRegistry; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.particle.ParticleFactory; +import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.block.BlockRenderManager; +import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.model.EntityModelLayer; +import net.minecraft.client.render.entity.model.EntityModelLoader; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.texture.Sprite; +import net.minecraft.client.texture.SpriteAtlasTexture; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.fluid.Fluid; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleType; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.random.Random; + +import java.util.List; +import java.util.function.Supplier; + +@Environment(EnvType.CLIENT) +public class CompatRegistryClient { + public static > void registerScreen(ScreenHandlerType type, ScreenFactory factory) { + MenuRegistry.registerScreenFactory(type, factory::create); + } + + public interface ScreenFactory> { + S create(H handler, PlayerInventory inventory, Text text); + } + + public static void registerParticle(ParticleType type, ParticleFactory factory) { + ParticleProviderRegistry.register(type, factory); + } + + public static void registerParticle(ParticleType type, DeferredParticleProvider provider) { + ParticleProviderRegistry.register(type, spriteSet -> provider.create(new ExtendedSpriteSet() { + @Override + public SpriteAtlasTexture getAtlas() { + return spriteSet.getAtlas(); + } + + @Override + public List getSprites() { + return spriteSet.getSprites(); + } + + @Override + public Sprite getSprite(int age, int maxAge) { + return spriteSet.getSprite(age, maxAge); + } + + @Override + public Sprite getSprite(Random random) { + return spriteSet.getSprite(random); + } + })); + } + + public static void registerEntityRenderer(Supplier> type, EntityRendererFactory provider) { + EntityRendererRegistry.register(type, provider); + } + + @FunctionalInterface + public interface DeferredParticleProvider { + ParticleFactory create(ExtendedSpriteSet spriteSet); + } + + public interface ExtendedSpriteSet extends SpriteProvider { + SpriteAtlasTexture getAtlas(); + + List getSprites(); + } + + public static void registryClientSpriteAtlasTexture(Identifier identifier) { + //registryClientSprite(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, identifier); + } + + public static void registryClientSpriteAtlasTexture(Sprite sprite) { + //registryClientSprite(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, sprite); + } + + public static void registryClientSprite(Identifier atlasId, Identifier identifier) { + // ~1.19.2 + } + + public static void registryClientSprite(Identifier atlasId, Sprite sprite) { + // ~1.19.2 + } + + public static void registerBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { + BlockEntityRendererRegistry.register(type, ctx -> provider.create(new BlockEntityRendererFactory.Context( + ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getItemRenderer(), ctx.getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() + ))); + } + + @FunctionalInterface + public interface BlockEntityRendererFactory { + BlockEntityRenderer create(Context ctx); + + class Context { + private final BlockEntityRenderDispatcher renderDispatcher; + private final BlockRenderManager renderManager; + private final ItemRenderer itemRenderer; + private final EntityRenderDispatcher entityRenderDispatcher; + private final EntityModelLoader layerRenderDispatcher; + private final TextRenderer textRenderer; + + public Context(BlockEntityRenderDispatcher renderDispatcher, BlockRenderManager renderManager, ItemRenderer itemRenderer, EntityRenderDispatcher entityRenderDispatcher, EntityModelLoader layerRenderDispatcher, TextRenderer textRenderer) { + this.renderDispatcher = renderDispatcher; + this.renderManager = renderManager; + this.itemRenderer = itemRenderer; + this.entityRenderDispatcher = entityRenderDispatcher; + this.layerRenderDispatcher = layerRenderDispatcher; + this.textRenderer = textRenderer; + } + + public BlockEntityRenderDispatcher getRenderDispatcher() { + return this.renderDispatcher; + } + + public BlockRenderManager getRenderManager() { + return this.renderManager; + } + + public EntityRenderDispatcher getEntityRenderDispatcher() { + return this.entityRenderDispatcher; + } + + public ItemRenderer getItemRenderer() { + return this.itemRenderer; + } + + public EntityModelLoader getLayerRenderDispatcher() { + return this.layerRenderDispatcher; + } + + public ModelPart getLayerModelPart(EntityModelLayer modelLayer) { + return this.layerRenderDispatcher.getModelPart(modelLayer); + } + + public TextRenderer getTextRenderer() { + return this.textRenderer; + } + } + } + + + public static void registerRenderTypeBlock(RenderLayer layer, Block block) { + RenderTypeRegistry.register(layer, block); + } + + public static void registerRenderTypeFluid(RenderLayer layer, Fluid fluid) { + RenderTypeRegistry.register(layer, fluid); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java index b3000b0d3..80f543f56 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java @@ -5,13 +5,13 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class TileTickEvent { +public class TileTickEvent { public World world; public BlockPos pos; public BlockState state; - public BlockEntity blockEntity; + public T blockEntity; - public TileTickEvent(World world, BlockPos pos, BlockState state, BlockEntity blockEntity) { + public TileTickEvent(World world, BlockPos pos, BlockState state, T blockEntity) { this.world = world; this.pos = pos; this.state = state; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java new file mode 100644 index 000000000..91120283a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java @@ -0,0 +1,58 @@ +package net.pitan76.mcpitanlib.api.tile; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.Packet; +import net.minecraft.network.listener.ClientPlayPacketListener; +import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; +import net.minecraft.util.math.BlockPos; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; +import org.jetbrains.annotations.Nullable; + +public class CompatBlockEntity extends BlockEntity { + public CompatBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + public CompatBlockEntity(BlockEntityType type, TileCreateEvent event) { + this(type, event.getBlockPos(), event.getBlockState()); + } + + @Nullable + @Override + @Deprecated + public Packet toUpdatePacket() { + switch (getUpdatePacketType().name) { + case "BLOCK_ENTITY_UPDATE_S2C": + return BlockEntityUpdateS2CPacket.create(this); + } + return super.toUpdatePacket(); + } + + public UpdatePacketType getUpdatePacketType() { + return UpdatePacketType.NONE; + } + + public void writeNbtOverride(NbtCompound nbt) { + super.writeNbt(nbt); + } + + public void readNbtOverride(NbtCompound nbt) { + super.readNbt(nbt); + } + + @Deprecated + @Override + public void writeNbt(NbtCompound nbt) { + writeNbtOverride(nbt); + } + + @Deprecated + @Override + public void readNbt(NbtCompound nbt) { + readNbtOverride(nbt); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatChestBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatChestBlockEntity.java new file mode 100644 index 000000000..77ac26416 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatChestBlockEntity.java @@ -0,0 +1,58 @@ +package net.pitan76.mcpitanlib.api.tile; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.block.entity.ChestBlockEntity; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.Packet; +import net.minecraft.network.listener.ClientPlayPacketListener; +import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; +import net.minecraft.util.math.BlockPos; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; +import org.jetbrains.annotations.Nullable; + +public class CompatChestBlockEntity extends ChestBlockEntity { + protected CompatChestBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + } + + public CompatChestBlockEntity(BlockEntityType type, TileCreateEvent event) { + this(type, event.getBlockPos(), event.getBlockState()); + } + + @Nullable + @Override + @Deprecated + public Packet toUpdatePacket() { + switch (getUpdatePacketType().name) { + case "BLOCK_ENTITY_UPDATE_S2C": + return BlockEntityUpdateS2CPacket.create(this); + } + return super.toUpdatePacket(); + } + + public UpdatePacketType getUpdatePacketType() { + return UpdatePacketType.NONE; + } + + public void writeNbtOverride(NbtCompound nbt) { + super.writeNbt(nbt); + } + + public void readNbtOverride(NbtCompound nbt) { + super.readNbt(nbt); + } + + @Deprecated + @Override + public void writeNbt(NbtCompound nbt) { + writeNbtOverride(nbt); + } + + @Deprecated + @Override + public void readNbt(NbtCompound nbt) { + readNbtOverride(nbt); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java index 9f1ca8651..01ea4f2e2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntity.java @@ -1,21 +1,15 @@ package net.pitan76.mcpitanlib.api.tile; import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.network.Packet; -import net.minecraft.network.listener.ClientPlayPacketListener; -import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; -import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; import net.pitan76.mcpitanlib.api.world.ExtendWorld; -import org.jetbrains.annotations.Nullable; -public class ExtendBlockEntity extends BlockEntity { +public class ExtendBlockEntity extends CompatBlockEntity { public ExtendWorld world; + public ExtendBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } @@ -24,41 +18,6 @@ public ExtendBlockEntity(BlockEntityType type, TileCreateEvent event) { this(type, event.getBlockPos(), event.getBlockState()); } - @Nullable - @Override - @Deprecated - public Packet toUpdatePacket() { - switch (getUpdatePacketType().name) { - case "BLOCK_ENTITY_UPDATE_S2C": - return BlockEntityUpdateS2CPacket.create(this); - } - return super.toUpdatePacket(); - } - - public UpdatePacketType getUpdatePacketType() { - return UpdatePacketType.NONE; - } - - public void writeNbtOverride(NbtCompound nbt) { - super.writeNbt(nbt); - } - - public void readNbtOverride(NbtCompound nbt) { - super.readNbt(nbt); - } - - @Deprecated - @Override - public void writeNbt(NbtCompound nbt) { - writeNbtOverride(nbt); - } - - @Deprecated - @Override - public void readNbt(NbtCompound nbt) { - readNbtOverride(nbt); - } - @Override public void setWorld(World world) { super.setWorld(world); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java index d5c0edda9..8bce6ee96 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/ExtendBlockEntityTicker.java @@ -9,9 +9,9 @@ public interface ExtendBlockEntityTicker extends BlockEntityTicker { @Override - default void tick(World world, BlockPos pos, BlockState state, BlockEntity blockEntity) { - tick(new TileTickEvent(world, pos, state, blockEntity)); + default void tick(World world, BlockPos pos, BlockState state, T blockEntity) { + tick(new TileTickEvent<>(world, pos, state, blockEntity)); } - void tick(TileTickEvent event); + void tick(TileTickEvent event); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java index f464ea938..35d230b53 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java @@ -197,4 +197,24 @@ public static List getBlocks(String id) { public static List getBlocks(String id, List blocks) { return BlockUtilV2.getBlocks(id, blocks); } + + /** + * Check if the block is in the tag. + * @param block Block to check. + * @param identifier Identifier of the tag. + * @return If the block is in the tag. + */ + public static boolean isBlockInTag(Block block, Identifier identifier) { + return BlockUtilV2.isBlockInTag(block, identifier); + } + + /** + * Check if the block is in the tag. + * @param block Block to check. + * @param id String of the tag. + * @return If the block is in the tag. + */ + public static boolean isBlockInTag(Block block, String id) { + return BlockUtilV2.isBlockInTag(block, id); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java index 8fb88bdf0..d584e1e18 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java @@ -212,4 +212,24 @@ public static List getItems(String id) { public static List getItems(String id, List items) { return ItemUtilV2.getItems(id, items); } + + /** + * Check if the item is in the tag. + * @param item Item to check. + * @param identifier Identifier of the tag. + * @return If the item is in the tag. + */ + public static boolean isItemInTag(Item item, Identifier identifier) { + return ItemUtilV2.isItemInTag(item, identifier); + } + + /** + * Check if the item is in the tag. + * @param item Item to check. + * @param id String of the tag. + * @return If the item is in the tag. + */ + public static boolean isItemInTag(Item item, String id) { + return ItemUtilV2.isItemInTag(item, id); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/BlockEntityRendererUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/BlockEntityRendererUtil.java new file mode 100644 index 000000000..a6481e5e5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/BlockEntityRendererUtil.java @@ -0,0 +1,14 @@ +package net.pitan76.mcpitanlib.api.util.client; + +import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; +import net.pitan76.mcpitanlib.api.client.registry.CompatRegistryClient; + +public class BlockEntityRendererUtil { + public static BlockEntityRendererFactory.Context convert(CompatRegistryClient.BlockEntityRendererFactory.Context ctx) { + return new BlockEntityRendererFactory.Context(ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getItemRenderer(), ctx.getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer()); + } + + public static CompatRegistryClient.BlockEntityRendererFactory.Context convert(BlockEntityRendererFactory.Context ctx) { + return new CompatRegistryClient.BlockEntityRendererFactory.Context(ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getItemRenderer(), ctx.getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java index a3d771a06..2b3c9fa6a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java @@ -91,4 +91,24 @@ public static List getBlocks(String id) { public static List getBlocks(String id, List blocks) { return getBlocks(new Identifier(id), blocks); } + + /** + * Check if the block is in the tag. + * @param block Block to check. + * @param identifier Identifier of the tag. + * @return If the block is in the tag. + */ + public static boolean isBlockInTag(Block block, Identifier identifier) { + return BlockUtil.isIn(block, (TagKey) TagKey.create(TagKey.Type.BLOCK, identifier)); + } + + /** + * Check if the block is in the tag. + * @param block Block to check. + * @param id String of the tag. + * @return If the block is in the tag. + */ + public static boolean isBlockInTag(Block block, String id) { + return isBlockInTag(block, new Identifier(id)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java index ff8ded40b..d65ee69fc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/ItemUtilV2.java @@ -70,4 +70,24 @@ public static List getItems(String id) { public static List getItems(String id, List items) { return getItems(new Identifier(id), items); } + + /** + * Check if the item is in the tag. + * @param item Item to check. + * @param identifier Identifier of the tag. + * @return True if the item is in the tag. + */ + public static boolean isItemInTag(Item item, Identifier identifier) { + return ItemUtil.isIn(item, (TagKey) TagKey.create(TagKey.Type.ITEM, identifier)); + } + + /** + * Check if the item is in the tag. + * @param item Item to check. + * @param id String of the tag. + * @return True if the item is in the tag. + */ + public static boolean isItemInTag(Item item, String id) { + return isItemInTag(item, new Identifier(id)); + } } From 87dfea190c5d558d7158a5fe0b170c3292716c01 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 17 Feb 2024 22:12:27 +0900 Subject: [PATCH 257/617] 1182 --- .../mcpitanlib/api/client/registry/CompatRegistryClient.java | 4 ++-- .../mcpitanlib/api/util/client/BlockEntityRendererUtil.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index a71c39e0e..a64faecf9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -37,9 +37,9 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.minecraft.util.math.random.Random; import java.util.List; +import java.util.Random; import java.util.function.Supplier; @Environment(EnvType.CLIENT) @@ -113,7 +113,7 @@ public static void registryClientSprite(Identifier atlasId, Sprite sprite) { public static void registerBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { BlockEntityRendererRegistry.register(type, ctx -> provider.create(new BlockEntityRendererFactory.Context( - ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getItemRenderer(), ctx.getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() + ctx.getRenderDispatcher(), ctx.getRenderManager(), null, null, ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() ))); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/BlockEntityRendererUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/BlockEntityRendererUtil.java index a6481e5e5..948e43e46 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/BlockEntityRendererUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/BlockEntityRendererUtil.java @@ -5,10 +5,10 @@ public class BlockEntityRendererUtil { public static BlockEntityRendererFactory.Context convert(CompatRegistryClient.BlockEntityRendererFactory.Context ctx) { - return new BlockEntityRendererFactory.Context(ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getItemRenderer(), ctx.getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer()); + return new BlockEntityRendererFactory.Context(ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer()); } public static CompatRegistryClient.BlockEntityRendererFactory.Context convert(BlockEntityRendererFactory.Context ctx) { - return new CompatRegistryClient.BlockEntityRendererFactory.Context(ctx.getRenderDispatcher(), ctx.getRenderManager(), ctx.getItemRenderer(), ctx.getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer()); + return new CompatRegistryClient.BlockEntityRendererFactory.Context(ctx.getRenderDispatcher(), ctx.getRenderManager(), null, null, ctx.getLayerRenderDispatcher(), ctx.getTextRenderer()); } } From 777526d2212273e98b9c45624520ea86e89f4465 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 17 Feb 2024 22:57:57 +0900 Subject: [PATCH 258/617] fix apis --- .../mcpitanlib/api/event/item/CraftEvent.java | 21 +++++++++++++++++++ .../resources/mcpitanlib-common.mixins.json | 1 - .../mcpitanlib/fabric}/mixin/RecipeMixin.java | 2 +- .../src/main/resources/mcpitanlib.mixins.json | 2 +- info.properties | 2 +- 5 files changed, 24 insertions(+), 4 deletions(-) rename {common/src/main/java/net/pitan76/mcpitanlib => fabric/src/main/java/net/pitan76/mcpitanlib/fabric}/mixin/RecipeMixin.java (96%) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CraftEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CraftEvent.java index 6281f4248..a80abdbba 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CraftEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CraftEvent.java @@ -1,12 +1,28 @@ package net.pitan76.mcpitanlib.api.event.item; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import org.jetbrains.annotations.Nullable; public class CraftEvent { public ItemStack stack; public World world; + public Player player; + + public CraftEvent(ItemStack stack, World world, Player player) { + this.stack = stack; + this.world = world; + this.player = player; + } + + public CraftEvent(ItemStack stack, World world, PlayerEntity player) { + this.stack = stack; + this.world = world; + this.player = new Player(player); + } public CraftEvent(ItemStack stack, World world) { this.stack = stack; @@ -21,6 +37,11 @@ public World getWorld() { return world; } + @Nullable + public Player getPlayer() { + return player; + } + public boolean isClient() { return world.isClient(); } diff --git a/common/src/main/resources/mcpitanlib-common.mixins.json b/common/src/main/resources/mcpitanlib-common.mixins.json index c255e797f..6dad93704 100644 --- a/common/src/main/resources/mcpitanlib-common.mixins.json +++ b/common/src/main/resources/mcpitanlib-common.mixins.json @@ -11,7 +11,6 @@ "ItemUsageContextMixin", "MinecraftServerTimer", "RecipeManagerMixin", - "RecipeMixin", "ServerWorldTimer" ], "client": [ diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeMixin.java b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java similarity index 96% rename from common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeMixin.java rename to fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java index 8c06e793a..f16705691 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeMixin.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/mixin/RecipeMixin.java @@ -1,4 +1,4 @@ -package net.pitan76.mcpitanlib.mixin; +package net.pitan76.mcpitanlib.fabric.mixin; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; diff --git a/fabric/src/main/resources/mcpitanlib.mixins.json b/fabric/src/main/resources/mcpitanlib.mixins.json index d4b92ebd9..0a36c5829 100644 --- a/fabric/src/main/resources/mcpitanlib.mixins.json +++ b/fabric/src/main/resources/mcpitanlib.mixins.json @@ -4,7 +4,7 @@ "package": "net.pitan76.mcpitanlib.fabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ - + "RecipeMixin" ], "client": [ ], diff --git a/info.properties b/info.properties index d364431c7..e70cdca41 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.4 +mod_version=2.0.5 maven_group=net.pitan76 \ No newline at end of file From 711c7303bd406a845589386118040da2d9db5d20 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 17 Feb 2024 22:58:41 +0900 Subject: [PATCH 259/617] oncraft player --- .../main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index 1c916e340..040a1274a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -67,7 +67,7 @@ public void appendTooltip(ItemStack stack, @Nullable World world, List too @Deprecated @Override public void onCraft(ItemStack stack, World world, PlayerEntity player) { - onCraft(new CraftEvent(stack, world)); + onCraft(new CraftEvent(stack, world, player)); } /** From 4faee99909d8fe0bb8fbcc5ad5e4f485ec58458a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:46:22 +0900 Subject: [PATCH 260/617] add APIs --- .../mcpitanlib/api/gen/OreRegistry.java | 42 +++++++ .../api/item/CompatibleItemSettings.java | 15 ++- .../api/item/CreativeTabBuilder.java | 21 +++- .../mcpitanlib/api/item/ExtendSettings.java | 4 + .../api/registry/CompatRegistry.java | 16 ++- .../api/registry/WorldGenRegistry.java | 107 ++++++++++++++++++ .../api/util/FeatureConfigUtil.java | 81 +++++++++++++ .../mcpitanlib/api/util/PlacedFutureUtil.java | 35 ++++++ .../core/registry/MCPLRegistry1_20.java | 17 ++- 9 files changed, 329 insertions(+), 9 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gen/OreRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/FeatureConfigUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gen/OreRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gen/OreRegistry.java new file mode 100644 index 000000000..f1ce3ec98 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gen/OreRegistry.java @@ -0,0 +1,42 @@ +package net.pitan76.mcpitanlib.api.gen; + +import net.minecraft.block.Block; +import net.minecraft.util.Identifier; +import net.minecraft.world.gen.GenerationStep; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.PlacedFeature; +import net.pitan76.mcpitanlib.api.registry.WorldGenRegistry; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.api.util.BlockUtil; +import net.pitan76.mcpitanlib.api.util.FeatureConfigUtil; +import net.pitan76.mcpitanlib.api.util.PlacedFutureUtil; + +@Deprecated +public class OreRegistry { + /** + * Generating custom ore in stone + * @param registry WorldGenRegistry + * @param block Block + * @param size Ore size + * @param height generating height + * @param count generating count per chunk + * @return Identifier of feature + */ + public static Identifier registerStoneOre(WorldGenRegistry registry, Block block, int size, int height, int count) { + Identifier identifier = BlockUtil.toID(block).withSuffixedPath("_ore_feature"); + RegistryResult> configuredFuture = registry.registerFeature(identifier, + () -> FeatureConfigUtil.createConfiguredFeature( + FeatureConfigUtil.createStoneOreFeatureConfig(block.getDefaultState(), size) + ) + ); + + RegistryResult placedFeature = registry.registerPlacedFeature(identifier, + () -> PlacedFutureUtil.create(configuredFuture.getOrNull(), + PlacedFutureUtil.createPlacementModifiers(count, height) + ) + ); + + WorldGenRegistry.addProperties(GenerationStep.Feature.UNDERGROUND_DECORATION, placedFeature); + return identifier; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index 10311f23f..b24588bb4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -1,16 +1,20 @@ package net.pitan76.mcpitanlib.api.item; +import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; +import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; import java.util.function.Supplier; public class CompatibleItemSettings { private final ExtendSettings settings = new ExtendSettings(); + protected Identifier itemGroupId = null; + public static CompatibleItemSettings of() { return new CompatibleItemSettings(); } @@ -30,11 +34,17 @@ public CompatibleItemSettings addGroup(ItemGroup itemGroup, Identifier identifie return this; } + @Deprecated public CompatibleItemSettings addGroup(Supplier itemGroup, Identifier identifier) { settings.addGroup(itemGroup, identifier); return this; } + public CompatibleItemSettings addGroup(CreativeTabBuilder itemGroup) { + this.itemGroupId = itemGroup.getIdentifier(); + return this; + } + public CompatibleItemSettings maxCount(int maxCount) { settings.maxCount(maxCount); return this; @@ -66,7 +76,10 @@ public CompatibleItemSettings recipeRemainder(Item recipeRemainder) { } public ExtendSettings build() { + if (itemGroupId != null) { + RegistrySupplier itemGroup = MCPLRegistry1_20.REGISTRY_SUPPLIER_ITEM_GROUP_CACHE.get(itemGroupId); + settings.arch$tab(itemGroup); + } return settings; - } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java index 84e43149d..6d9df3dbf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java @@ -7,10 +7,11 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import java.util.HashMap; +import java.util.Map; import java.util.function.Supplier; public class CreativeTabBuilder { - private final Identifier identifier; private Text displayName = null; private Supplier iconSupplier = null; @@ -34,11 +35,21 @@ public CreativeTabBuilder setDisplayName(Text text) { return this; } + /** + * Set icon + * @param iconSupplier Icon supplier + * @return CreativeTabBuilder + */ public CreativeTabBuilder setIcon(Supplier iconSupplier) { this.iconSupplier = iconSupplier; return this; } + /** + * Set icon (Already registered item only) + * @param item Item + * @return CreativeTabBuilder + */ public CreativeTabBuilder setIcon(Item item) { return setIcon(() -> new ItemStack(item)); } @@ -59,6 +70,10 @@ public void setTexture(String texture) { this.texture = texture; } + /** + * Build ItemGroup (If loader is forge, not recommended) + * @return ItemGroup + */ public ItemGroup build() { ItemGroup itemGroup = CreativeTabRegistry.create(identifier, iconSupplier); if (displayName != null) itemGroup.setName(displayName.getString()); @@ -68,4 +83,8 @@ public ItemGroup build() { if (texture != null) itemGroup.setTexture(texture); return itemGroup; } + + public Identifier getIdentifier() { + return identifier; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java index eb9f8fe7a..55a527e1a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java @@ -6,6 +6,9 @@ import java.util.function.Supplier; +/** + * Use {@link CompatibleItemSettings} instead. + */ public class ExtendSettings extends Item.Settings { // ~1.19.2 @@ -23,6 +26,7 @@ public ExtendSettings addGroup(ItemGroup itemGroup, Identifier identifier) { return addGroup(itemGroup); } + @Deprecated public ExtendSettings addGroup(Supplier itemGroup, Identifier identifier) { addGroup(itemGroup.get()); return this; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index 6aa557b8e..b5e1843e4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -17,6 +17,7 @@ import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; import net.pitan76.mcpitanlib.api.gui.ExtendedScreenHandlerTypeBuilder; import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; import net.pitan76.mcpitanlib.api.item.CreativeTabManager; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; import net.pitan76.mcpitanlib.api.util.BlockUtil; @@ -29,8 +30,11 @@ public class CompatRegistry { - private final MCPLRegistry mcplr; - private final MCPLRegistry1_20 mcplr1_20; + protected final MCPLRegistry mcplr; + protected final MCPLRegistry1_20 mcplr1_20; + protected final WorldGenRegistry worldGenRegistry; + + protected String MOD_ID; /** * @deprecated Use {@link #createRegistry(String)} instead @@ -38,7 +42,9 @@ public class CompatRegistry { @Deprecated public CompatRegistry(String MOD_ID) { mcplr = new MCPLRegistry(MOD_ID); - mcplr1_20 = new MCPLRegistry1_20(mcplr); + mcplr1_20 = new MCPLRegistry1_20(mcplr, MOD_ID); + worldGenRegistry = new WorldGenRegistry(MOD_ID); + this.MOD_ID = MOD_ID; } /** @@ -114,6 +120,10 @@ public RegistryResult registerItemGroup(Identifier id, Supplier(null); } + public RegistryResult registerItemGroup(Identifier id, CreativeTabBuilder builder) { + return new RegistryResult<>(mcplr1_20.registryItemGroup(id, builder)); + } + public static void registerFuel(int time, ItemConvertible... item) { FuelRegistry.register(time, item); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java new file mode 100644 index 000000000..4a4071011 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java @@ -0,0 +1,107 @@ +package net.pitan76.mcpitanlib.api.registry; + +import dev.architectury.registry.level.biome.BiomeModifications; +import dev.architectury.registry.registries.DeferredRegister; +import dev.architectury.registry.registries.RegistrySupplier; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.util.Identifier; +import net.minecraft.world.gen.GenerationStep; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.PlacedFeature; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; + +import java.util.function.Supplier; + +public class WorldGenRegistry { + protected String MOD_ID; + + protected DeferredRegister> CONFIGURED_FEATURE; + protected DeferredRegister PLACED_FEATURE; + + @Deprecated + public WorldGenRegistry(String MOD_ID) { + this.MOD_ID = MOD_ID; + CONFIGURED_FEATURE = DeferredRegister.create(MOD_ID, RegistryKeys.CONFIGURED_FEATURE); + PLACED_FEATURE = DeferredRegister.create(MOD_ID, RegistryKeys.PLACED_FEATURE); + } + + /** + * Create a new CompatRegistry + * @param MOD_ID The mod id + * @return The new CompatRegistry + */ + public static WorldGenRegistry createRegistry(String MOD_ID) { + return new WorldGenRegistry(MOD_ID); + } + + public static WorldGenRegistry createRegistry(CompatRegistry registry) { + return registry.worldGenRegistry; + } + + /** + * Register a configured feature + * @param id The id of the configured feature + * @param supplier The supplier of the configured feature + * @return The result of the registration + */ + public RegistryResult> registerFeature(Identifier id, Supplier> supplier) { + RegistrySupplier> feature = CONFIGURED_FEATURE.register(id, supplier); + return new RegistryResult<>(feature); + } + + /** + * Register a placed feature + * @param id The id of the placed feature + * @param supplier The supplier of the placed feature + * @return The result of the registration + */ + public RegistryResult registerPlacedFeature(Identifier id, Supplier supplier) { + RegistrySupplier feature = PLACED_FEATURE.register(id, supplier); + return new RegistryResult<>(feature); + } + + /** + * Replace the properties of a biome + * @param decoration The decoration step + * @param feature The feature to replace + */ + public static void replaceProperties(GenerationStep.Feature decoration, RegistrySupplier feature) { + BiomeModifications.replaceProperties((ctx, mutable) -> mutable.getGenerationProperties().addFeature(decoration, feature)); + } + + public static void replaceProperties(GenerationStep.Feature decoration, RegistryResult feature) { + replaceProperties(decoration, feature.supplier); + } + + /** + * Replace the properties of a biome + * @param decoration The decoration step + * @param feature The feature to replace + */ + public static void replaceProperties(GenerationStep.Feature decoration, PlacedFeature feature) { + BiomeModifications.replaceProperties((ctx, mutable) -> mutable.getGenerationProperties().addFeature(decoration, RegistryEntry.of(feature))); + } + + /** + * Add a feature to the biome properties + * @param decoration The decoration step + * @param feature The feature to add + */ + public static void addProperties(GenerationStep.Feature decoration, RegistrySupplier feature) { + BiomeModifications.addProperties((ctx, mutable) -> mutable.getGenerationProperties().addFeature(decoration, feature)); + } + + public static void addProperties(GenerationStep.Feature decoration, RegistryResult feature) { + addProperties(decoration, feature.supplier); + } + + /** + * Add a feature to the biome properties + * @param decoration The decoration step + * @param feature The feature to add + */ + public static void addProperties(GenerationStep.Feature decoration, PlacedFeature feature) { + BiomeModifications.addProperties((ctx, mutable) -> mutable.getGenerationProperties().addFeature(decoration, RegistryEntry.of(feature))); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FeatureConfigUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FeatureConfigUtil.java new file mode 100644 index 000000000..5b2a4a017 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FeatureConfigUtil.java @@ -0,0 +1,81 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.registry.tag.BlockTags; +import net.minecraft.structure.rule.RuleTest; +import net.minecraft.structure.rule.TagMatchRuleTest; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.OreFeatureConfig; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class FeatureConfigUtil { + + /** + * Create a new ConfiguredFeature + * @param oreFeatureConfig The ore feature config + * @return The new ConfiguredFeature + */ + public static ConfiguredFeature createConfiguredFeature(OreFeatureConfig oreFeatureConfig) { + return new ConfiguredFeature<>(Feature.ORE, oreFeatureConfig); + } + + /** + * Create a new OreFeatureConfig + * @param test The rule test + * @param state The block state + * @param size The size + * @return The new OreFeatureConfig + */ + public static OreFeatureConfig createOreFeatureConfig(RuleTest test, BlockState state, int size) { + return new OreFeatureConfig(test, state, size); + } + + /** + * Create a new OreFeatureConfig + * @param test The rule test + * @param block The block + * @param size The size + * @return The new OreFeatureConfig + */ + public static OreFeatureConfig createOreFeatureConfig(RuleTest test, Block block, int size) { + return createOreFeatureConfig(test, block.getDefaultState(), size); + } + + /** + * Create a new OreFeatureConfig + * @param targets The targets + * @param size The size + * @return The new OreFeatureConfig + */ + public static OreFeatureConfig createOreFeatureConfig(List targets, int size) { + return new OreFeatureConfig(targets, size); + } + + /** + * Create a new OreFeatureConfig + * @param targetMap The target map + * @param size The size + * @return The new OreFeatureConfig + */ + public static OreFeatureConfig createOreFeatureConfig(Map targetMap, int size) { + List targets = new ArrayList<>(); + targetMap.forEach((ruleTest, blockState) -> targets.add(OreFeatureConfig.createTarget(ruleTest, blockState))); + return createOreFeatureConfig(targets, size); + } + + /** + * Create a new OreFeatureConfig + * @param state The block state + * @param size The size + * @return The new OreFeatureConfig + */ + public static OreFeatureConfig createStoneOreFeatureConfig(BlockState state, int size) { + RuleTest ruleTest = new TagMatchRuleTest(BlockTags.BASE_STONE_OVERWORLD); + return createOreFeatureConfig(ruleTest, state, size); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java new file mode 100644 index 000000000..ffed05079 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.world.gen.YOffset; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.PlacedFeature; +import net.minecraft.world.gen.placementmodifier.*; + +import java.util.List; + +public class PlacedFutureUtil { + public static PlacedFeature create(ConfiguredFeature configuredFeature, List placementModifiers) { + return new PlacedFeature(RegistryEntry.of(configuredFeature), placementModifiers); + } + + public static List createPlacementModifiers(CountPlacementModifier countPlacementModifier, SquarePlacementModifier squarePlacementModifier, HeightRangePlacementModifier heightRangePlacementModifier) { + return List.of(countPlacementModifier, squarePlacementModifier, heightRangePlacementModifier); + } + + public static List createPlacementModifiers(int chunkCount, int top, int bottom) { + return createPlacementModifiers( +CountPlacementModifier.of(chunkCount), + SquarePlacementModifier.of(), + HeightRangePlacementModifier.uniform(YOffset.fixed(bottom), YOffset.fixed(top)) + ); + } + + public static List createPlacementModifiers(int chunkCount, int top) { + return createPlacementModifiers( + CountPlacementModifier.of(chunkCount), + SquarePlacementModifier.of(), + HeightRangePlacementModifier.uniform(YOffset.getBottom(), YOffset.fixed(top)) + ); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java index d3ebdeb47..476b103df 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java @@ -3,22 +3,31 @@ import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.item.ItemGroup; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; +import java.util.HashMap; +import java.util.Map; import java.util.function.Supplier; @Deprecated public class MCPLRegistry1_20 { - private final MCPLRegistry mcplr; + @Deprecated + public static final Map> REGISTRY_SUPPLIER_ITEM_GROUP_CACHE = new HashMap<>(); - //public Registrar ITEM_GROUP; + private final MCPLRegistry mcplr; + //protected DeferredRegister ITEM_GROUP; - public MCPLRegistry1_20(MCPLRegistry mcplr) { + public MCPLRegistry1_20(MCPLRegistry mcplr, String MOD_ID) { this.mcplr = mcplr; - //ITEM_GROUP = mcplr.REGISTRIES.get().get(RegistryKeys.ITEM_GROUP); + //ITEM_GROUP = DeferredRegister.create(MOD_ID, RegistryKeys.ITEM_GROUP); } public RegistrySupplier registryItemGroup(Identifier id, Supplier supplier) { return null; } + + public RegistrySupplier registryItemGroup(Identifier id, CreativeTabBuilder builder) { + return null; + } } From c903d518f79dd649b1ee47099e3ee026c3adcaad Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:46:46 +0900 Subject: [PATCH 261/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index e70cdca41..220a1c255 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.5 +mod_version=2.0.6 maven_group=net.pitan76 \ No newline at end of file From b76f57c9f849baa5429154cb0d084e55d5fd72a2 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:49:48 +0900 Subject: [PATCH 262/617] 1201 --- .../net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java index 4a4071011..b670c5802 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java @@ -67,7 +67,7 @@ public RegistryResult registerPlacedFeature(Identifier id, Suppli * @param feature The feature to replace */ public static void replaceProperties(GenerationStep.Feature decoration, RegistrySupplier feature) { - BiomeModifications.replaceProperties((ctx, mutable) -> mutable.getGenerationProperties().addFeature(decoration, feature)); + BiomeModifications.replaceProperties((ctx, mutable) -> mutable.getGenerationProperties().addFeature(decoration, RegistryEntry.of(feature.getOrNull()))); } public static void replaceProperties(GenerationStep.Feature decoration, RegistryResult feature) { @@ -89,7 +89,7 @@ public static void replaceProperties(GenerationStep.Feature decoration, PlacedFe * @param feature The feature to add */ public static void addProperties(GenerationStep.Feature decoration, RegistrySupplier feature) { - BiomeModifications.addProperties((ctx, mutable) -> mutable.getGenerationProperties().addFeature(decoration, feature)); + BiomeModifications.addProperties((ctx, mutable) -> mutable.getGenerationProperties().addFeature(decoration, RegistryEntry.of(feature.getOrNull()))); } public static void addProperties(GenerationStep.Feature decoration, RegistryResult feature) { From a92031cfabc6b967f17176d482927c83f4438d0a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 19 Feb 2024 16:09:28 +0900 Subject: [PATCH 263/617] 1192 --- .../mcpitanlib/api/gen/OreRegistry.java | 5 +++-- .../api/item/CompatibleItemSettings.java | 4 ++-- .../api/item/CreativeTabBuilder.java | 5 +++++ .../api/registry/WorldGenRegistry.java | 19 +++++++++++-------- .../api/util/FeatureConfigUtil.java | 5 ++--- .../mcpitanlib/api/util/PlacedFutureUtil.java | 2 +- .../core/registry/MCPLRegistry1_20.java | 4 ++-- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gen/OreRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gen/OreRegistry.java index f1ce3ec98..c6aea2a7a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gen/OreRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gen/OreRegistry.java @@ -23,7 +23,8 @@ public class OreRegistry { * @return Identifier of feature */ public static Identifier registerStoneOre(WorldGenRegistry registry, Block block, int size, int height, int count) { - Identifier identifier = BlockUtil.toID(block).withSuffixedPath("_ore_feature"); + Identifier blockId = BlockUtil.toID(block); + Identifier identifier = new Identifier(blockId.getNamespace(), blockId.getPath() + "_ore_feature"); RegistryResult> configuredFuture = registry.registerFeature(identifier, () -> FeatureConfigUtil.createConfiguredFeature( FeatureConfigUtil.createStoneOreFeatureConfig(block.getDefaultState(), size) @@ -36,7 +37,7 @@ public static Identifier registerStoneOre(WorldGenRegistry registry, Block block ) ); - WorldGenRegistry.addProperties(GenerationStep.Feature.UNDERGROUND_DECORATION, placedFeature); + WorldGenRegistry.addProperties(GenerationStep.Feature.UNDERGROUND_ORES, placedFeature); return identifier; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index b24588bb4..7f920cb4a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -77,8 +77,8 @@ public CompatibleItemSettings recipeRemainder(Item recipeRemainder) { public ExtendSettings build() { if (itemGroupId != null) { - RegistrySupplier itemGroup = MCPLRegistry1_20.REGISTRY_SUPPLIER_ITEM_GROUP_CACHE.get(itemGroupId); - settings.arch$tab(itemGroup); + if (CreativeTabBuilder.itemGroupMap.containsKey(itemGroupId)) + settings.addGroup(CreativeTabBuilder.itemGroupMap.get(itemGroupId)); } return settings; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java index 6d9df3dbf..6acad9727 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java @@ -12,6 +12,9 @@ import java.util.function.Supplier; public class CreativeTabBuilder { + @Deprecated + public static final Map itemGroupMap = new HashMap<>(); + private final Identifier identifier; private Text displayName = null; private Supplier iconSupplier = null; @@ -75,12 +78,14 @@ public void setTexture(String texture) { * @return ItemGroup */ public ItemGroup build() { + if (itemGroupMap.containsKey(identifier)) return itemGroupMap.get(identifier); ItemGroup itemGroup = CreativeTabRegistry.create(identifier, iconSupplier); if (displayName != null) itemGroup.setName(displayName.getString()); if (noRenderedName) itemGroup.setName(""); if (noScrollbar) itemGroup.setNoScrollbar(); if (special) itemGroup.isSpecial(); if (texture != null) itemGroup.setTexture(texture); + itemGroupMap.put(identifier, itemGroup); return itemGroup; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java index b670c5802..7a587f12f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/WorldGenRegistry.java @@ -3,9 +3,10 @@ import dev.architectury.registry.level.biome.BiomeModifications; import dev.architectury.registry.registries.DeferredRegister; import dev.architectury.registry.registries.RegistrySupplier; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.util.Identifier; +import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryEntry; import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.PlacedFeature; @@ -22,8 +23,8 @@ public class WorldGenRegistry { @Deprecated public WorldGenRegistry(String MOD_ID) { this.MOD_ID = MOD_ID; - CONFIGURED_FEATURE = DeferredRegister.create(MOD_ID, RegistryKeys.CONFIGURED_FEATURE); - PLACED_FEATURE = DeferredRegister.create(MOD_ID, RegistryKeys.PLACED_FEATURE); + //CONFIGURED_FEATURE = DeferredRegister.create(MOD_ID, BuiltinRegistries.CONFIGURED_FEATURE); + //PLACED_FEATURE = DeferredRegister.create(MOD_ID, BuiltinRegistries.PLACED_FEATURE); } /** @@ -46,8 +47,9 @@ public static WorldGenRegistry createRegistry(CompatRegistry registry) { * @return The result of the registration */ public RegistryResult> registerFeature(Identifier id, Supplier> supplier) { - RegistrySupplier> feature = CONFIGURED_FEATURE.register(id, supplier); - return new RegistryResult<>(feature); + ConfiguredFeature feature = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, supplier.get()); + //CONFIGURED_FEATURE.register(id, supplier); + return new RegistryResult<>(null); } /** @@ -57,8 +59,9 @@ public static WorldGenRegistry createRegistry(CompatRegistry registry) { * @return The result of the registration */ public RegistryResult registerPlacedFeature(Identifier id, Supplier supplier) { - RegistrySupplier feature = PLACED_FEATURE.register(id, supplier); - return new RegistryResult<>(feature); + PlacedFeature feature = Registry.register(BuiltinRegistries.PLACED_FEATURE, id, supplier.get()); + //RegistrySupplier feature = PLACED_FEATURE.register(id, supplier); + return new RegistryResult<>(null); } /** diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FeatureConfigUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FeatureConfigUtil.java index 5b2a4a017..f82a8ce3c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FeatureConfigUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FeatureConfigUtil.java @@ -2,11 +2,10 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.registry.tag.BlockTags; import net.minecraft.structure.rule.RuleTest; -import net.minecraft.structure.rule.TagMatchRuleTest; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.OreConfiguredFeatures; import net.minecraft.world.gen.feature.OreFeatureConfig; import java.util.ArrayList; @@ -75,7 +74,7 @@ public static OreFeatureConfig createOreFeatureConfig(Map * @return The new OreFeatureConfig */ public static OreFeatureConfig createStoneOreFeatureConfig(BlockState state, int size) { - RuleTest ruleTest = new TagMatchRuleTest(BlockTags.BASE_STONE_OVERWORLD); + RuleTest ruleTest = OreConfiguredFeatures.STONE_ORE_REPLACEABLES; return createOreFeatureConfig(ruleTest, state, size); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java index ffed05079..b5b0c82f1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.api.util; -import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.util.registry.RegistryEntry; import net.minecraft.world.gen.YOffset; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.PlacedFeature; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java index 476b103df..c21c9c656 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java @@ -11,8 +11,8 @@ @Deprecated public class MCPLRegistry1_20 { - @Deprecated - public static final Map> REGISTRY_SUPPLIER_ITEM_GROUP_CACHE = new HashMap<>(); + //@Deprecated + //public static final Map> REGISTRY_SUPPLIER_ITEM_GROUP_CACHE = new HashMap<>(); private final MCPLRegistry mcplr; From a00da57ca333d607025da20cc2d93a231af032d3 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 19 Feb 2024 17:09:30 +0900 Subject: [PATCH 264/617] fix apis --- .../pitan76/mcpitanlib/api/item/CompatibleItemSettings.java | 3 --- .../java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java | 3 --- .../mcpitanlib/api/item/tool/CompatibleToolMaterial.java | 3 ++- .../net/pitan76/mcpitanlib/api/registry/CompatRegistry.java | 2 ++ .../pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java | 4 ++++ info.properties | 2 +- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index 7f920cb4a..f2d238a70 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -20,7 +20,6 @@ public static CompatibleItemSettings of() { } // ~1.19.2 - @Deprecated public CompatibleItemSettings addGroup(ItemGroup itemGroup) { settings.addGroup(itemGroup); return this; @@ -28,13 +27,11 @@ public CompatibleItemSettings addGroup(ItemGroup itemGroup) { // 1.19.3~ // identifier: Item ID - @Deprecated public CompatibleItemSettings addGroup(ItemGroup itemGroup, Identifier identifier) { settings.addGroup(itemGroup, identifier); return this; } - @Deprecated public CompatibleItemSettings addGroup(Supplier itemGroup, Identifier identifier) { settings.addGroup(itemGroup, identifier); return this; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java index 55a527e1a..d869ce3da 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendSettings.java @@ -12,7 +12,6 @@ public class ExtendSettings extends Item.Settings { // ~1.19.2 - @Deprecated public ExtendSettings addGroup(ItemGroup itemGroup) { super.group(itemGroup); return this; @@ -20,13 +19,11 @@ public ExtendSettings addGroup(ItemGroup itemGroup) { // 1.19.3~ // identifier: Item ID - @Deprecated public ExtendSettings addGroup(ItemGroup itemGroup, Identifier identifier) { //CreativeTabRegistry.append(itemGroup, ItemUtil.fromId(identifier)); return addGroup(itemGroup); } - @Deprecated public ExtendSettings addGroup(Supplier itemGroup, Identifier identifier) { addGroup(itemGroup.get()); return this; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java index 22631df08..9d0e28410 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java @@ -3,4 +3,5 @@ import net.minecraft.item.ToolMaterial; public interface CompatibleToolMaterial extends ToolMaterial { -} + +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index b5e1843e4..73d4e0d38 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -132,6 +132,8 @@ public void allRegister() { // 1.16 Register mcplr.allRegister1_16(); + mcplr1_20.register(); + // ItemGroup CreativeTabManager.allRegister(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java index c21c9c656..72cdcd73b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java @@ -23,6 +23,10 @@ public MCPLRegistry1_20(MCPLRegistry mcplr, String MOD_ID) { //ITEM_GROUP = DeferredRegister.create(MOD_ID, RegistryKeys.ITEM_GROUP); } + public void register() { + ITEM_GROUP.register(); + } + public RegistrySupplier registryItemGroup(Identifier id, Supplier supplier) { return null; } diff --git a/info.properties b/info.properties index 220a1c255..d0f52a643 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.6 +mod_version=2.0.7 maven_group=net.pitan76 \ No newline at end of file From 28db455c96ebaf6d6fd1a4c0604b0e403a91034d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 19 Feb 2024 17:16:02 +0900 Subject: [PATCH 265/617] getCompatMiningLevel --- .../api/item/tool/CompatibleToolMaterial.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java index 9d0e28410..be0a037f9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java @@ -1,7 +1,29 @@ package net.pitan76.mcpitanlib.api.item.tool; import net.minecraft.item.ToolMaterial; +import net.minecraft.recipe.Ingredient; public interface CompatibleToolMaterial extends ToolMaterial { + @Deprecated + @Override + default int getMiningLevel() { + return getCompatMiningLevel(); + } + int getCompatMiningLevel(); + + @Override + float getAttackDamage(); + + @Override + float getMiningSpeedMultiplier(); + + @Override + Ingredient getRepairIngredient(); + + @Override + int getDurability(); + + @Override + int getEnchantability(); } \ No newline at end of file From 31916d3fbf9b99d16afabdb7c3be81b409e9e07c Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 19 Feb 2024 18:00:35 +0900 Subject: [PATCH 266/617] register --- .../net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java index 72cdcd73b..8ad1478f9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java @@ -24,7 +24,7 @@ public MCPLRegistry1_20(MCPLRegistry mcplr, String MOD_ID) { } public void register() { - ITEM_GROUP.register(); + //ITEM_GROUP.register(); } public RegistrySupplier registryItemGroup(Identifier id, Supplier supplier) { From 797bba0243ef6e625313a6257be1f6a4d4b0f4d5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 20 Feb 2024 00:46:26 +0900 Subject: [PATCH 267/617] add apis --- .../api/item/tool/CompatibleToolMaterial.java | 40 +++++- .../api/util/ArmorMaterialUtil.java | 128 ++++++++++++++++++ .../mcpitanlib/api/util/ToolMaterialUtil.java | 40 ++++++ info.properties | 2 +- 4 files changed, 202 insertions(+), 8 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/ArmorMaterialUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/ToolMaterialUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java index be0a037f9..bbd737fd7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java @@ -4,26 +4,52 @@ import net.minecraft.recipe.Ingredient; public interface CompatibleToolMaterial extends ToolMaterial { + + int getCompatMiningLevel(); + + float getCompatAttackDamage(); + + float getCompatMiningSpeedMultiplier(); + + Ingredient getCompatRepairIngredient(); + + int getCompatDurability(); + + int getCompatEnchantability(); + @Deprecated @Override default int getMiningLevel() { return getCompatMiningLevel(); } - int getCompatMiningLevel(); - + @Deprecated @Override - float getAttackDamage(); + default float getAttackDamage() { + return getCompatAttackDamage(); + } + @Deprecated @Override - float getMiningSpeedMultiplier(); + default float getMiningSpeedMultiplier() { + return getCompatMiningSpeedMultiplier(); + } + @Deprecated @Override - Ingredient getRepairIngredient(); + default Ingredient getRepairIngredient() { + return getCompatRepairIngredient(); + } + @Deprecated @Override - int getDurability(); + default int getDurability() { + return getCompatDurability(); + } + @Deprecated @Override - int getEnchantability(); + default int getEnchantability() { + return getCompatEnchantability(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ArmorMaterialUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ArmorMaterialUtil.java new file mode 100644 index 000000000..1957cfe9e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ArmorMaterialUtil.java @@ -0,0 +1,128 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.recipe.Ingredient; +import net.minecraft.sound.SoundEvent; +import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; +import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; + +public class ArmorMaterialUtil { + public static CompatibleArmorMaterial create(String name, int[] durability, int[] protectionAmounts, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Ingredient repairIngredient) { + return new CompatibleArmorMaterial() { + @Override + public int getDurability(ArmorEquipmentType type) { + switch (type.getSlot()) { + case HEAD -> { + return durability[0]; + } + case CHEST -> { + return durability[1]; + } + case LEGS -> { + return durability[2]; + } + case FEET -> { + return durability[3]; + } + default -> { + return 0; + } + } + } + + @Override + public int getProtection(ArmorEquipmentType type) { + switch (type.getSlot()) { + case HEAD -> { + return protectionAmounts[0]; + } + case CHEST -> { + return protectionAmounts[1]; + } + case LEGS -> { + return protectionAmounts[2]; + } + case FEET -> { + return protectionAmounts[3]; + } + default -> { + return 0; + } + } + } + + @Override + public int getEnchantability() { + return enchantability; + } + + @Override + public SoundEvent getEquipSound() { + return equipSound; + } + + @Override + public Ingredient getRepairIngredient() { + return repairIngredient; + } + + @Override + public String getName() { + return name; + } + + @Override + public float getToughness() { + return toughness; + } + + @Override + public float getKnockbackResistance() { + return knockbackResistance; + } + }; + } + + public static CompatibleArmorMaterial create(String name, int durability, int protectionAmount, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Ingredient repairIngredient) { + return new CompatibleArmorMaterial() { + @Override + public int getDurability(ArmorEquipmentType type) { + return durability; + } + + @Override + public int getProtection(ArmorEquipmentType type) { + return protectionAmount; + } + + @Override + public int getEnchantability() { + return enchantability; + } + + @Override + public SoundEvent getEquipSound() { + return equipSound; + } + + @Override + public Ingredient getRepairIngredient() { + return repairIngredient; + } + + @Override + public String getName() { + return name; + } + + @Override + public float getToughness() { + return toughness; + } + + @Override + public float getKnockbackResistance() { + return knockbackResistance; + } + }; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ToolMaterialUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ToolMaterialUtil.java new file mode 100644 index 000000000..1a61aa75d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ToolMaterialUtil.java @@ -0,0 +1,40 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.recipe.Ingredient; +import net.pitan76.mcpitanlib.api.item.tool.CompatibleToolMaterial; + +public class ToolMaterialUtil { + public CompatibleToolMaterial create(int miningLevel, int durability, float miningSpeed, float attackDamage, int enchantability, Ingredient repairIngredient) { + return new CompatibleToolMaterial() { + @Override + public int getCompatMiningLevel() { + return miningLevel; + } + + @Override + public int getCompatDurability() { + return durability; + } + + @Override + public float getCompatMiningSpeedMultiplier() { + return miningSpeed; + } + + @Override + public Ingredient getCompatRepairIngredient() { + return repairIngredient; + } + + @Override + public float getCompatAttackDamage() { + return attackDamage; + } + + @Override + public int getCompatEnchantability() { + return enchantability; + } + }; + } +} diff --git a/info.properties b/info.properties index d0f52a643..8df57b8e6 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.7 +mod_version=2.0.8 maven_group=net.pitan76 \ No newline at end of file From 6e692d11ce15048d002df9c1025088b2556094d4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 20 Feb 2024 10:58:31 +0900 Subject: [PATCH 268/617] fix creative tab --- .../pitan76/mcpitanlib/api/item/CompatibleItemSettings.java | 5 +++++ .../net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index f2d238a70..5e32c7ea4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -74,6 +74,11 @@ public CompatibleItemSettings recipeRemainder(Item recipeRemainder) { public ExtendSettings build() { if (itemGroupId != null) { + if (CreativeTabBuilder.itemGroupBuilderMap.containsKey(itemGroupId)) { + CreativeTabBuilder itemGroupBuilder = CreativeTabBuilder.itemGroupBuilderMap.get(itemGroupId); + itemGroupBuilder.build(); + CreativeTabBuilder.itemGroupBuilderMap.remove(itemGroupId); + } if (CreativeTabBuilder.itemGroupMap.containsKey(itemGroupId)) settings.addGroup(CreativeTabBuilder.itemGroupMap.get(itemGroupId)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java index 6acad9727..b934185e3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java @@ -15,6 +15,9 @@ public class CreativeTabBuilder { @Deprecated public static final Map itemGroupMap = new HashMap<>(); + @Deprecated + public static final Map itemGroupBuilderMap = new HashMap<>(); + private final Identifier identifier; private Text displayName = null; private Supplier iconSupplier = null; @@ -27,6 +30,7 @@ public class CreativeTabBuilder { // Recommend: create(identifier) public CreativeTabBuilder(Identifier identifier) { this.identifier = identifier; + itemGroupBuilderMap.put(identifier, this); } public static CreativeTabBuilder create(Identifier identifier) { From 3b6040d316bb47b96f095d47ef263b0edb56a6d1 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 20 Feb 2024 11:12:02 +0900 Subject: [PATCH 269/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 8df57b8e6..312741e15 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.8 +mod_version=2.0.9 maven_group=net.pitan76 \ No newline at end of file From 5eb5314bdaffc6d7e22e7609907b87c690750182 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 22 Feb 2024 21:49:23 +0900 Subject: [PATCH 270/617] add APIs v2.1-series --- .../mcpitanlib/api/block/ExtendBlock.java | 17 +++++++++++++++++ info.properties | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 23bf0a3db..2e8cd696d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -6,6 +6,7 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; @@ -24,6 +25,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Random; +import java.util.List; public class ExtendBlock extends Block { public ExtendBlock(Settings settings) { @@ -179,4 +181,19 @@ public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockSt public void onStateReplaced(StateReplacedEvent event) { super.onStateReplaced(event.state, event.world, event.pos, event.newState, event.moved); } + + @Deprecated + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + return getDroppedStacks(new DroppedStacksArgs(state, builder)); + } + + /** + * block dropped stacks event + * @param args DroppedStacksArgs + * @return List + */ + public List getDroppedStacks(DroppedStacksArgs args) { + return super.getDroppedStacks(args.state, args.builder); + } } diff --git a/info.properties b/info.properties index 312741e15..c4d2dbdc8 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.0.9 +mod_version=2.1.0 maven_group=net.pitan76 \ No newline at end of file From 77b5abaab11b05f6c9a8ab29ed779b4b529d76a5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 22 Feb 2024 22:04:17 +0900 Subject: [PATCH 271/617] add APIs v2.1-series --- .../net/pitan76/easyapi/config/Config.java | 28 +++++-- .../api/event/block/BlockUseEvent.java | 5 +- .../api/event/block/DroppedStacksArgs.java | 30 ++++++++ .../event/block/ScreenHandlerCreateEvent.java | 28 +++++++ .../api/event/block/StateReplacedEvent.java | 7 +- .../api/event/item/PostHitEvent.java | 41 ++++++++++ .../api/event/item/PostMineEvent.java | 77 +++++++++++++++++++ .../mcpitanlib/api/item/ExtendItem.java | 32 ++++++++ .../api/item/ExtendItemProvider.java | 20 +++++ .../api/item/tool/CompatibleAxeItem.java | 35 +++++++++ .../api/item/tool/CompatibleHoeItem.java | 35 +++++++++ .../item/tool/CompatibleMiningToolItem.java | 76 ++++++++++++++++++ .../api/item/tool/CompatiblePickaxeItem.java | 35 +++++++++ .../api/item/tool/CompatibleShearsItem.java | 72 +++++++++++++++++ .../api/item/tool/CompatibleShovelItem.java | 35 +++++++++ .../api/item/tool/CompatibleSwordItem.java | 35 +++++++++ .../api/item/tool/CompatibleToolItem.java | 74 ++++++++++++++++++ .../api/registry/CompatRegistry.java | 16 +++- .../mcpitanlib/api/util/DamageSourceUtil.java | 4 + .../mcpitanlib/api/util/WorldUtil.java | 27 +++++++ .../api/util/client/ScreenUtil.java | 16 +--- .../client/widget/ClickableWidgetUtil.java | 10 +++ .../api/util/client/widget/TextFieldUtil.java | 26 +++++++ .../pitan76/mcpitanlib/mixin/ItemMixin.java | 23 ++++++ 24 files changed, 762 insertions(+), 25 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/DroppedStacksArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostHitEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostMineEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/ClickableWidgetUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java diff --git a/common/src/main/java/net/pitan76/easyapi/config/Config.java b/common/src/main/java/net/pitan76/easyapi/config/Config.java index c1fd89093..a24d9d3d1 100644 --- a/common/src/main/java/net/pitan76/easyapi/config/Config.java +++ b/common/src/main/java/net/pitan76/easyapi/config/Config.java @@ -10,7 +10,7 @@ public class Config implements IConfig { /** * 任意ファイルを読み込み、Mapへ変換 * - * @param file + * @param file ファイル */ public Config(File file) { load(file); @@ -19,7 +19,7 @@ public Config(File file) { /** * 任意ファイルを読み込み、Mapへ変換 * - * @param file + * @param file ファイル名 */ public Config(String file) { this(new File(file)); @@ -30,7 +30,7 @@ public Config(String file) { /** * Configの変換 * - * @param config + * @param config Config */ public Config(Config config) { configMap = config.configMap; @@ -89,7 +89,7 @@ public String getString(String key) { } /** - * マップのキーから値(数値)を取得 + * マップのキーから値(整数)を取得 * "."でパスを区切る * * @param key キー @@ -109,6 +109,13 @@ public int getInt(String key) { return (Integer) obj; } + /** + * マップのキーから値(数値)を取得 + * "."でパスを区切る + * + * @param key キー + * @return 取得した値 + */ public double getDouble(String key) { return (Double) get(key); } @@ -159,7 +166,7 @@ public String getStringOrDefault(String key, String defaultValue) { } /** - * マップのキーから値(数値)を取得、存在しない場合はデフォルト値を返す + * マップのキーから値(整数)を取得、存在しない場合はデフォルト値を返す * "."でパスを区切る * * @param key キー @@ -264,7 +271,7 @@ public boolean setString(String key, String value) { } /** - * マップのキーに値(数値)をセット + * マップのキーに値(整数)をセット * "."でパスを区切る * 失敗するとfalseを返す * @@ -276,6 +283,15 @@ public boolean setInt(String key, int value) { return set(key, value); } + /** + * マップのキーに値(数値)をセット + * "."でパスを区切る + * 失敗するとfalseを返す + * + * @param key キー + * @param value 値 + * @return 真偽値 + */ public boolean setDouble(String key, double value) { return set(key, value); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java index 6f20ad6a1..27ac0f670 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java @@ -11,6 +11,7 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; public class BlockUseEvent extends BaseEvent { public BlockState state; @@ -84,7 +85,7 @@ public ActionResult consume() { * @return true if the block has a block entity */ public boolean hasBlockEntity() { - return world.getBlockEntity(pos) != null; + return WorldUtil.hasBlockEntity(world, pos); } /** @@ -92,6 +93,6 @@ public boolean hasBlockEntity() { * @return the block entity of the block */ public BlockEntity getBlockEntity() { - return world.getBlockEntity(pos); + return WorldUtil.getBlockEntity(world, pos); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/DroppedStacksArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/DroppedStacksArgs.java new file mode 100644 index 000000000..a0e2203d0 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/DroppedStacksArgs.java @@ -0,0 +1,30 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.context.LootContextParameters; +import net.pitan76.mcpitanlib.api.event.BaseEvent; + +public class DroppedStacksArgs extends BaseEvent { + public BlockState state; + public LootContext.Builder builder; + + public DroppedStacksArgs(BlockState state, LootContext.Builder builder) { + this.state = state; + this.builder = builder; + } + + public BlockState getState() { + return state; + } + + @Deprecated + public LootContext.Builder getBuilder() { + return builder; + } + + public BlockEntity getBlockEntity() { + return builder.get(LootContextParameters.BLOCK_ENTITY); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java index 603fb0d27..013f0c069 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ScreenHandlerCreateEvent.java @@ -25,4 +25,32 @@ public ScreenHandlerCreateEvent(BlockState state, World world, BlockPos pos, int this.inventory = inventory; this.player = new Player(player); } + + public BlockState getState() { + return state; + } + + public BlockPos getPos() { + return pos; + } + + public World getWorld() { + return world; + } + + public int getSyncId() { + return syncId; + } + + public PlayerInventory getInventory() { + return inventory; + } + + public Player getPlayer() { + return player; + } + + public boolean isClient() { + return world.isClient; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java index 4cbe8096d..3e08d355c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java @@ -7,6 +7,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; public class StateReplacedEvent extends BaseEvent { @@ -61,7 +62,7 @@ public boolean isSameState() { * @return BlockEntity */ public boolean hasBlockEntity() { - return world.getBlockEntity(pos) != null; + return WorldUtil.hasBlockEntity(world, pos); } /** @@ -69,14 +70,14 @@ public boolean hasBlockEntity() { * @return BlockEntity */ public BlockEntity getBlockEntity() { - return world.getBlockEntity(pos); + return WorldUtil.getBlockEntity(world, pos); } /** * spawn the drops in the container */ public void spawnDropsInContainer() { - BlockEntity blockEntity = world.getBlockEntity(pos); + BlockEntity blockEntity = getBlockEntity(); if (blockEntity instanceof Inventory) { Inventory inventory = (Inventory) blockEntity; ItemScatterer.spawn(world, pos, inventory); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostHitEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostHitEvent.java new file mode 100644 index 000000000..ee9d20894 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostHitEvent.java @@ -0,0 +1,41 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.event.BaseEvent; + +public class PostHitEvent extends BaseEvent { + public ItemStack stack; + public LivingEntity target; + public LivingEntity attacker; + + public PostHitEvent(ItemStack stack, LivingEntity target, LivingEntity attacker) { + this.stack = stack; + this.target = target; + this.attacker = attacker; + } + + public ItemStack getStack() { + return stack; + } + + public LivingEntity getAttacker() { + return attacker; + } + + public LivingEntity getTarget() { + return target; + } + + /** + * Damages the stack in the given slot + * @param amount the amount of damage to deal + * @param slot the slot to damage + */ + public void damageStack(int amount, EquipmentSlot slot) { + stack.damage(amount, attacker, (entity) -> { + entity.sendEquipmentBreakStatus(slot); + }); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostMineEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostMineEvent.java new file mode 100644 index 000000000..153954d77 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostMineEvent.java @@ -0,0 +1,77 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.util.BlockUtil; +import net.pitan76.mcpitanlib.api.util.WorldUtil; + +public class PostMineEvent extends BaseEvent { + public ItemStack stack; + public World world; + public BlockState state; + public BlockPos pos; + public LivingEntity miner; + + public PostMineEvent(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + this.stack = stack; + this.world = world; + this.state = state; + this.pos = pos; + this.miner = miner; + } + + public BlockState getState() { + return state; + } + + public BlockPos getPos() { + return pos; + } + + public World getWorld() { + return world; + } + + public ItemStack getStack() { + return stack; + } + + public LivingEntity getMiner() { + return miner; + } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(world, pos); + } + + public boolean isClient() { + return world.isClient; + } + + public boolean stateIsIn(TagKey tagKey) { + return BlockUtil.isIn(state.getBlock(), tagKey); + } + + public boolean stateIsOf(Block block) { + return BlockUtil.isEqual(state.getBlock(), block); + } + + /** + * Damages the stack in the given slot + * @param amount the amount of damage to deal + * @param slot the slot to damage + */ + public void damageStack(int amount, EquipmentSlot slot) { + stack.damage(amount, miner, (entity) -> { + entity.sendEquipmentBreakStatus(slot); + }); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index 040a1274a..58b7313ec 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.item; +import net.minecraft.block.BlockState; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; @@ -10,6 +11,7 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.*; import net.pitan76.mcpitanlib.core.Dummy; @@ -70,6 +72,18 @@ public void onCraft(ItemStack stack, World world, PlayerEntity player) { onCraft(new CraftEvent(stack, world, player)); } + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } + /** * item right click event * @@ -131,4 +145,22 @@ public void appendTooltip(ItemAppendTooltipEvent event) { public void onCraft(CraftEvent event) { super.onCraft(event.stack, event.world, null); } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java index e8f6a3366..0c7648bf0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java @@ -66,6 +66,26 @@ default void appendTooltip(ItemAppendTooltipEvent event, Options options) { options.cancel = false; } + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + default boolean postHit(PostHitEvent event, Options options) { + options.cancel = false; + return false; + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + default boolean postMine(PostMineEvent event, Options options) { + options.cancel = false; + return false; + } + public static class Options { public boolean cancel = true; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java index cdec86aa8..519993d89 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java @@ -1,9 +1,14 @@ package net.pitan76.mcpitanlib.api.item.tool; import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; import net.minecraft.item.AxeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; +import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; @@ -35,4 +40,34 @@ public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { return overrideGetMiningSpeedMultiplier(stack, state); } + + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java index f384d4790..870d9cb56 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java @@ -1,9 +1,14 @@ package net.pitan76.mcpitanlib.api.item.tool; import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; import net.minecraft.item.HoeItem; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; +import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; @@ -35,4 +40,34 @@ public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { return overrideGetMiningSpeedMultiplier(stack, state); } + + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java new file mode 100644 index 000000000..c3a06a104 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java @@ -0,0 +1,76 @@ +package net.pitan76.mcpitanlib.api.item.tool; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.MiningToolItem; +import net.minecraft.item.ToolMaterial; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; +import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.tag.TagKey; + +public class CompatibleMiningToolItem extends MiningToolItem implements ExtendItemProvider { + @Deprecated + protected CompatibleMiningToolItem(float attackDamage, float attackSpeed, ToolMaterial material, net.minecraft.tag.TagKey effectiveBlocks, Settings settings) { + super(attackDamage, attackSpeed, material, effectiveBlocks, settings); + } + + public CompatibleMiningToolItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, TagKey tagKey, CompatibleItemSettings settings) { + this(attackDamage, attackSpeed, material, tagKey.getTagKey(), settings.build()); + } + + public boolean overrideIsSuitableFor(BlockState state) { + return super.isSuitableFor(state); + } + + public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return super.getMiningSpeedMultiplier(stack, state); + } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } + + @Deprecated + @Override + public boolean isSuitableFor(BlockState state) { + return overrideIsSuitableFor(state); + } + + @Deprecated + @Override + public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return overrideGetMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java index ef69ed51b..a70c5f4c1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java @@ -1,9 +1,14 @@ package net.pitan76.mcpitanlib.api.item.tool; import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.PickaxeItem; import net.minecraft.item.ToolMaterial; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; +import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; @@ -35,4 +40,34 @@ public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { return overrideGetMiningSpeedMultiplier(stack, state); } + + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java new file mode 100644 index 000000000..fb1811e29 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java @@ -0,0 +1,72 @@ +package net.pitan76.mcpitanlib.api.item.tool; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ShearsItem; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; +import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; + +public class CompatibleShearsItem extends ShearsItem implements ExtendItemProvider { + public CompatibleShearsItem(Settings settings) { + super(settings); + } + + public CompatibleShearsItem(CompatibleItemSettings settings) { + this(settings.build()); + } + + public boolean overrideIsSuitableFor(BlockState state) { + return super.isSuitableFor(state); + } + + @Deprecated + @Override + public boolean isSuitableFor(BlockState state) { + return overrideIsSuitableFor(state); + } + + public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return super.getMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return overrideGetMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java index 7efc94dac..cdfcbb7fd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java @@ -1,9 +1,14 @@ package net.pitan76.mcpitanlib.api.item.tool; import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ShovelItem; import net.minecraft.item.ToolMaterial; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; +import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; @@ -35,4 +40,34 @@ public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { return overrideGetMiningSpeedMultiplier(stack, state); } + + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java index e18a53618..605fcccae 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java @@ -1,9 +1,14 @@ package net.pitan76.mcpitanlib.api.item.tool; import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; +import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; @@ -35,4 +40,34 @@ public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { return overrideGetMiningSpeedMultiplier(stack, state); } + + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java new file mode 100644 index 000000000..41e3c7f87 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java @@ -0,0 +1,74 @@ +package net.pitan76.mcpitanlib.api.item.tool; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ToolItem; +import net.minecraft.item.ToolMaterial; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; +import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; + +public class CompatibleToolItem extends ToolItem implements ExtendItemProvider { + @Deprecated + protected CompatibleToolItem(ToolMaterial material, Settings settings) { + super(material, settings); + } + + public CompatibleToolItem(CompatibleToolMaterial material, CompatibleItemSettings settings) { + this(material, settings.build()); + } + + public boolean overrideIsSuitableFor(BlockState state) { + return super.isSuitableFor(state); + } + + @Deprecated + @Override + public boolean isSuitableFor(BlockState state) { + return overrideIsSuitableFor(state); + } + + public float overrideGetMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return super.getMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public float getMiningSpeedMultiplier(ItemStack stack, BlockState state) { + return overrideGetMiningSpeedMultiplier(stack, state); + } + + @Deprecated + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + return postHit(new PostHitEvent(stack, target, attacker)); + } + + @Deprecated + @Override + public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { + return postMine(new PostMineEvent(stack, world, state, pos, miner)); + } + + /** + * post hit event + * @param event PostHitEvent + * @return boolean + */ + public boolean postHit(PostHitEvent event) { + return super.postHit(event.stack, event.target, event.attacker); + } + + /** + * post mine event + * @param event PostMineEvent + * @return boolean + */ + public boolean postMine(PostMineEvent event) { + return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index 73d4e0d38..f77630e1e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -47,13 +47,21 @@ public CompatRegistry(String MOD_ID) { this.MOD_ID = MOD_ID; } + /** + * create(new CompatRegistry)'s alias + * @see #create(String) + */ + public static CompatRegistry createRegistry(String MOD_ID) { + return new CompatRegistry(MOD_ID); + } + /** * Create a new CompatRegistry * @param MOD_ID The mod id * @return The new CompatRegistry */ - public static CompatRegistry createRegistry(String MOD_ID) { - return new CompatRegistry(MOD_ID); + public static CompatRegistry create(String MOD_ID) { + return createRegistry(MOD_ID); } /** @@ -124,6 +132,10 @@ public RegistryResult registerItemGroup(Identifier id, CreativeTabBui return new RegistryResult<>(mcplr1_20.registryItemGroup(id, builder)); } + public RegistryResult registerItemGroup(CreativeTabBuilder builder) { + return registerItemGroup(builder.getIdentifier(), builder); + } + public static void registerFuel(int time, ItemConvertible... item) { FuelRegistry.register(time, item); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java index 2d6e3b0d7..6d686e4ac 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DamageSourceUtil.java @@ -37,4 +37,8 @@ public static DamageSource mobProjectile(Entity projectile, LivingEntity attacke public static DamageSource mobProjectile(Entity projectile, LivingEntity attacker) { return DamageSource.mobProjectile(projectile, attacker); } + + public static DamageSource fall(Entity source) { + return DamageSource.FALL; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 005fa5d1f..d33f3ae54 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -1,11 +1,14 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.ExperienceOrbEntity; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ChunkTicketType; @@ -147,4 +150,28 @@ public static int getTopY(World world) { public static int getDimensionHeight(World world) { return world.getDimension().getHeight(); } + + public static BlockEntity getBlockEntity(World world, BlockPos pos) { + return world.getBlockEntity(pos); + } + + public static boolean hasBlockEntity(World world, BlockPos pos) { + return getBlockEntity(world, pos) != null; + } + + public static BlockState getBlockState(World world, BlockPos pos) { + return world.getBlockState(pos); + } + + public static FluidState getFluidState(World world, BlockPos pos) { + return world.getFluidState(pos); + } + + public static boolean hasFluidState(World world, BlockPos pos) { + return ! getFluidState(world, pos).isEmpty(); + } + + public static boolean isAir(World world, BlockPos pos) { + return getBlockState(world, pos).isAir(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java index 473f798c1..d87d9d3fd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java @@ -91,20 +91,12 @@ public static Text empty() { } } - public static class TextFieldUtil { - public static void setFocused(TextFieldWidget widget, boolean focused) { - widget.setTextFieldFocused(focused); - } - - public static void render(TextFieldWidget widget, RenderArgs args) { - widget.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); - } + public static class TextFieldUtil extends net.pitan76.mcpitanlib.api.util.client.widget.TextFieldUtil { + // Nothing } - public static class ClickableWidgetUtil { - public static void render(ClickableWidget widget, RenderArgs args) { - widget.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); - } + public static class ClickableWidgetUtil extends net.pitan76.mcpitanlib.api.util.client.widget.ClickableWidgetUtil { + // Nothing } public static class RendererUtil { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/ClickableWidgetUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/ClickableWidgetUtil.java new file mode 100644 index 000000000..590468c07 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/ClickableWidgetUtil.java @@ -0,0 +1,10 @@ +package net.pitan76.mcpitanlib.api.util.client.widget; + +import net.minecraft.client.gui.widget.ClickableWidget; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; + +public class ClickableWidgetUtil { + public static void render(ClickableWidget widget, RenderArgs args) { + widget.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java new file mode 100644 index 000000000..5f4cada98 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.util.client.widget; + +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; + +public class TextFieldUtil { + public static void setFocused(TextFieldWidget widget, boolean focused) { + widget.setTextFieldFocused(focused); + } + + public static void render(TextFieldWidget widget, RenderArgs args) { + widget.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); + } + + public static void setEditable(TextFieldWidget widget, boolean editable) { + widget.setEditable(editable); + } + + public static void setMaxLength(TextFieldWidget widget, int maxLength) { + widget.setMaxLength(maxLength); + } + + public static void setSuggestion(TextFieldWidget widget, String suggestion) { + widget.setSuggestion(suggestion); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 9204af80c..c1dc0e421 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.mixin; +import net.minecraft.block.BlockState; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; @@ -10,6 +11,7 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.*; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; @@ -91,4 +93,25 @@ private void appendTooltip(ItemStack stack, World world, List tooltip, Too } } + @Inject(method = "postHit", at = @At("HEAD"), cancellable = true) + private void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + boolean returnValue = provider.postHit(new PostHitEvent(stack, target, attacker), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "postMine", at = @At("HEAD"), cancellable = true) + private void postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + boolean returnValue = provider.postMine(new PostMineEvent(stack, world, state, pos, miner), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } } From bd4b7a32141a582346ba9afb97dad240bbb3a414 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 22 Feb 2024 22:04:31 +0900 Subject: [PATCH 272/617] optimize imports --- .../java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java | 2 +- .../pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java | 1 - .../pitan76/mcpitanlib/api/item/CompatibleItemSettings.java | 2 -- .../net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java | 5 ++++- .../net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java | 3 --- .../pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java | 2 -- 6 files changed, 5 insertions(+), 10 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 2e8cd696d..ac3db726e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -24,8 +24,8 @@ import net.pitan76.mcpitanlib.api.util.TextUtil; import org.jetbrains.annotations.Nullable; -import java.util.Random; import java.util.List; +import java.util.Random; public class ExtendBlock extends Block { public ExtendBlock(Settings settings) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java index c8587bd0c..d642de247 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java @@ -5,7 +5,6 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawBackgroundArgs; -import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawForegroundArgs; import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawMouseoverTooltipArgs; import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.util.client.RenderUtil; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index 5e32c7ea4..6c7d1c6d6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -1,12 +1,10 @@ package net.pitan76.mcpitanlib.api.item; -import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; -import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; import java.util.function.Supplier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java index b5b0c82f1..2b662ac95 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlacedFutureUtil.java @@ -4,7 +4,10 @@ import net.minecraft.world.gen.YOffset; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.PlacedFeature; -import net.minecraft.world.gen.placementmodifier.*; +import net.minecraft.world.gen.placementmodifier.CountPlacementModifier; +import net.minecraft.world.gen.placementmodifier.HeightRangePlacementModifier; +import net.minecraft.world.gen.placementmodifier.PlacementModifier; +import net.minecraft.world.gen.placementmodifier.SquarePlacementModifier; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java index d87d9d3fd..6f0d41b93 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java @@ -7,15 +7,12 @@ import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.gui.widget.RedrawableTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; -import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.util.TextUtil; @Environment(EnvType.CLIENT) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java index 8ad1478f9..eeb5a668e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_20.java @@ -5,8 +5,6 @@ import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; -import java.util.HashMap; -import java.util.Map; import java.util.function.Supplier; @Deprecated From 6a0ca56cd28447bbdabc2558de6d7b16d5cf10e4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 23 Feb 2024 16:09:36 +0900 Subject: [PATCH 273/617] add APIs --- .../mcpitanlib/api/block/ExtendBlock.java | 29 +++++++++ .../api/event/block/AppendPropertiesArgs.java | 23 +++++++ .../api/event/block/NeighborUpdateEvent.java | 63 +++++++++++++++++++ .../event/item/ItemAppendTooltipEvent.java | 20 ++++++ .../api/event/item/ItemUseOnBlockEvent.java | 18 +++++- .../mcpitanlib/api/util/WorldUtil.java | 40 ++++++++++++ info.properties | 2 +- 7 files changed, 192 insertions(+), 3 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/NeighborUpdateEvent.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index ac3db726e..0fb8beb52 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -11,6 +11,7 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.server.world.ServerWorld; +import net.minecraft.state.StateManager; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; @@ -196,4 +197,32 @@ public List getDroppedStacks(BlockState state, LootContext.Builder bu public List getDroppedStacks(DroppedStacksArgs args) { return super.getDroppedStacks(args.state, args.builder); } + + @Deprecated + @Override + public void neighborUpdate(BlockState state, World world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { + neighborUpdate(new NeighborUpdateEvent(state, world, pos, sourceBlock, sourcePos, notify)); + } + + /** + * block neighbor update event + * @param event NeighborUpdateEvent + */ + public void neighborUpdate(NeighborUpdateEvent event) { + super.neighborUpdate(event.state, event.world, event.pos, event.sourceBlock, event.sourcePos, event.notify); + } + + @Deprecated + @Override + public void appendProperties(StateManager.Builder builder) { + appendProperties(new AppendPropertiesArgs(builder)); + } + + /** + * append properties event + * @param args AppendPropertiesArgs + */ + public void appendProperties(AppendPropertiesArgs args) { + super.appendProperties(args.builder); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java new file mode 100644 index 000000000..412e03a58 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java @@ -0,0 +1,23 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.Property; +import net.pitan76.mcpitanlib.api.event.BaseEvent; + +public class AppendPropertiesArgs extends BaseEvent { + public StateManager.Builder builder; + + public AppendPropertiesArgs(StateManager.Builder builder) { + this.builder = builder; + } + + public StateManager.Builder getBuilder() { + return builder; + } + + public void addProperty(Property... properties) { + builder.add(properties); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/NeighborUpdateEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/NeighborUpdateEvent.java new file mode 100644 index 000000000..399bb414a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/NeighborUpdateEvent.java @@ -0,0 +1,63 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; + +public class NeighborUpdateEvent extends BaseEvent { + public BlockState state; + public World world; + public BlockPos pos; + public Block sourceBlock; + public BlockPos sourcePos; + public boolean notify; + + public NeighborUpdateEvent(BlockState state, World world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { + this.state = state; + this.world = world; + this.pos = pos; + this.sourceBlock = sourceBlock; + this.sourcePos = sourcePos; + this.notify = notify; + } + + public BlockState getState() { + return state; + } + + public World getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public Block getSourceBlock() { + return sourceBlock; + } + + public BlockPos getSourcePos() { + return sourcePos; + } + + public boolean isNotify() { + return notify; + } + + public boolean isReceivingRedstonePower() { + return WorldUtil.isReceivingRedstonePower(world, pos); + } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(world, pos); + } + + public boolean hasBlockEntity() { + return WorldUtil.hasBlockEntity(world, pos); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java index cd06bce81..29dfbb2f7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java @@ -37,4 +37,24 @@ public List getTooltip() { public TooltipContext getContext() { return context; } + + public void addTooltip(Text text) { + tooltip.add(text); + } + + public void addTooltip(List texts) { + tooltip.addAll(texts); + } + + public boolean removeTooltip(Text text) { + return tooltip.remove(text); + } + + public boolean isCreative() { + return context.isAdvanced(); + } + + public boolean isAdvanced() { + return context.isAdvanced(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java index 26ba42a6b..6145a0855 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java @@ -1,5 +1,7 @@ package net.pitan76.mcpitanlib.api.event.item; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; @@ -10,8 +12,8 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; - -import javax.annotation.Nullable; +import net.pitan76.mcpitanlib.api.util.WorldUtil; +import org.jetbrains.annotations.Nullable; public class ItemUseOnBlockEvent extends BaseEvent { public Player player; @@ -82,4 +84,16 @@ public ActionResult pass() { public ActionResult consume() { return ActionResult.CONSUME; } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(world, blockPos); + } + + public boolean hasBlockEntity() { + return WorldUtil.hasBlockEntity(world, blockPos); + } + + public BlockState getBlockState() { + return WorldUtil.getBlockState(world, blockPos); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index d33f3ae54..5a3fe42b8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -174,4 +174,44 @@ public static boolean hasFluidState(World world, BlockPos pos) { public static boolean isAir(World world, BlockPos pos) { return getBlockState(world, pos).isAir(); } + + public static void setBlockState(World world, BlockPos pos, BlockState state, int flags) { + world.setBlockState(pos, state, flags); + } + + public static void setBlockState(World world, BlockPos pos, BlockState state) { + setBlockState(world, pos, state, 3); + } + + public static void setBlockState(World world, BlockPos pos, Block block, int flags) { + setBlockState(world, pos, block.getDefaultState(), flags); + } + + public static void setBlockState(World world, BlockPos pos, Block block) { + setBlockState(world, pos, block, 3); + } + + public static void breakBlock(World world, BlockPos pos, boolean drop) { + world.breakBlock(pos, drop); + } + + public static void breakBlock(World world, BlockPos pos) { + breakBlock(world, pos, true); + } + + public static void breakBlock(World world, BlockPos pos, boolean drop, @Nullable Player player) { + world.breakBlock(pos, drop, player.getPlayerEntity()); + } + + public static void breakBlock(World world, BlockPos pos, @Nullable Player player) { + breakBlock(world, pos, true, player); + } + + public static void removeBlockEntity(World world, BlockPos pos) { + world.removeBlockEntity(pos); + } + + public static void removeBlock(World world, BlockPos pos, boolean move) { + world.removeBlock(pos, move); + } } diff --git a/info.properties b/info.properties index c4d2dbdc8..b7b1b5ac3 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.0 +mod_version=2.1.1 maven_group=net.pitan76 \ No newline at end of file From 6f11c8dfe4ad0caf698e6fe2c96ba719c21e36c6 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 23 Feb 2024 22:45:31 +0900 Subject: [PATCH 274/617] add APIs --- .../api/util/PlayerManagerUtil.java | 85 +++++++++++++++++++ info.properties | 2 +- 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerManagerUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerManagerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerManagerUtil.java new file mode 100644 index 000000000..2dbcfa02d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerManagerUtil.java @@ -0,0 +1,85 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class PlayerManagerUtil { + + /** + * Get player by UUID + * @param server MinecraftServer + * @param uuid UUID + * @return Player + */ + public static Player getPlayerByUUID(MinecraftServer server, UUID uuid) { + return PlayerUtil.getPlayerByUUID(server, uuid); + } + + /** + * Get player by name + * @param server MinecraftServer + * @param name String + * @return Player + */ + public static Player getPlayerByName(MinecraftServer server, String name) { + return PlayerUtil.getPlayerByName(server, name); + } + + /** + * Get players by IP + * @param server MinecraftServer + * @param ip String + * @return List + */ + public static List getPlayersByIP(MinecraftServer server, String ip) { + return PlayerUtil.getPlayersByIP(server, ip); + } + + /** + * Get players + * @param server MinecraftServer + * @return List + */ + public static List getPlayers(MinecraftServer server) { + return PlayerUtil.getPlayers(server); + } + + /** + * Get players + * @param world World + * @return List + */ + public static List getPlayers(World world) { + List players = new ArrayList<>(); + for (PlayerEntity p : world.getPlayers()) { + players.add(new Player(p)); + } + return players; + } + + /** + * Get player by UUID + * @param world World + * @param uuid UUID + * @return Player + */ + public static Player getPlayerByUUID(World world, UUID uuid) { + return PlayerUtil.getPlayerByUUID(world, uuid); + } + + /** + * Get player by name + * @param world World + * @param name String + * @return Player + */ + public static Player getPlayerByName(World world, String name) { + return PlayerUtil.getPlayerByName(world, name); + } +} diff --git a/info.properties b/info.properties index b7b1b5ac3..64c4227ff 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.1 +mod_version=2.1.2 maven_group=net.pitan76 \ No newline at end of file From c68b5e499ca318c3a70a628343046844beb65a4a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 25 Feb 2024 15:17:21 +0900 Subject: [PATCH 275/617] add screen apis --- .../mcpitanlib/api/client/SimpleScreen.java | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java new file mode 100644 index 000000000..5677a318e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -0,0 +1,132 @@ +package net.pitan76.mcpitanlib.api.client; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.Drawable; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.Selectable; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; + +public abstract class SimpleScreen extends Screen { + + public int width, height; + public TextRenderer textRenderer; + public ItemRenderer itemRenderer; + + public SimpleScreen(Text title) { + super(title); + fixScreen(); + } + + public T addDrawableChild_compatibility(T drawableElement) { + return super.addDrawableChild(drawableElement); + // addButton + } + + public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWidget widget) { + return addDrawableChild_compatibility(widget); + } + + public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x, int y, int u, int v, int width, int height) { + //ScreenUtil.setBackground(GUI); + //super.drawTexture(matrices, x, y, u, v, width, height); + drawObjectDM.getContext().drawTexture(texture, x, y, u, v, width, height); + } + + @Deprecated + @Override + public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) { + renderBackground(new RenderArgs(new DrawObjectDM(context), mouseX, mouseY, delta)); + } + + + public void renderBackground(RenderArgs args) { + super.renderBackground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + } + + public void render(RenderArgs args) { + super.render(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + } + + public void resizeOverride(MinecraftClient client, int width, int height) { + } + + public void initOverride() { + } + + @Deprecated + @Override + protected void init() { + super.init(); + fixScreen(); + initOverride(); + } + + @Deprecated + @Override + public void resize(MinecraftClient client, int width, int height) { + super.resize(client, width, height); + fixScreen(); + resizeOverride(client, width, height); + } + + public void fixScreen() { + this.textRenderer = super.textRenderer; + this.itemRenderer = MinecraftClient.getInstance().getItemRenderer(); + this.width = super.width; + this.height = super.height; + } + + public void setTextRenderer(TextRenderer textRenderer) { + this.textRenderer = textRenderer; + super.textRenderer = textRenderer; + } + + public void setItemRenderer(ItemRenderer itemRenderer) { + this.itemRenderer = itemRenderer; + } + + public void setWidth(int width) { + this.width = width; + super.width = width; + } + + public void setHeight(int height) { + this.height = height; + super.height = height; + } + + @Deprecated + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + DrawObjectDM drawObjectDM = new DrawObjectDM(context); + render(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); + } + + public boolean keyReleased(KeyEventArgs args) { + return super.keyReleased(args.keyCode, args.scanCode, args.modifiers); + } + + public boolean keyPressed(KeyEventArgs args) { + return super.keyPressed(args.keyCode, args.scanCode, args.modifiers); + } + + @Deprecated + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + return this.keyReleased(new KeyEventArgs(keyCode, scanCode, modifiers)); + } + + @Deprecated + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + return this.keyPressed(new KeyEventArgs(keyCode, scanCode, modifiers)); + } +} From 0edd240abb680ed86bdac55931ee0af8390f8220 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 25 Feb 2024 15:22:15 +0900 Subject: [PATCH 276/617] 1201 --- .../net/pitan76/mcpitanlib/api/client/SimpleScreen.java | 7 +++---- info.properties | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index 5677a318e..8dc6c40ce 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -42,13 +42,12 @@ public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x @Deprecated @Override - public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) { - renderBackground(new RenderArgs(new DrawObjectDM(context), mouseX, mouseY, delta)); + public void renderBackground(DrawContext context) { + renderBackground(new RenderArgs(new DrawObjectDM(context), 0, 0, 0)); } - public void renderBackground(RenderArgs args) { - super.renderBackground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + super.renderBackground(args.drawObjectDM.getContext()); } public void render(RenderArgs args) { diff --git a/info.properties b/info.properties index 64c4227ff..3263f8e7e 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.2 +mod_version=2.1.3 maven_group=net.pitan76 \ No newline at end of file From defaa87aec6d33005a93f227734b2edc7adca391 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 25 Feb 2024 15:24:59 +0900 Subject: [PATCH 277/617] 1192 --- .../mcpitanlib/api/client/SimpleScreen.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index 8dc6c40ce..bac4f62a8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -2,17 +2,18 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; +import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; public abstract class SimpleScreen extends Screen { @@ -35,23 +36,22 @@ public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWi } public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x, int y, int u, int v, int width, int height) { - //ScreenUtil.setBackground(GUI); - //super.drawTexture(matrices, x, y, u, v, width, height); - drawObjectDM.getContext().drawTexture(texture, x, y, u, v, width, height); + ScreenUtil.setBackground(texture); + drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height); } @Deprecated @Override - public void renderBackground(DrawContext context) { - renderBackground(new RenderArgs(new DrawObjectDM(context), 0, 0, 0)); + public void renderBackground(MatrixStack matrices) { + renderBackground(new RenderArgs(new DrawObjectDM(matrices), 0, 0, 0)); } public void renderBackground(RenderArgs args) { - super.renderBackground(args.drawObjectDM.getContext()); + super.renderBackground(args.drawObjectDM.getStack()); } public void render(RenderArgs args) { - super.render(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + super.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); } public void resizeOverride(MinecraftClient client, int width, int height) { @@ -104,8 +104,8 @@ public void setHeight(int height) { @Deprecated @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - DrawObjectDM drawObjectDM = new DrawObjectDM(context); + public void render(MatrixStack stack, int mouseX, int mouseY, float delta) { + DrawObjectDM drawObjectDM = new DrawObjectDM(stack); render(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); } From fbd2bed7ee168ce67ba3244b41a8eef1f8b5fe48 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 1 Mar 2024 15:39:46 +0900 Subject: [PATCH 278/617] add apis --- .../api/client/SimpleOptionsScreen.java | 27 +++++++++++++++++++ .../api/command/argument/DoubleCommand.java | 19 +++++++++++++ .../api/command/argument/FloatCommand.java | 19 +++++++++++++ .../api/event/DoubleCommandEvent.java | 11 ++++++++ .../api/event/FloatCommandEvent.java | 10 +++++++ 5 files changed, 86 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleOptionsScreen.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/DoubleCommand.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/FloatCommand.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/DoubleCommandEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/FloatCommandEvent.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleOptionsScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleOptionsScreen.java new file mode 100644 index 000000000..572621b5a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleOptionsScreen.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.client; + +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.option.GameOptions; +import net.minecraft.text.Text; + +public class SimpleOptionsScreen extends SimpleScreen { + + protected final Screen parent; + protected final GameOptions gameOptions; + + public SimpleOptionsScreen(Text title, Screen parent, GameOptions gameOptions) { + super(title); + this.parent = parent; + this.gameOptions = gameOptions; + } + + @Override + public void removed() { + client.options.write(); + } + + @Override + public void close() { + client.setScreen(this.parent); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/DoubleCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/DoubleCommand.java new file mode 100644 index 000000000..74453b865 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/DoubleCommand.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.command.argument; + +import com.mojang.brigadier.arguments.DoubleArgumentType; +import net.pitan76.mcpitanlib.api.event.DoubleCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; + +public abstract class DoubleCommand extends RequiredCommand { + @Override + public DoubleArgumentType getArgumentType() { + return DoubleArgumentType.doubleArg(); + } + + public abstract void execute(DoubleCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((DoubleCommandEvent) event); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/FloatCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/FloatCommand.java new file mode 100644 index 000000000..1b178e01b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/FloatCommand.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.command.argument; + +import com.mojang.brigadier.arguments.FloatArgumentType; +import net.pitan76.mcpitanlib.api.event.FloatCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; + +public abstract class FloatCommand extends RequiredCommand { + @Override + public FloatArgumentType getArgumentType() { + return FloatArgumentType.floatArg(); + } + + public abstract void execute(FloatCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((FloatCommandEvent) event); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/DoubleCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/DoubleCommandEvent.java new file mode 100644 index 000000000..09fe6e051 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/DoubleCommandEvent.java @@ -0,0 +1,11 @@ +package net.pitan76.mcpitanlib.api.event; + +import com.mojang.brigadier.arguments.DoubleArgumentType; +import com.mojang.brigadier.arguments.FloatArgumentType; +import net.pitan76.mcpitanlib.api.command.argument.FloatCommand; + +public class DoubleCommandEvent extends RequiredCommandEvent { + public Double getValue() { + return DoubleArgumentType.getDouble(context, ((FloatCommand) getCommand()).getArgumentName()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/FloatCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/FloatCommandEvent.java new file mode 100644 index 000000000..931d4e194 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/FloatCommandEvent.java @@ -0,0 +1,10 @@ +package net.pitan76.mcpitanlib.api.event; + +import com.mojang.brigadier.arguments.FloatArgumentType; +import net.pitan76.mcpitanlib.api.command.argument.FloatCommand; + +public class FloatCommandEvent extends RequiredCommandEvent { + public Float getValue() { + return FloatArgumentType.getFloat(context, ((FloatCommand) getCommand()).getArgumentName()); + } +} From 2b46bac1ae48fbc85635982ba565a602120cb173 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 1 Mar 2024 15:40:16 +0900 Subject: [PATCH 279/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 3263f8e7e..30544b72b 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.3 +mod_version=2.1.4 maven_group=net.pitan76 \ No newline at end of file From 8ad280cb30c79508c971b45fbe9f7db5ae71215d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 00:46:13 +0900 Subject: [PATCH 280/617] add APIs --- .../api/client/SimpleHandledScreen.java | 10 ++ .../mcpitanlib/api/client/SimpleScreen.java | 10 ++ .../api/client/gui/screen/ScreenTexts.java | 21 ++++ .../api/command/argument/DoubleCommand.java | 2 +- .../api/event/DoubleCommandEvent.java | 5 +- .../mcpitanlib/api/util/SoundEventUtil.java | 27 +++++ .../util/client/widget/SimpleListWidget.java | 103 ++++++++++++++++++ .../client/widget/SimpleSliderWidget.java | 66 +++++++++++ info.properties | 2 +- 9 files changed, 241 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/ScreenTexts.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleSliderWidget.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 6fd41125b..bd43a54d7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -179,6 +179,10 @@ public boolean keyPressed(KeyEventArgs args) { return super.keyPressed(args.keyCode, args.scanCode, args.modifiers); } + public void renderBackgroundTexture(DrawObjectDM drawObjectDM) { + super.renderBackgroundTexture(drawObjectDM.getContext()); + } + @Deprecated @Override public boolean keyReleased(int keyCode, int scanCode, int modifiers) { @@ -190,4 +194,10 @@ public boolean keyReleased(int keyCode, int scanCode, int modifiers) { public boolean keyPressed(int keyCode, int scanCode, int modifiers) { return this.keyPressed(new KeyEventArgs(keyCode, scanCode, modifiers)); } + + @Deprecated + @Override + public void renderBackgroundTexture(DrawContext context) { + this.renderBackgroundTexture(new DrawObjectDM(context)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index bac4f62a8..0835e68a9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -117,6 +117,10 @@ public boolean keyPressed(KeyEventArgs args) { return super.keyPressed(args.keyCode, args.scanCode, args.modifiers); } + public void renderBackgroundTexture(DrawObjectDM drawObjectDM) { + super.renderBackgroundTexture(drawObjectDM.getContext()); + } + @Deprecated @Override public boolean keyReleased(int keyCode, int scanCode, int modifiers) { @@ -128,4 +132,10 @@ public boolean keyReleased(int keyCode, int scanCode, int modifiers) { public boolean keyPressed(int keyCode, int scanCode, int modifiers) { return this.keyPressed(new KeyEventArgs(keyCode, scanCode, modifiers)); } + + @Deprecated + @Override + public void renderBackgroundTexture(DrawContext context) { + this.renderBackgroundTexture(new DrawObjectDM(context)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/ScreenTexts.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/ScreenTexts.java new file mode 100644 index 000000000..da47fb543 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/ScreenTexts.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.client.gui.screen; + +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.util.TextUtil; + +public class ScreenTexts { + public static final Text ON = TextUtil.translatable("options.on"); + public static final Text OFF = TextUtil.translatable("options.off"); + public static final Text DONE = TextUtil.translatable("gui.done"); + public static final Text CANCEL = TextUtil.translatable("gui.cancel"); + public static final Text YES = TextUtil.translatable("gui.yes"); + public static final Text NO = TextUtil.translatable("gui.no"); + public static final Text PROCEED = TextUtil.translatable("gui.proceed"); + public static final Text BACK = TextUtil.translatable("gui.back"); + public static final Text CONNECT_FAILED = TextUtil.translatable("connect.failed"); + public static final Text LINE_BREAK = TextUtil.literal("\n"); + public static final Text SENTENCE_SEPARATOR = TextUtil.literal(". "); + + public ScreenTexts() { + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/DoubleCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/DoubleCommand.java index 74453b865..b8ede9b0d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/DoubleCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/DoubleCommand.java @@ -4,7 +4,7 @@ import net.pitan76.mcpitanlib.api.event.DoubleCommandEvent; import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; -public abstract class DoubleCommand extends RequiredCommand { +public abstract class DoubleCommand extends RequiredCommand { @Override public DoubleArgumentType getArgumentType() { return DoubleArgumentType.doubleArg(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/DoubleCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/DoubleCommandEvent.java index 09fe6e051..b67d482a7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/DoubleCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/DoubleCommandEvent.java @@ -1,11 +1,10 @@ package net.pitan76.mcpitanlib.api.event; import com.mojang.brigadier.arguments.DoubleArgumentType; -import com.mojang.brigadier.arguments.FloatArgumentType; -import net.pitan76.mcpitanlib.api.command.argument.FloatCommand; +import net.pitan76.mcpitanlib.api.command.argument.DoubleCommand; public class DoubleCommandEvent extends RequiredCommandEvent { public Double getValue() { - return DoubleArgumentType.getDouble(context, ((FloatCommand) getCommand()).getArgumentName()); + return DoubleArgumentType.getDouble(context, ((DoubleCommand) getCommand()).getArgumentName()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java new file mode 100644 index 000000000..dc0b47099 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.registry.Registries; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class SoundEventUtil { + public static Identifier getId(SoundEvent soundEvent) { + return soundEvent.getId(); + } + + public static SoundEvent getSoundEvent(Identifier id) { + return SoundEvent.of(id); + } + + public static List getAllSoundEvents() { + return Registries.SOUND_EVENT.stream().collect(Collectors.toList()); + } + + public static List getAllSoundEventIds() { + return new ArrayList<>(Registries.SOUND_EVENT.getIds()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java new file mode 100644 index 000000000..54d67d7da --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java @@ -0,0 +1,103 @@ +package net.pitan76.mcpitanlib.api.util.client.widget; + +import com.google.common.collect.ImmutableList; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.Selectable; +import net.minecraft.client.gui.widget.ClickableWidget; +import net.minecraft.client.gui.widget.ElementListWidget; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.Optional; + +@Environment(EnvType.CLIENT) +public class SimpleListWidget extends ElementListWidget { + + public SimpleListWidget(MinecraftClient client, int width, int height, int top, int bottom, int itemHeight) { + this(client, width, bottom - top, top, itemHeight); + } + + public SimpleListWidget(MinecraftClient client, int width, int height, int y, int itemHeight) { + super(client, width, height, y, itemHeight); + this.centerListVertically = false; + } + + public void add(ClickableWidget widget) { + super.addEntry(WidgetEntry.create(widget)); + } + + @Override + public int getRowWidth() { + return 400; + } + + public int getWidth() { + return this.width; + } + + public int getHeight() { + return this.height; + } + + @Override + protected int getScrollbarPositionX() { + return super.getScrollbarPositionX() + 32; + } + + @Nullable + public ClickableWidget getWidget(int index) { + if (index < 0 || index >= this.children().size()) { + return null; + } + return this.children().get(index).getWidget(); + } + + public Optional getHoveredWidget(double mouseX, double mouseY) { + for (WidgetEntry entry : this.children()) { + if (entry.getWidget().isMouseOver(mouseX, mouseY)) { + return Optional.of(entry.getWidget()); + } + } + return Optional.empty(); + } + + @Environment(EnvType.CLIENT) + public static class WidgetEntry extends Entry { + protected final ClickableWidget widget; + + public WidgetEntry(ClickableWidget widget) { + this.widget = widget; + } + + public static WidgetEntry create(ClickableWidget widget) { + return new WidgetEntry(widget); + } + + @Deprecated + @Override + public void render(DrawContext matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + widget.setY(y); + widget.render(matrices, mouseX, mouseY, tickDelta); + } + + @Deprecated + @Override + public List children() { + return ImmutableList.of(widget); + } + + @Deprecated + @Override + public List selectableChildren() { + return ImmutableList.of(widget); + } + + public ClickableWidget getWidget() { + return widget; + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleSliderWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleSliderWidget.java new file mode 100644 index 000000000..3d1a120b5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleSliderWidget.java @@ -0,0 +1,66 @@ +package net.pitan76.mcpitanlib.api.util.client.widget; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.widget.SliderWidget; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.util.TextUtil; + +import java.util.function.Consumer; +import java.util.function.Function; + +@Environment(EnvType.CLIENT) +public class SimpleSliderWidget extends SliderWidget { + protected final Function textGetter; + protected final Consumer changeCallback; + + public SimpleSliderWidget(int x, int y, int width, int height, Text text, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { + super(x, y, width, height, text, defaultValue); + this.textGetter = (Double value) -> valueTextGetter.get(text, value); + this.changeCallback = changeCallback; + this.updateMessage(); + } + public SimpleSliderWidget(int x, int y, int width, int height, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { + this(x, y, width, height, TextUtil.empty(), defaultValue, valueTextGetter, changeCallback); + } + + public SimpleSliderWidget(int x, int y, int width, Text text, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { + this(x, y, width, 20, text, defaultValue, valueTextGetter, changeCallback); + } + + public SimpleSliderWidget(int x, int y, int width, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { + this(x, y, width, 20, defaultValue, valueTextGetter, changeCallback); + } + + public SimpleSliderWidget(SimpleListWidget listWidget, int width, Text text, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { + this(listWidget.getWidth() / 2 - 155, 0, width, 20, text, defaultValue, valueTextGetter, changeCallback); + } + + public SimpleSliderWidget(SimpleListWidget listWidget, int width, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { + this(listWidget, width, TextUtil.empty(), defaultValue, valueTextGetter, changeCallback); + } + + public void setValue(double value) { + super.value = value; + } + + public double getValue() { + return super.value; + } + + @Override + protected void updateMessage() { + this.setMessage(this.textGetter.apply(this.getValue())); + } + + @Override + protected void applyValue() { + this.changeCallback.accept(this.getValue()); + } + + @Environment(EnvType.CLIENT) + @FunctionalInterface + public interface ValueTextGetter { + Text get(Text optionText, Double value); + } +} diff --git a/info.properties b/info.properties index 30544b72b..d32afc1c5 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.4 +mod_version=2.1.5 maven_group=net.pitan76 \ No newline at end of file From f2b2590e82aab1fda7bf017401aab45ef8dfdef6 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 00:48:34 +0900 Subject: [PATCH 281/617] 1201 --- .../mcpitanlib/api/util/client/widget/SimpleListWidget.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java index 54d67d7da..9c3c37693 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java @@ -18,12 +18,12 @@ public class SimpleListWidget extends ElementListWidget { public SimpleListWidget(MinecraftClient client, int width, int height, int top, int bottom, int itemHeight) { - this(client, width, bottom - top, top, itemHeight); + super(client, width, height, top, bottom, itemHeight); + this.centerListVertically = false; } public SimpleListWidget(MinecraftClient client, int width, int height, int y, int itemHeight) { - super(client, width, height, y, itemHeight); - this.centerListVertically = false; + this(client, width, height, y, y + height, itemHeight); } public void add(ClickableWidget widget) { From ee3c41b35f9cda7b78c7ad1a02edc3748bb77a6e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 00:54:10 +0900 Subject: [PATCH 282/617] 1192 --- .../net/pitan76/mcpitanlib/api/util/SoundEventUtil.java | 8 ++++---- .../api/util/client/widget/SimpleListWidget.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java index dc0b47099..e475ea725 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.util; -import net.minecraft.registry.Registries; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import java.util.ArrayList; import java.util.List; @@ -14,14 +14,14 @@ public static Identifier getId(SoundEvent soundEvent) { } public static SoundEvent getSoundEvent(Identifier id) { - return SoundEvent.of(id); + return new SoundEvent(id); } public static List getAllSoundEvents() { - return Registries.SOUND_EVENT.stream().collect(Collectors.toList()); + return Registry.SOUND_EVENT.stream().collect(Collectors.toList()); } public static List getAllSoundEventIds() { - return new ArrayList<>(Registries.SOUND_EVENT.getIds()); + return new ArrayList<>(Registry.SOUND_EVENT.getIds()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java index 9c3c37693..314d2493b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java @@ -4,11 +4,11 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.ElementListWidget; +import net.minecraft.client.util.math.MatrixStack; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -79,8 +79,8 @@ public static WidgetEntry create(ClickableWidget widget) { @Deprecated @Override - public void render(DrawContext matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - widget.setY(y); + public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + widget.y = y; widget.render(matrices, mouseX, mouseY, tickDelta); } From 04fc810bedd7963ef23bf9f21732cf95d2d82d1e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 4 Mar 2024 01:04:02 +0900 Subject: [PATCH 283/617] fix apis --- .../api/client/SimpleHandledScreen.java | 9 ++--- .../mcpitanlib/api/client/SimpleScreen.java | 9 ++--- .../gui}/widget/SimpleListWidget.java | 2 +- .../gui}/widget/SimpleSliderWidget.java | 2 +- .../screen/RenderBackgroundTextureArgs.java | 34 +++++++++++++++++++ 5 files changed, 46 insertions(+), 10 deletions(-) rename common/src/main/java/net/pitan76/mcpitanlib/api/{util/client => client/gui}/widget/SimpleListWidget.java (98%) rename common/src/main/java/net/pitan76/mcpitanlib/api/{util/client => client/gui}/widget/SimpleSliderWidget.java (98%) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/render/screen/RenderBackgroundTextureArgs.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index bd43a54d7..2f5f0feba 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -15,6 +15,7 @@ import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; +import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; public abstract class SimpleHandledScreen extends HandledScreen { @@ -179,8 +180,8 @@ public boolean keyPressed(KeyEventArgs args) { return super.keyPressed(args.keyCode, args.scanCode, args.modifiers); } - public void renderBackgroundTexture(DrawObjectDM drawObjectDM) { - super.renderBackgroundTexture(drawObjectDM.getContext()); + public void renderBackgroundTexture(RenderBackgroundTextureArgs args) { + super.renderBackgroundTexture(args.getvOffset()); } @Deprecated @@ -197,7 +198,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { @Deprecated @Override - public void renderBackgroundTexture(DrawContext context) { - this.renderBackgroundTexture(new DrawObjectDM(context)); + public void renderBackgroundTexture(int vOffset) { + this.renderBackgroundTexture(new RenderBackgroundTextureArgs(null, vOffset)); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index 0835e68a9..f0e7c04ee 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -14,6 +14,7 @@ import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; +import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; public abstract class SimpleScreen extends Screen { @@ -117,8 +118,8 @@ public boolean keyPressed(KeyEventArgs args) { return super.keyPressed(args.keyCode, args.scanCode, args.modifiers); } - public void renderBackgroundTexture(DrawObjectDM drawObjectDM) { - super.renderBackgroundTexture(drawObjectDM.getContext()); + public void renderBackgroundTexture(RenderBackgroundTextureArgs args) { + super.renderBackgroundTexture(args.getvOffset()); } @Deprecated @@ -135,7 +136,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { @Deprecated @Override - public void renderBackgroundTexture(DrawContext context) { - this.renderBackgroundTexture(new DrawObjectDM(context)); + public void renderBackgroundTexture(int vOffset) { + this.renderBackgroundTexture(new RenderBackgroundTextureArgs(null, vOffset)); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java similarity index 98% rename from common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java index 314d2493b..6bbc33558 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java @@ -1,4 +1,4 @@ -package net.pitan76.mcpitanlib.api.util.client.widget; +package net.pitan76.mcpitanlib.api.client.gui.widget; import com.google.common.collect.ImmutableList; import net.fabricmc.api.EnvType; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleSliderWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java similarity index 98% rename from common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleSliderWidget.java rename to common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java index 3d1a120b5..36509aee5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/SimpleSliderWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java @@ -1,4 +1,4 @@ -package net.pitan76.mcpitanlib.api.util.client.widget; +package net.pitan76.mcpitanlib.api.client.gui.widget; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/screen/RenderBackgroundTextureArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/screen/RenderBackgroundTextureArgs.java new file mode 100644 index 000000000..610b56280 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/screen/RenderBackgroundTextureArgs.java @@ -0,0 +1,34 @@ +package net.pitan76.mcpitanlib.api.client.render.screen; + +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; + +public class RenderBackgroundTextureArgs { + public DrawObjectDM drawObjectDM; + int vOffset; + + public RenderBackgroundTextureArgs(DrawObjectDM drawObjectDM, int vOffset) { + this.drawObjectDM = drawObjectDM; + this.vOffset = vOffset; + } + + public RenderBackgroundTextureArgs(RenderArgs args) { + this(args.drawObjectDM, 0); + } + + public DrawObjectDM getDrawObjectDM() { + return drawObjectDM; + } + + public int getvOffset() { + return vOffset; + } + + public void setDrawObjectDM(DrawObjectDM drawObjectDM) { + this.drawObjectDM = drawObjectDM; + } + + public void setvOffset(int vOffset) { + this.vOffset = vOffset; + } +} From 138cf47f5d5c259d06f8a6cfd8927d6107cc3077 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 14:57:59 +0900 Subject: [PATCH 284/617] gradle --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 8543cd50c..b5c8cb56b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,9 +6,9 @@ minecraft_version=1.18.2 architectury_version=4.11.90 # https://fabricmc.net/develop/ -fabric_loader_version=0.14.10 +fabric_loader_version=0.15.7 yarn_mappings=1.18.2+build.4 -fabric_api_version=0.58.0+1.18.2 +fabric_api_version=0.77.0+1.18.2 # https://files.minecraftforge.net/net/minecraftforge/forge/ forge_version=1.18.2-40.2.0 From a43a1d1643c36f49a158f6c953cb5fc0eacbd7d2 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:09:37 +0900 Subject: [PATCH 285/617] update loom --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f4896a499..209107d25 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "0.11.0-SNAPSHOT" apply false + id "dev.architectury.loom" version "0.12.0-SNAPSHOT" apply false } architectury { From f65dd08cd8ba84a6b7309bc49305cda21ec5af5c Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:19:54 +0900 Subject: [PATCH 286/617] update loom --- .../java/net/pitan76/mcpitanlib/api/text/TextComponent.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java index c1a834c17..042977e26 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java @@ -3,8 +3,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.pitan76.mcpitanlib.api.util.TextUtil; - -import javax.annotation.Nullable; +import org.jetbrains.annotations.Nullable; public class TextComponent { From eb5d7db5d2462c7d9efb6a01c0429a553ac9e226 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:28:05 +0900 Subject: [PATCH 287/617] update loom --- build.gradle | 2 +- fabric/build.gradle | 6 +++--- forge/build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- quilt/build.gradle | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 209107d25..4f40dea7d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "0.12.0-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.5-SNAPSHOT" apply false } architectury { diff --git a/fabric/build.gradle b/fabric/build.gradle index 4167f102b..e8af491ff 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -51,18 +51,18 @@ shadowJar { exclude "architectury.common.json" configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { injectAccessWidener = true inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" } sourcesJar { diff --git a/forge/build.gradle b/forge/build.gradle index cd9cbcb00..aa3e3fc81 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -57,17 +57,17 @@ shadowJar { exclude "fabric.mod.json" configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" } sourcesJar { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e6e5897b..db9a6b825 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/quilt/build.gradle b/quilt/build.gradle index ee067a98e..316fda87e 100644 --- a/quilt/build.gradle +++ b/quilt/build.gradle @@ -50,18 +50,18 @@ shadowJar { exclude "architectury.common.json" configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { injectAccessWidener = true inputFile.set shadowJar.archiveFile dependsOn shadowJar - classifier null + archiveClassifier.set null } jar { - classifier "dev" + archiveClassifier.set "dev" } sourcesJar { From 24d4d80dfc5718027e8c8bc9d17f64dee03eb47e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 16:05:38 +0900 Subject: [PATCH 288/617] update loom --- .../mcpitanlib/api/client/SimpleHandledScreen.java | 4 ++++ .../pitan76/mcpitanlib/api/client/SimpleScreen.java | 4 ++++ .../api/client/gui/widget/SimpleListWidget.java | 11 +++++++++++ .../api/client/gui/widget/SimpleSliderWidget.java | 12 ++++++++++++ info.properties | 2 +- 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 2f5f0feba..6bbd88e60 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -36,6 +36,10 @@ public T addDrawableChild_compatibil // addButton } + public T addSelectableChild_compatibility(T selectableElement) { + return super.addSelectableChild(selectableElement); + } + public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWidget widget) { return addDrawableChild_compatibility(widget); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index f0e7c04ee..bfb60e002 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -32,6 +32,10 @@ public T addDrawableChild_compatibil // addButton } + public T addSelectableChild_compatibility(T selectableElement) { + return super.addSelectableChild(selectableElement); + } + public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWidget widget) { return addDrawableChild_compatibility(widget); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java index 6bbc33558..bfc76f391 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java @@ -9,6 +9,8 @@ import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.ElementListWidget; import net.minecraft.client.util.math.MatrixStack; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -65,6 +67,15 @@ public Optional getHoveredWidget(double mouseX, double mouseY) return Optional.empty(); } + @Override + public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + this.render(new RenderArgs(new DrawObjectDM(matrices), mouseX, mouseY, delta)); + } + + public void render(RenderArgs args) { + super.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); + } + @Environment(EnvType.CLIENT) public static class WidgetEntry extends Entry { protected final ClickableWidget widget; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java index 36509aee5..a0d5a4394 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java @@ -3,7 +3,10 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.widget.SliderWidget; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.util.TextUtil; import java.util.function.Consumer; @@ -39,6 +42,15 @@ public SimpleSliderWidget(SimpleListWidget listWidget, int width, Text text, dou public SimpleSliderWidget(SimpleListWidget listWidget, int width, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { this(listWidget, width, TextUtil.empty(), defaultValue, valueTextGetter, changeCallback); } + + @Override + public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + this.render(new RenderArgs(new DrawObjectDM(matrices), mouseX, mouseY, delta)); + } + + public void render(RenderArgs args) { + super.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); + } public void setValue(double value) { super.value = value; diff --git a/info.properties b/info.properties index d32afc1c5..ece52162e 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.5 +mod_version=2.1.6 maven_group=net.pitan76 \ No newline at end of file From 9892cd443905a29b2f137d634448616f333e195b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 4 Mar 2024 20:33:42 +0900 Subject: [PATCH 289/617] fix apis --- .../mcpitanlib/api/client/gui/widget/SimpleListWidget.java | 6 ++++++ .../api/client/gui/widget/SimpleSliderWidget.java | 2 ++ info.properties | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java index bfc76f391..ec0790945 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java @@ -92,6 +92,12 @@ public static WidgetEntry create(ClickableWidget widget) { @Override public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { widget.y = y; + if (widget instanceof SimpleSliderWidget) { + SimpleSliderWidget slider = (SimpleSliderWidget) widget; + if (y + slider.getHeight() > slider.listWidget.getHeight()) + return; + + } widget.render(matrices, mouseX, mouseY, tickDelta); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java index a0d5a4394..b346390ac 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleSliderWidget.java @@ -16,6 +16,7 @@ public class SimpleSliderWidget extends SliderWidget { protected final Function textGetter; protected final Consumer changeCallback; + public SimpleListWidget listWidget = null; public SimpleSliderWidget(int x, int y, int width, int height, Text text, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { super(x, y, width, height, text, defaultValue); @@ -37,6 +38,7 @@ public SimpleSliderWidget(int x, int y, int width, double defaultValue, ValueTex public SimpleSliderWidget(SimpleListWidget listWidget, int width, Text text, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { this(listWidget.getWidth() / 2 - 155, 0, width, 20, text, defaultValue, valueTextGetter, changeCallback); + this.listWidget = listWidget; } public SimpleSliderWidget(SimpleListWidget listWidget, int width, double defaultValue, ValueTextGetter valueTextGetter, Consumer changeCallback) { diff --git a/info.properties b/info.properties index ece52162e..c2f9ccc29 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.6 +mod_version=2.1.7 maven_group=net.pitan76 \ No newline at end of file From e048810244419efb1756b559a2960010702bd049 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 21:29:34 +0900 Subject: [PATCH 290/617] fix apis --- .../mcpitanlib/api/client/gui/widget/SimpleListWidget.java | 2 +- info.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java index ec0790945..3c85b3425 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java @@ -94,7 +94,7 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth widget.y = y; if (widget instanceof SimpleSliderWidget) { SimpleSliderWidget slider = (SimpleSliderWidget) widget; - if (y + slider.getHeight() > slider.listWidget.getHeight()) + if (y + slider.getHeight() > slider.listWidget.getY() + slider.listWidget.getHeight()) return; } diff --git a/info.properties b/info.properties index c2f9ccc29..07c914c9d 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.7 +mod_version=2.1.8 maven_group=net.pitan76 \ No newline at end of file From a8f406133e720ed5d0c971107683998c81c92493 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 21:55:03 +0900 Subject: [PATCH 291/617] fix apis2 --- .../mcpitanlib/api/client/gui/widget/SimpleListWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java index 3c85b3425..303fc954e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java @@ -94,7 +94,7 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth widget.y = y; if (widget instanceof SimpleSliderWidget) { SimpleSliderWidget slider = (SimpleSliderWidget) widget; - if (y + slider.getHeight() > slider.listWidget.getY() + slider.listWidget.getHeight()) + if (y + slider.getHeight() > slider.listWidget.top + slider.listWidget.getHeight()) return; } From a6cf0fa8d712557932dd3e47a0395860e8608b94 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 4 Mar 2024 22:07:34 +0900 Subject: [PATCH 292/617] fix apis3 --- .../mcpitanlib/api/client/gui/widget/SimpleListWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java index 303fc954e..6c3a6488a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java @@ -94,7 +94,7 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth widget.y = y; if (widget instanceof SimpleSliderWidget) { SimpleSliderWidget slider = (SimpleSliderWidget) widget; - if (y + slider.getHeight() > slider.listWidget.top + slider.listWidget.getHeight()) + if (y >= slider.listWidget.top + slider.listWidget.getHeight()) return; } From 1d74afd16ddebc9d4ddd2ec7424ce197816e1f1f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 4 Mar 2024 22:52:37 +0900 Subject: [PATCH 293/617] fix apis4 --- .../api/client/SimpleHandledScreen.java | 18 ++++++++++++++++++ .../mcpitanlib/api/client/SimpleScreen.java | 18 ++++++++++++++++++ .../client/gui/widget/SimpleListWidget.java | 9 ++------- .../mcpitanlib/api/util/client/ClientUtil.java | 14 ++++++++++++++ 4 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 6bbd88e60..3f5f8c643 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -205,4 +205,22 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { public void renderBackgroundTexture(int vOffset) { this.renderBackgroundTexture(new RenderBackgroundTextureArgs(null, vOffset)); } + + public void closeOverride() { + super.close(); + } + + public void removedOverride() { + super.removed(); + } + + @Override + public void close() { + closeOverride(); + } + + @Override + public void removed() { + removedOverride(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index bfb60e002..abfb6a3f6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -143,4 +143,22 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { public void renderBackgroundTexture(int vOffset) { this.renderBackgroundTexture(new RenderBackgroundTextureArgs(null, vOffset)); } + + public void closeOverride() { + super.close(); + } + + public void removedOverride() { + super.removed(); + } + + @Override + public void close() { + closeOverride(); + } + + @Override + public void removed() { + removedOverride(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java index 6c3a6488a..f261538ba 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/SimpleListWidget.java @@ -25,7 +25,7 @@ public SimpleListWidget(MinecraftClient client, int width, int height, int top, } public SimpleListWidget(MinecraftClient client, int width, int height, int y, int itemHeight) { - this(client, width, height, y, y + height, itemHeight); + this(client, width, height, y, height - y, itemHeight); } public void add(ClickableWidget widget) { @@ -67,6 +67,7 @@ public Optional getHoveredWidget(double mouseX, double mouseY) return Optional.empty(); } + @Deprecated @Override public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { this.render(new RenderArgs(new DrawObjectDM(matrices), mouseX, mouseY, delta)); @@ -92,12 +93,6 @@ public static WidgetEntry create(ClickableWidget widget) { @Override public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { widget.y = y; - if (widget instanceof SimpleSliderWidget) { - SimpleSliderWidget slider = (SimpleSliderWidget) widget; - if (y >= slider.listWidget.top + slider.listWidget.getHeight()) - return; - - } widget.render(matrices, mouseX, mouseY, tickDelta); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java new file mode 100644 index 000000000..695b74065 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java @@ -0,0 +1,14 @@ +package net.pitan76.mcpitanlib.api.util.client; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; + +public class ClientUtil { + public static void setScreen(Screen screen) { + MinecraftClient.getInstance().setScreen(screen); + } + + public static Screen getScreen() { + return MinecraftClient.getInstance().currentScreen; + } +} From a63fba0823055ee733be18e98bd0682bae8bd6d0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:39:16 +0900 Subject: [PATCH 294/617] fix apis --- .../mcpitanlib/api/client/SimpleHandledScreen.java | 9 +++++++++ .../net/pitan76/mcpitanlib/api/client/SimpleScreen.java | 8 ++++++++ info.properties | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 3f5f8c643..fb8d9e20e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -25,10 +25,15 @@ public abstract class SimpleHandledScreen extends HandledScreen { public TextRenderer textRenderer; public ItemRenderer itemRenderer; + public Text title; + public MinecraftClient client; + public SimpleHandledScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { super(handler, inventory, title); fixScreen(); this.handler = handler; + this.title = title; + } public T addDrawableChild_compatibility(T drawableElement) { @@ -119,6 +124,10 @@ public void fixScreen() { this.itemRenderer = super.itemRenderer; this.width = super.width; this.height = super.height; + if (super.client == null) + this.client = MinecraftClient.getInstance(); + else + this.client = super.client; } public void setX(int x) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index abfb6a3f6..e37e7d7b5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -22,9 +22,13 @@ public abstract class SimpleScreen extends Screen { public TextRenderer textRenderer; public ItemRenderer itemRenderer; + public Text title; + public MinecraftClient client; + public SimpleScreen(Text title) { super(title); fixScreen(); + this.title = title; } public T addDrawableChild_compatibility(T drawableElement) { @@ -86,6 +90,10 @@ public void fixScreen() { this.itemRenderer = MinecraftClient.getInstance().getItemRenderer(); this.width = super.width; this.height = super.height; + if (super.client == null) + this.client = MinecraftClient.getInstance(); + else + this.client = super.client; } public void setTextRenderer(TextRenderer textRenderer) { diff --git a/info.properties b/info.properties index 07c914c9d..fa268962b 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.8 +mod_version=2.1.9 maven_group=net.pitan76 \ No newline at end of file From 2f0c031be6342b8bbe23ff6e255c20b7e2534e7c Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 10 Mar 2024 00:49:08 +0900 Subject: [PATCH 295/617] add fix API (all) --- .../pitan76/mcpitanlib/api/entity/Player.java | 6 +- .../api/item/ArmorEquipmentType.java | 3 + .../api/item/CompatibleArmorItem.java | 2 +- .../api/item/CompatibleArmorMaterial.java | 72 +++++++++++++++---- .../api/timer/MinecraftServerTimerAccess.java | 2 +- .../api/timer/ServerWorldTimerAccess.java | 2 +- .../mcpitanlib/api/util/TimerUtil.java | 4 +- .../mcpitanlib/mixin/AbstractBlockMixin.java | 12 ++-- .../pitan76/mcpitanlib/mixin/BlockMixin.java | 4 +- .../pitan76/mcpitanlib/mixin/ItemMixin.java | 16 ++--- .../mcpitanlib/mixin/ItemStackMixin.java | 2 +- .../mixin/MinecraftServerTimer.java | 14 ++-- .../mcpitanlib/mixin/RecipeManagerMixin.java | 2 +- .../mcpitanlib/mixin/ServerWorldTimer.java | 12 ++-- 14 files changed, 102 insertions(+), 51 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 7f8e101be..64657bf49 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -251,7 +251,11 @@ public float getPitch() { } public void playSound(SoundEvent event, SoundCategory category, float volume, float pitch) { - getEntity().playSound(event, category, volume, pitch); + playSound(event, volume, pitch); + } + + public void playSound(SoundEvent event, float volume, float pitch) { + getEntity().playSound(event, volume, pitch); } public ItemCooldown itemCooldown = new ItemCooldown(this); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java index 9b68fb13a..868d80a9b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java @@ -11,6 +11,9 @@ public class ArmorEquipmentType { public static ArmorEquipmentType LEGS = new ArmorEquipmentType(EquipmentSlot.LEGS); public static ArmorEquipmentType FEET = new ArmorEquipmentType(EquipmentSlot.FEET); + // New type for animals from 1.20.5 + public static ArmorEquipmentType BODY = new ArmorEquipmentType(EquipmentSlot.BODY, ArmorItem.Type.BODY); + protected final EquipmentSlot slot; protected ArmorEquipmentType(EquipmentSlot slot) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java index e0fba3a48..82244034e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java @@ -6,7 +6,7 @@ public class CompatibleArmorItem extends ArmorItem implements ExtendItemProvider public final ArmorEquipmentType type; public CompatibleArmorItem(CompatibleArmorMaterial material, ArmorEquipmentType type, CompatibleItemSettings settings) { - super(material, type.getSlot(), settings.build()); + super(material.build(), type.getSlot(), settings.build()); this.type = type; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java index 90bee44df..bf93b9d66 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java @@ -3,34 +3,78 @@ import net.minecraft.entity.EquipmentSlot; import net.minecraft.item.ArmorMaterial; import net.minecraft.recipe.Ingredient; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; +import net.minecraft.util.Identifier; +import net.minecraft.util.Util; -public interface CompatibleArmorMaterial extends ArmorMaterial { +import java.util.EnumMap; +import java.util.List; +import java.util.function.Supplier; + +public interface CompatibleArmorMaterial { int getDurability(ArmorEquipmentType type); int getProtection(ArmorEquipmentType type); - @Override - @Deprecated - default int getDurability(EquipmentSlot slot) { - return getDurability(ArmorEquipmentType.of(slot)); - } - - @Override - @Deprecated - default int getProtectionAmount(EquipmentSlot slot) { - return getProtection(ArmorEquipmentType.of(slot)); - } - int getEnchantability(); SoundEvent getEquipSound(); Ingredient getRepairIngredient(); - String getName(); + /** + * @return the name of the material + */ + default String getName() { + return getId().getPath(); + } + + /** + * @return the id of the material + */ + Identifier getId(); float getToughness(); float getKnockbackResistance(); + + @Deprecated + default RegistryEntry build() { + if (CompatibleArmorItem.CACHE.containsKey(this)) { + return CompatibleArmorItem.CACHE.get(this); + } + + RegistryEntry entry = register(getId(), Util.make(new EnumMap<>(ArmorItem.Type.class), (map) -> { + map.put(ArmorItem.Type.HELMET, this.getProtection(ArmorEquipmentType.HEAD)); + map.put(ArmorItem.Type.CHESTPLATE, this.getProtection(ArmorEquipmentType.CHEST)); + map.put(ArmorItem.Type.LEGGINGS, this.getProtection(ArmorEquipmentType.LEGS)); + map.put(ArmorItem.Type.BOOTS, this.getProtection(ArmorEquipmentType.FEET)); + + map.put(ArmorItem.Type.BODY, this.getProtection(ArmorEquipmentType.BODY)); + }), getEnchantability(), SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, getToughness(), getKnockbackResistance(), + this::getRepairIngredient + ); + CompatibleArmorItem.CACHE.put(this, entry); + return entry; + } + + private static RegistryEntry register(Identifier id, EnumMap defense, int enchantability, RegistryEntry equipSound, float toughness, float knockbackResistance, Supplier repairIngredient) { + List list = List.of(new ArmorMaterial.Layer(id)); + return register(id, defense, enchantability, equipSound, toughness, knockbackResistance, repairIngredient, list); + } + + private static RegistryEntry register(Identifier id, EnumMap defense, int enchantability, RegistryEntry equipSound, float toughness, float knockbackResistance, Supplier repairIngredient, List layers) { + EnumMap enumMap = new EnumMap<>(ArmorItem.Type.class); + ArmorItem.Type[] var9 = ArmorItem.Type.values(); + + for (ArmorItem.Type type : var9) { + enumMap.put(type, defense.get(type)); + } + + return Registry.registerReference(Registries.ARMOR_MATERIAL, id, new ArmorMaterial(enumMap, enchantability, equipSound, repairIngredient, layers, toughness, knockbackResistance)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/timer/MinecraftServerTimerAccess.java b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/MinecraftServerTimerAccess.java index 6d4c81259..58e042b3e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/timer/MinecraftServerTimerAccess.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/MinecraftServerTimerAccess.java @@ -3,5 +3,5 @@ import java.util.function.Supplier; public interface MinecraftServerTimerAccess { - void addTimer(long ticksUntilSomething, Supplier supplier); + void mcpitanlib$addTimer(long ticksUntilSomething, Supplier supplier); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/timer/ServerWorldTimerAccess.java b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/ServerWorldTimerAccess.java index 01eeb5f27..8dbd2dc14 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/timer/ServerWorldTimerAccess.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/timer/ServerWorldTimerAccess.java @@ -3,5 +3,5 @@ import java.util.function.Supplier; public interface ServerWorldTimerAccess { - void addTimer(long ticksUntilSomething, Supplier supplier); + void mcpitanlib$addTimer(long ticksUntilSomething, Supplier supplier); } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java index 7018af034..eaf08acdb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TimerUtil.java @@ -9,10 +9,10 @@ public class TimerUtil { public static void addTimer(ServerWorld world, long ticksUntilSomething, Supplier supplier) { - ((ServerWorldTimerAccess) world).addTimer(ticksUntilSomething, supplier); + ((ServerWorldTimerAccess) world).mcpitanlib$addTimer(ticksUntilSomething, supplier); } public static void addTimer(MinecraftServer server, long ticksUntilSomething, Supplier supplier) { - ((MinecraftServerTimerAccess) server).addTimer(ticksUntilSomething, supplier); + ((MinecraftServerTimerAccess) server).mcpitanlib$addTimer(ticksUntilSomething, supplier); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java index 9b37d9712..d5cea5d55 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java @@ -28,7 +28,7 @@ @Mixin(AbstractBlock.class) public class AbstractBlockMixin { @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) - private void inject_getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + private void mcpitanlib$inject_getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); @@ -39,7 +39,7 @@ private void inject_getCollisionShape(BlockState state, BlockView world, BlockPo } @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void inject_getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + private void mcpitanlib$inject_getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); @@ -50,7 +50,7 @@ private void inject_getOutlineShape(BlockState state, BlockView world, BlockPos } @Inject(method = "scheduledTick", at = @At("HEAD"), cancellable = true) - private void inject_scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random, CallbackInfo ci) { + private void mcpitanlib$inject_scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random, CallbackInfo ci) { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); @@ -61,7 +61,7 @@ private void inject_scheduledTick(BlockState state, ServerWorld world, BlockPos } @Inject(method = "onUse", at = @At("HEAD"), cancellable = true) - private void inject_onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { + private void mcpitanlib$inject_onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); @@ -72,7 +72,7 @@ private void inject_onUse(BlockState state, World world, BlockPos pos, PlayerEnt } @Inject(method = "createScreenHandlerFactory", at = @At("HEAD"), cancellable = true) - private void inject_createScreenHandlerFactory(BlockState state, World world, BlockPos pos, CallbackInfoReturnable cir) { + private void mcpitanlib$inject_createScreenHandlerFactory(BlockState state, World world, BlockPos pos, CallbackInfoReturnable cir) { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); @@ -84,7 +84,7 @@ private void inject_createScreenHandlerFactory(BlockState state, World world, Bl } @Inject(method = "onStateReplaced", at = @At("HEAD"), cancellable = true) - private void inject_onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved, CallbackInfo ci) { + private void mcpitanlib$inject_onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved, CallbackInfo ci) { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java index e5b15a4df..df8b72837 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java @@ -24,7 +24,7 @@ public class BlockMixin { @Inject(method = "onPlaced", at = @At("HEAD"), cancellable = true) - private void inject_onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack, CallbackInfo ci) { + private void mcpitanlib$onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack, CallbackInfo ci) { // イベントを呼び出す if (!BlockEventRegistry.ON_PLACED.isEmpty()) { int maxPriority = BlockEventRegistry.ON_PLACED.getMaxPriority(); @@ -46,7 +46,7 @@ private void inject_onPlaced(World world, BlockPos pos, BlockState state, Living } @Inject(method = "onBreak", at = @At("HEAD"), cancellable = true) - private void inject_onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfo ci) { + private void mcpitanlib$onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfo ci) { // イベントを呼び出す if (!BlockEventRegistry.ON_BREAK.isEmpty()) { int maxPriority = BlockEventRegistry.ON_BREAK.getMaxPriority(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index c1dc0e421..7ca2872b2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -27,7 +27,7 @@ @Mixin(Item.class) public class ItemMixin { @Inject(method = "use", at = @At("HEAD"), cancellable = true) - private void use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> cir) { + private void mcpitanlib$use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); @@ -38,7 +38,7 @@ private void use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnab } @Inject(method = "useOnBlock", at = @At("HEAD"), cancellable = true) - private void useOnBlock(ItemUsageContext context, CallbackInfoReturnable cir) { + private void mcpitanlib$useOnBlock(ItemUsageContext context, CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; @@ -50,7 +50,7 @@ private void useOnBlock(ItemUsageContext context, CallbackInfoReturnable cir) { + private void mcpitanlib$useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand, CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); @@ -61,7 +61,7 @@ private void useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity } @Inject(method = "finishUsing", at = @At("HEAD"), cancellable = true) - private void finishUsing(ItemStack stack, World world, LivingEntity user, CallbackInfoReturnable cir) { + private void mcpitanlib$finishUsing(ItemStack stack, World world, LivingEntity user, CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); @@ -72,7 +72,7 @@ private void finishUsing(ItemStack stack, World world, LivingEntity user, Callba } @Inject(method = "hasRecipeRemainder", at = @At("HEAD"), cancellable = true) - private void hasRecipeRemainder(CallbackInfoReturnable cir) { + private void mcpitanlib$hasRecipeRemainder(CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); @@ -83,7 +83,7 @@ private void hasRecipeRemainder(CallbackInfoReturnable cir) { } @Inject(method = "appendTooltip", at = @At("HEAD"), cancellable = true) - private void appendTooltip(ItemStack stack, World world, List tooltip, TooltipContext context, CallbackInfo ci) { + private void mcpitanlib$appendTooltip(ItemStack stack, World world, List tooltip, TooltipContext context, CallbackInfo ci) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); @@ -94,7 +94,7 @@ private void appendTooltip(ItemStack stack, World world, List tooltip, Too } @Inject(method = "postHit", at = @At("HEAD"), cancellable = true) - private void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker, CallbackInfoReturnable cir) { + private void mcpitanlib$postHit(ItemStack stack, LivingEntity target, LivingEntity attacker, CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); @@ -105,7 +105,7 @@ private void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker } @Inject(method = "postMine", at = @At("HEAD"), cancellable = true) - private void postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner, CallbackInfoReturnable cir) { + private void mcpitanlib$postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner, CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java index e70dd0bd4..bfdcc4535 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemStackMixin.java @@ -14,7 +14,7 @@ public abstract class ItemStackMixin { @Inject(method = "damage(ILjava/util/Random;Lnet/minecraft/server/network/ServerPlayerEntity;)Z", at = @At("HEAD"), cancellable = true) - public void damage(int amount, Random random, ServerPlayerEntity player, CallbackInfoReturnable cir) { + public void mcpitanlib$damage(int amount, Random random, ServerPlayerEntity player, CallbackInfoReturnable cir) { ItemStackActionEvent.returnValue = null; ItemStackActionEvent.call((ItemStack) (Object) this); if (ItemStackActionEvent.returnValue != null) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java index b62d23a71..f4c81ebb0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/MinecraftServerTimer.java @@ -16,23 +16,23 @@ @Mixin(MinecraftServer.class) public class MinecraftServerTimer implements MinecraftServerTimerAccess { @Unique - private final List timerItems = new ArrayList<>(); + private final List mcpitanlib$timerItems = new ArrayList<>(); @Inject(method = "tick", at = @At("TAIL")) - private void onTick(CallbackInfo ci) { - if (timerItems.isEmpty()) return; - List items = new ArrayList<>(timerItems); + private void mcpitanlib$onTick(CallbackInfo ci) { + if (mcpitanlib$timerItems.isEmpty()) return; + List items = new ArrayList<>(mcpitanlib$timerItems); for (TimerItem item : items) { if (--item.ticksUntilSomething == 0L) { if (item.executeSupplier.get()) - timerItems.remove(item); + mcpitanlib$timerItems.remove(item); } } } @Override - public void addTimer(long ticksUntilSomething, Supplier executeSupplier) { - timerItems.add(new TimerItem(ticksUntilSomething, executeSupplier)); + public void mcpitanlib$addTimer(long ticksUntilSomething, Supplier executeSupplier) { + mcpitanlib$timerItems.add(new TimerItem(ticksUntilSomething, executeSupplier)); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java index 168592735..f55828eae 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/RecipeManagerMixin.java @@ -23,7 +23,7 @@ public class RecipeManagerMixin { @Inject(method = "apply(Ljava/util/Map;Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/util/profiler/Profiler;)V", at = @At(value = "INVOKE", target = "Ljava/util/Map;entrySet()Ljava/util/Set;", ordinal = 1), locals = LocalCapture.CAPTURE_FAILHARD) - private void invokeApply(Map map, ResourceManager resourceManager, Profiler profiler, CallbackInfo ci, Map, ImmutableMap.Builder>> map2) { + private void mcpitanlib$invokeApply(Map map, ResourceManager resourceManager, Profiler profiler, CallbackInfo ci, Map, ImmutableMap.Builder>> map2) { if (RecipeManagerRegistry.managers.isEmpty()) return; RecipeManagerRegistry.managers.forEach((manager) -> manager.apply(new RecipeManagerEvent(map, resourceManager, profiler, map2))); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java index 7c8b7a21d..72663172e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ServerWorldTimer.java @@ -16,23 +16,23 @@ @Mixin(ServerWorld.class) public class ServerWorldTimer implements ServerWorldTimerAccess { @Unique - private final List timerItems = new ArrayList<>(); + private final List mcpitanlib$timerItems = new ArrayList<>(); @Inject(method = "tick", at = @At("TAIL")) private void onTick(CallbackInfo ci) { - if (timerItems.isEmpty()) return; - List items = new ArrayList<>(timerItems); + if (mcpitanlib$timerItems.isEmpty()) return; + List items = new ArrayList<>(mcpitanlib$timerItems); for (TimerItem item : items) { if (--item.ticksUntilSomething == 0L) { if (item.executeSupplier.get()) - timerItems.remove(item); + mcpitanlib$timerItems.remove(item); } } } @Override - public void addTimer(long ticksUntilSomething, Supplier executeSupplier) { - timerItems.add(new TimerItem(ticksUntilSomething, executeSupplier)); + public void mcpitanlib$addTimer(long ticksUntilSomething, Supplier executeSupplier) { + mcpitanlib$timerItems.add(new TimerItem(ticksUntilSomething, executeSupplier)); } } From 4b5dc328ab4720234e25c260029c1fd0e81872f4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 10 Mar 2024 01:11:55 +0900 Subject: [PATCH 296/617] add fix API (all) 2 --- .../mcpitanlib/api/util/ArmorMaterialUtil.java | 18 +++++++++++++----- .../mcpitanlib/api/util/ItemStackUtil.java | 1 + 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ArmorMaterialUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ArmorMaterialUtil.java index 1957cfe9e..665e13ee1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ArmorMaterialUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ArmorMaterialUtil.java @@ -2,11 +2,19 @@ import net.minecraft.recipe.Ingredient; import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; public class ArmorMaterialUtil { public static CompatibleArmorMaterial create(String name, int[] durability, int[] protectionAmounts, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Ingredient repairIngredient) { + return create(new Identifier(name), durability, protectionAmounts, enchantability, equipSound, toughness, knockbackResistance, repairIngredient); + } + public static CompatibleArmorMaterial create(String name, int durability, int protectionAmount, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Ingredient repairIngredient) { + return create(new Identifier(name), durability, protectionAmount, enchantability, equipSound, toughness, knockbackResistance, repairIngredient); + } + + public static CompatibleArmorMaterial create(Identifier id, int[] durability, int[] protectionAmounts, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Ingredient repairIngredient) { return new CompatibleArmorMaterial() { @Override public int getDurability(ArmorEquipmentType type) { @@ -66,8 +74,8 @@ public Ingredient getRepairIngredient() { } @Override - public String getName() { - return name; + public Identifier getId() { + return id; } @Override @@ -82,7 +90,7 @@ public float getKnockbackResistance() { }; } - public static CompatibleArmorMaterial create(String name, int durability, int protectionAmount, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Ingredient repairIngredient) { + public static CompatibleArmorMaterial create(Identifier id, int durability, int protectionAmount, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Ingredient repairIngredient) { return new CompatibleArmorMaterial() { @Override public int getDurability(ArmorEquipmentType type) { @@ -110,8 +118,8 @@ public Ingredient getRepairIngredient() { } @Override - public String getName() { - return name; + public Identifier getId() { + return id; } @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 6644d937a..5ef7e1718 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -18,6 +18,7 @@ public static boolean areItemsEqual(ItemStack left, ItemStack right) { } public static boolean areNbtEqual(ItemStack left, ItemStack right) { + // 1.20.5からはComponentを比較し、それ以前はNBTを比較する return ItemStack.areNbtEqual(left, right); } } From 43c9985f87e5d4b1bddac0493da6b8ecefdf88bc Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 10 Mar 2024 15:49:36 +0900 Subject: [PATCH 297/617] add APIs 3 --- .../api/registry/CompatRegistry.java | 5 + .../mcpitanlib/api/util/CustomDataUtil.java | 132 +++++++++++++++ .../pitan76/mcpitanlib/api/util/NbtUtil.java | 155 ++++++++++++++++++ .../core/registry/MCPLRegistry1_21.java | 30 ++++ 4 files changed, 322 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_21.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index f77630e1e..6d5a076c6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -3,6 +3,7 @@ import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.component.DataComponentType; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; @@ -136,6 +137,10 @@ public RegistryResult registerItemGroup(CreativeTabBuilder builder) { return registerItemGroup(builder.getIdentifier(), builder); } + public RegistryResult> registerDataComponentType(Identifier id, Supplier> supplier) { + return new RegistryResult<>(null); + } + public static void registerFuel(int time, ItemConvertible... item) { FuelRegistry.register(time, item); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java new file mode 100644 index 000000000..c168203e5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -0,0 +1,132 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.NbtComponent; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; + +import java.util.Set; + +/** + * カスタムデータのユーティリティクラス + */ +public class CustomDataUtil { + /** + * NBTを取得する。存在しない場合は新しいNBTを作成する。 + * @param stack ItemStack + * @return NBT + */ + public static NbtCompound getOrCreateNbt(ItemStack stack) { + if (!hasNbt(stack)) { + return NbtUtil.create(); + } + + return getNbt(stack); + } + + /** + * NBTを設定する。 + * @param stack ItemStack + * @param nbt NBT + */ + public static void setNbt(ItemStack stack, NbtCompound nbt) { + stack.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbt)); + } + + /** + * NBTが存在するかどうかを取得する。 + * @param stack ItemStack + * @return NBTが存在するかどうか + */ + public static boolean hasNbt(ItemStack stack) { + return stack.contains(DataComponentTypes.CUSTOM_DATA); + } + + /** + * NBTを取得する。 + * @param stack ItemStack + * @return NBT + */ + public static NbtCompound getNbt(ItemStack stack) { + return stack.get(DataComponentTypes.CUSTOM_DATA).copyNbt(); + } + + /** + * 値を設定する。 + * @param stack ItemStack + * @param key キー + * @param value 値 + */ + public static void put(ItemStack stack, String key, NbtCompound value) { + NbtCompound nbt = getOrCreateNbt(stack); + NbtUtil.put(nbt, key, value); + setNbt(stack, nbt); + } + + /** + * 値を取得する。 + * @param stack ItemStack + * @param key キー + * @return 値 + */ + public static NbtCompound get(ItemStack stack, String key) { + NbtCompound nbt = getNbt(stack); + return nbt.getCompound(key); + } + + /** + * 値を削除する。 + * @param stack ItemStack + * @param key キー + */ + public static void remove(ItemStack stack, String key) { + NbtCompound nbt = getNbt(stack); + nbt.remove(key); + setNbt(stack, nbt); + } + + /** + * 値が存在するかどうかを取得する。 + * @param stack ItemStack + * @param key キー + * @return 値が存在するかどうか + */ + public static boolean has(ItemStack stack, String key) { + NbtCompound nbt = getNbt(stack); + return nbt.contains(key); + } + + /** + * 指定した型の値を取得する + * @param stack ItemStack + * @param key キー + * @param clazz クラス + * @param 値 + */ + public static T get(ItemStack stack, String key, Class clazz) { + NbtCompound nbt = getNbt(stack); + return NbtUtil.get(nbt, key, clazz); + } + + /** + * 値を設定する。 + * @param stack ItemStack + * @param key キー + * @param value 値 + */ + public static void set(ItemStack stack, String key, T value) { + NbtCompound nbt = getOrCreateNbt(stack); + NbtUtil.set(nbt, key, value); + setNbt(stack, nbt); + } + + /** + * キーの一覧を取得する。 + * @param stack ItemStack + * @return キーの一覧 + */ + public static Set getKeys(ItemStack stack) { + NbtCompound nbt = getNbt(stack); + return NbtUtil.getKeys(nbt); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java new file mode 100644 index 000000000..d20b2dc16 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java @@ -0,0 +1,155 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtList; + +import java.util.Set; + +public class NbtUtil { + + /** + * 新しいNbtCompoundを作成する。 + * @return NbtCompound + */ + public static NbtCompound create() { + return new NbtCompound(); + } + + /** + * 値を設定する。 + * @param nbt NbtCompound + * @param key キー + * @param value 値 + */ + public static void put(NbtCompound nbt, String key, NbtCompound value) { + nbt.put(key, value); + } + + /** + * 値を取得する。 + * @param nbt NbtCompound + * @param key キー + * @return 値 + */ + public static NbtCompound get(NbtCompound nbt, String key) { + return nbt.getCompound(key); + } + + /** + * 値を削除する。 + * @param nbt NbtCompound + * @param key キー + */ + public static void remove(NbtCompound nbt, String key) { + nbt.remove(key); + } + + /** + * 値が存在するかどうかを取得する。 + * @param nbt NbtCompound + * @param key キー + * @return 値が存在するかどうか + */ + public static boolean has(NbtCompound nbt, String key) { + return nbt.contains(key); + } + + /** + * 指定した型の値を取得する + * @param nbt NbtCompound + * @param key キー + * @param clazz クラス + * @param 値 + */ + public static T get(NbtCompound nbt, String key, Class clazz) { + if (clazz == Integer.class) { + return (T) Integer.valueOf(nbt.getInt(key)); + } + if (clazz == String.class) { + return (T) nbt.getString(key); + } + if (clazz == Boolean.class) { + return (T) Boolean.valueOf(nbt.getBoolean(key)); + } + if (clazz == Float.class) { + return (T) Float.valueOf(nbt.getFloat(key)); + } + if (clazz == Double.class) { + return (T) Double.valueOf(nbt.getDouble(key)); + } + if (clazz == Long.class) { + return (T) Long.valueOf(nbt.getLong(key)); + } + if (clazz == NbtCompound.class) { + return (T) nbt.getCompound(key); + } + if (clazz == NbtList.class) { + return (T) nbt.getList(key, 9); + } + if (clazz == Byte.class) { + return (T) Byte.valueOf(nbt.getByte(key)); + } + if (clazz == Short.class) { + return (T) Short.valueOf(nbt.getShort(key)); + } + return null; + } + + /** + * 値を設定する。 + * @param nbt NbtCompound + * @param key キー + * @param value 値 + */ + public static void set(NbtCompound nbt, String key, T value) { + if (value instanceof Integer) { + nbt.putInt(key, (Integer) value); + return; + } + if (value instanceof String) { + nbt.putString(key, (String) value); + return; + } + if (value instanceof Boolean) { + nbt.putBoolean(key, (Boolean) value); + return; + } + if (value instanceof Float) { + nbt.putFloat(key, (Float) value); + return; + } + if (value instanceof Double) { + nbt.putDouble(key, (Double) value); + return; + } + if (value instanceof Long) { + nbt.putLong(key, (Long) value); + return; + } + if (value instanceof NbtCompound) { + nbt.put(key, (NbtCompound) value); + return; + } + if (value instanceof NbtList) { + nbt.put(key, (NbtList) value); + return; + } + if (value instanceof Byte) { + nbt.putByte(key, (Byte) value); + return; + } + if (value instanceof Short) { + nbt.putShort(key, (Short) value); + return; + } + } + + /** + * キーの一覧を取得する。 + * @param nbt NbtCompound + * @return キーの一覧 + */ + public static Set getKeys(NbtCompound nbt) { + return nbt.getKeys(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_21.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_21.java new file mode 100644 index 000000000..c55a33c04 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_21.java @@ -0,0 +1,30 @@ +package net.pitan76.mcpitanlib.core.registry; + +import dev.architectury.registry.registries.DeferredRegister; +import dev.architectury.registry.registries.RegistrySupplier; +import net.minecraft.component.DataComponentType; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.util.Identifier; + +import java.util.function.Supplier; + +@Deprecated +public class MCPLRegistry1_21 { + + public final DeferredRegister> DATA_COMPONENT_TYPE; + + private final MCPLRegistry mcplr; + + public MCPLRegistry1_21(MCPLRegistry mcplr, String MOD_ID) { + this.mcplr = mcplr; + DATA_COMPONENT_TYPE = DeferredRegister.create(MOD_ID, RegistryKeys.DATA_COMPONENT_TYPE); + } + + public void register() { + DATA_COMPONENT_TYPE.register(); + } + + public RegistrySupplier> registryDataComponentType(Identifier id, Supplier> supplier) { + return DATA_COMPONENT_TYPE.register(id, supplier); + } +} From 3666de5fb1bc16dbd09c25a72b8ff3480ed09f19 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:07:07 +0900 Subject: [PATCH 298/617] fix 1204 --- .../api/item/ArmorEquipmentType.java | 2 +- .../api/item/CompatibleArmorMaterial.java | 84 +++++++++---------- .../api/registry/CompatRegistry.java | 3 +- .../mcpitanlib/api/util/CustomDataUtil.java | 21 +++-- .../api/util/EquipMaterialUtil.java | 43 +--------- .../core/registry/MCPLRegistry1_21.java | 30 ------- 6 files changed, 61 insertions(+), 122 deletions(-) delete mode 100644 common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_21.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java index 868d80a9b..839eff8f2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java @@ -12,7 +12,7 @@ public class ArmorEquipmentType { public static ArmorEquipmentType FEET = new ArmorEquipmentType(EquipmentSlot.FEET); // New type for animals from 1.20.5 - public static ArmorEquipmentType BODY = new ArmorEquipmentType(EquipmentSlot.BODY, ArmorItem.Type.BODY); + public static ArmorEquipmentType BODY = new ArmorEquipmentType(null, null); protected final EquipmentSlot slot; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java index bf93b9d66..3a31a5ff2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java @@ -3,17 +3,8 @@ import net.minecraft.entity.EquipmentSlot; import net.minecraft.item.ArmorMaterial; import net.minecraft.recipe.Ingredient; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; import net.minecraft.util.Identifier; -import net.minecraft.util.Util; - -import java.util.EnumMap; -import java.util.List; -import java.util.function.Supplier; public interface CompatibleArmorMaterial { int getDurability(ArmorEquipmentType type); @@ -43,38 +34,47 @@ default String getName() { float getKnockbackResistance(); @Deprecated - default RegistryEntry build() { - if (CompatibleArmorItem.CACHE.containsKey(this)) { - return CompatibleArmorItem.CACHE.get(this); - } - - RegistryEntry entry = register(getId(), Util.make(new EnumMap<>(ArmorItem.Type.class), (map) -> { - map.put(ArmorItem.Type.HELMET, this.getProtection(ArmorEquipmentType.HEAD)); - map.put(ArmorItem.Type.CHESTPLATE, this.getProtection(ArmorEquipmentType.CHEST)); - map.put(ArmorItem.Type.LEGGINGS, this.getProtection(ArmorEquipmentType.LEGS)); - map.put(ArmorItem.Type.BOOTS, this.getProtection(ArmorEquipmentType.FEET)); - - map.put(ArmorItem.Type.BODY, this.getProtection(ArmorEquipmentType.BODY)); - }), getEnchantability(), SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, getToughness(), getKnockbackResistance(), - this::getRepairIngredient - ); - CompatibleArmorItem.CACHE.put(this, entry); - return entry; - } - - private static RegistryEntry register(Identifier id, EnumMap defense, int enchantability, RegistryEntry equipSound, float toughness, float knockbackResistance, Supplier repairIngredient) { - List list = List.of(new ArmorMaterial.Layer(id)); - return register(id, defense, enchantability, equipSound, toughness, knockbackResistance, repairIngredient, list); - } - - private static RegistryEntry register(Identifier id, EnumMap defense, int enchantability, RegistryEntry equipSound, float toughness, float knockbackResistance, Supplier repairIngredient, List layers) { - EnumMap enumMap = new EnumMap<>(ArmorItem.Type.class); - ArmorItem.Type[] var9 = ArmorItem.Type.values(); - - for (ArmorItem.Type type : var9) { - enumMap.put(type, defense.get(type)); - } - - return Registry.registerReference(Registries.ARMOR_MATERIAL, id, new ArmorMaterial(enumMap, enchantability, equipSound, repairIngredient, layers, toughness, knockbackResistance)); + default ArmorMaterial build() { + return new ArmorMaterial() { + @Override + public int getDurability(ArmorItem.Type type) { + return CompatibleArmorMaterial.this.getDurability(ArmorEquipmentType.of(type)); + } + + @Override + public int getProtection(ArmorItem.Type type) { + return CompatibleArmorMaterial.this.getProtection(ArmorEquipmentType.of(type)); + } + + @Override + public int getEnchantability() { + return CompatibleArmorMaterial.this.getEnchantability(); + } + + @Override + public SoundEvent getEquipSound() { + return CompatibleArmorMaterial.this.getEquipSound(); + } + + @Override + public Ingredient getRepairIngredient() { + return CompatibleArmorMaterial.this.getRepairIngredient(); + } + + @Override + public String getName() { + return CompatibleArmorMaterial.this.getName(); + } + + @Override + public float getToughness() { + return CompatibleArmorMaterial.this.getToughness(); + } + + @Override + public float getKnockbackResistance() { + return CompatibleArmorMaterial.this.getKnockbackResistance(); + } + }; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index 6d5a076c6..56f9539da 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -3,7 +3,6 @@ import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.component.DataComponentType; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; @@ -137,7 +136,7 @@ public RegistryResult registerItemGroup(CreativeTabBuilder builder) { return registerItemGroup(builder.getIdentifier(), builder); } - public RegistryResult> registerDataComponentType(Identifier id, Supplier> supplier) { + public RegistryResult registerDataComponentType(Identifier id, Supplier supplier) { return new RegistryResult<>(null); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index c168203e5..17a6fe4ca 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -1,7 +1,5 @@ package net.pitan76.mcpitanlib.api.util; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.NbtComponent; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -30,7 +28,12 @@ public static NbtCompound getOrCreateNbt(ItemStack stack) { * @param nbt NBT */ public static void setNbt(ItemStack stack, NbtCompound nbt) { - stack.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbt)); + NbtCompound components = NbtUtil.create(); + if (hasNbt(stack)) { + components = stack.getNbt().getCompound("components"); + } + components.put("minecraft:custom_data", nbt); + stack.getNbt().put("components", components); } /** @@ -39,7 +42,8 @@ public static void setNbt(ItemStack stack, NbtCompound nbt) { * @return NBTが存在するかどうか */ public static boolean hasNbt(ItemStack stack) { - return stack.contains(DataComponentTypes.CUSTOM_DATA); + return stack.getNbt().contains("components") && + stack.getNbt().getCompound("components").contains("minecraft:custom_data"); } /** @@ -48,7 +52,14 @@ public static boolean hasNbt(ItemStack stack) { * @return NBT */ public static NbtCompound getNbt(ItemStack stack) { - return stack.get(DataComponentTypes.CUSTOM_DATA).copyNbt(); + NbtCompound customData = NbtUtil.create(); + if (stack.getNbt().contains("components")) { + NbtCompound components = stack.getNbt().getCompound("components"); + if (components.contains("minecraft:custom_data")) { + customData = components.getCompound("minecraft:custom_data").copy(); + } + } + return customData; } /** diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java index 9afdc655a..d2f59002f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java @@ -57,47 +57,6 @@ public static int toInt(ArmorEquipmentType type) { } public static CompatibleArmorMaterial createArmorMaterial(int[] durability, int[] protection, int enchantability, SoundEvent equipSound, Ingredient repairIngredient, String name, float toughness, float knockbackResistance) { - - return new CompatibleArmorMaterial() { - @Override - public int getDurability(ArmorEquipmentType type) { - return durability[toInt(type)]; - } - - @Override - public int getProtection(ArmorEquipmentType type) { - return protection[toInt(type)]; - } - - @Override - public int getEnchantability() { - return enchantability; - } - - @Override - public SoundEvent getEquipSound() { - return equipSound; - } - - @Override - public Ingredient getRepairIngredient() { - return repairIngredient; - } - - @Override - public String getName() { - return name; - } - - @Override - public float getToughness() { - return toughness; - } - - @Override - public float getKnockbackResistance() { - return knockbackResistance; - } - }; + return ArmorMaterialUtil.create(name, durability, protection, enchantability, equipSound, toughness, knockbackResistance, repairIngredient); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_21.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_21.java deleted file mode 100644 index c55a33c04..000000000 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry1_21.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.pitan76.mcpitanlib.core.registry; - -import dev.architectury.registry.registries.DeferredRegister; -import dev.architectury.registry.registries.RegistrySupplier; -import net.minecraft.component.DataComponentType; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.util.Identifier; - -import java.util.function.Supplier; - -@Deprecated -public class MCPLRegistry1_21 { - - public final DeferredRegister> DATA_COMPONENT_TYPE; - - private final MCPLRegistry mcplr; - - public MCPLRegistry1_21(MCPLRegistry mcplr, String MOD_ID) { - this.mcplr = mcplr; - DATA_COMPONENT_TYPE = DeferredRegister.create(MOD_ID, RegistryKeys.DATA_COMPONENT_TYPE); - } - - public void register() { - DATA_COMPONENT_TYPE.register(); - } - - public RegistrySupplier> registryDataComponentType(Identifier id, Supplier> supplier) { - return DATA_COMPONENT_TYPE.register(id, supplier); - } -} From f4bdee3bad177001d30c01252c1867b2159d5bfa Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:22:40 +0900 Subject: [PATCH 299/617] fix 1192 --- .../pitan76/mcpitanlib/api/item/ArmorEquipmentType.java | 2 +- .../mcpitanlib/api/item/CompatibleArmorMaterial.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java index 839eff8f2..0eefe9784 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ArmorEquipmentType.java @@ -12,7 +12,7 @@ public class ArmorEquipmentType { public static ArmorEquipmentType FEET = new ArmorEquipmentType(EquipmentSlot.FEET); // New type for animals from 1.20.5 - public static ArmorEquipmentType BODY = new ArmorEquipmentType(null, null); + public static ArmorEquipmentType BODY = new ArmorEquipmentType(null); protected final EquipmentSlot slot; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java index 3a31a5ff2..977e7fc0a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorMaterial.java @@ -37,13 +37,13 @@ default String getName() { default ArmorMaterial build() { return new ArmorMaterial() { @Override - public int getDurability(ArmorItem.Type type) { - return CompatibleArmorMaterial.this.getDurability(ArmorEquipmentType.of(type)); + public int getDurability(EquipmentSlot slot) { + return CompatibleArmorMaterial.this.getDurability(ArmorEquipmentType.of(slot)); } @Override - public int getProtection(ArmorItem.Type type) { - return CompatibleArmorMaterial.this.getProtection(ArmorEquipmentType.of(type)); + public int getProtectionAmount(EquipmentSlot slot) { + return CompatibleArmorMaterial.this.getProtection(ArmorEquipmentType.of(slot)); } @Override From e10a11b7d2e192e798709a1cb3f8a481e70388be Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:29:37 +0900 Subject: [PATCH 300/617] ver2.2.0 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index fa268962b..7fe06662f 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.1.9 +mod_version=2.2.0 maven_group=net.pitan76 \ No newline at end of file From a87ee118b18fdccdf732bbfe9f4ef09d940876bb Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 11 Mar 2024 21:36:21 +0900 Subject: [PATCH 301/617] add APIs (v2.2.1) --- .../mcpitanlib/api/util/CustomDataUtil.java | 20 +++++++++++++++ .../mcpitanlib/api/util/ItemStackUtil.java | 25 +++++++++++++++++-- info.properties | 2 +- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index 17a6fe4ca..3f3d38cad 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -140,4 +140,24 @@ public static Set getKeys(ItemStack stack) { NbtCompound nbt = getNbt(stack); return NbtUtil.getKeys(nbt); } + + /** + * set(stack, key, value) のエイリアス + * @param stack ItemStack + * @param key キー + * @param value 値 + */ + public static void put(ItemStack stack, String key, T value) { + set(stack, key, value); + } + + /** + * has(stack, key) のエイリアス + * @param stack ItemStack + * @param key キー + * @return 値が存在するかどうか + */ + public static boolean contains(ItemStack stack, String key) { + return has(stack, key); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 5ef7e1718..cdf080d50 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -2,6 +2,8 @@ import net.minecraft.item.ItemStack; +import java.util.Objects; + public class ItemStackUtil { public static ItemStack copy(ItemStack stack) { return stack.copy(); @@ -17,8 +19,27 @@ public static boolean areItemsEqual(ItemStack left, ItemStack right) { return ItemStack.areItemsEqual(left, right); } + @Deprecated public static boolean areNbtEqual(ItemStack left, ItemStack right) { - // 1.20.5からはComponentを比較し、それ以前はNBTを比較する - return ItemStack.areNbtEqual(left, right); + return areNbtOrComponentEqual(left, right); + } + + /** + * NBT (1.20.4) か Component (1.20.5以降) が一致するかどうかを取得する。 + * @param left ItemStack + * @param right ItemStack + * @return NBTかComponentが一致するかどうか + */ + public static boolean areNbtOrComponentEqual(ItemStack left, ItemStack right) { + return Objects.equals(left.getNbt(), right.getNbt()); + } + + /** + * NBTかComponentが存在するかどうか + * @param stack ItemStack + * @return Whether NBT or Component exists + */ + public static boolean hasNbtOrComponent(ItemStack stack) { + return stack.hasNbt(); } } diff --git a/info.properties b/info.properties index 7fe06662f..6df04af43 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.0 +mod_version=2.2.1 maven_group=net.pitan76 \ No newline at end of file From d8fdfa3834545a75aeb655d0aecb06f11995f0d2 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 12 Mar 2024 01:35:48 +0900 Subject: [PATCH 302/617] add APIs (v2.2.1) --- .../mcpitanlib/api/util/InventoryUtil.java | 17 +++++++++++++++- .../mcpitanlib/api/util/WorldUtil.java | 20 +++++++++---------- info.properties | 2 +- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index c356d1be7..1a1f41acb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -1,7 +1,10 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.inventory.Inventories; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.world.World; public class InventoryUtil { public static boolean insertItem(ItemStack insertStack, DefaultedList inventory) { @@ -37,6 +40,18 @@ public static boolean canMergeItems(ItemStack first, ItemStack second) { if (first.getCount() + second.getCount() > first.getMaxCount()) { return false; } - return ItemStackUtil.areNbtEqual(first, second); + return ItemStackUtil.areNbtOrComponentEqual(first, second); + } + + public static NbtCompound writeNbt(World world, NbtCompound nbt, DefaultedList stacks) { + return writeNbt(world, nbt, true, stacks); + } + + public static NbtCompound writeNbt(World world, NbtCompound nbt, boolean setIfEmpty, DefaultedList stacks) { + return Inventories.writeNbt(nbt, stacks, setIfEmpty, world.getRegistryManager()); + } + + public static void readNbt(World world, NbtCompound nbt, DefaultedList stacks) { + Inventories.readNbt(nbt, stacks, world.getRegistryManager()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 5a3fe42b8..93e6d881e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -191,27 +191,27 @@ public static void setBlockState(World world, BlockPos pos, Block block) { setBlockState(world, pos, block, 3); } - public static void breakBlock(World world, BlockPos pos, boolean drop) { - world.breakBlock(pos, drop); + public static boolean breakBlock(World world, BlockPos pos, boolean drop) { + return world.breakBlock(pos, drop); } - public static void breakBlock(World world, BlockPos pos) { - breakBlock(world, pos, true); + public static boolean breakBlock(World world, BlockPos pos) { + return breakBlock(world, pos, true); } - public static void breakBlock(World world, BlockPos pos, boolean drop, @Nullable Player player) { - world.breakBlock(pos, drop, player.getPlayerEntity()); + public static boolean breakBlock(World world, BlockPos pos, boolean drop, @Nullable Player player) { + return world.breakBlock(pos, drop, player.getPlayerEntity()); } - public static void breakBlock(World world, BlockPos pos, @Nullable Player player) { - breakBlock(world, pos, true, player); + public static boolean breakBlock(World world, BlockPos pos, @Nullable Player player) { + return breakBlock(world, pos, true, player); } public static void removeBlockEntity(World world, BlockPos pos) { world.removeBlockEntity(pos); } - public static void removeBlock(World world, BlockPos pos, boolean move) { - world.removeBlock(pos, move); + public static boolean removeBlock(World world, BlockPos pos, boolean move) { + return world.removeBlock(pos, move); } } diff --git a/info.properties b/info.properties index 6df04af43..bb7062c1d 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.1 +mod_version=2.2.2 maven_group=net.pitan76 \ No newline at end of file From fbd62d5d8bb44c25c5a9dca5f10f329c6e3887c5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 12 Mar 2024 01:45:50 +0900 Subject: [PATCH 303/617] 1204 --- .../java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index 1a1f41acb..17b17ad84 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -48,10 +48,10 @@ public static NbtCompound writeNbt(World world, NbtCompound nbt, DefaultedList stacks) { - return Inventories.writeNbt(nbt, stacks, setIfEmpty, world.getRegistryManager()); + return Inventories.writeNbt(nbt, stacks, setIfEmpty); } public static void readNbt(World world, NbtCompound nbt, DefaultedList stacks) { - Inventories.readNbt(nbt, stacks, world.getRegistryManager()); + Inventories.readNbt(nbt, stacks); } } From 15fae976d7f6d0023a30ae172b5bfeaf19ea8833 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 13 Mar 2024 01:03:15 +0900 Subject: [PATCH 304/617] add APIs (v2.2.3) --- .../container/factory/DisplayNameArgs.java | 9 +++ .../container/factory/ExtraDataArgs.java | 50 ++++++++++++++ .../ExtendedNamedScreenHandlerFactory.java | 1 + .../api/gui/ExtendedScreenHandlerFactory.java | 23 +++++++ .../api/tile/CompatBlockEntity.java | 2 + .../mcpitanlib/api/util/BlockStateUtil.java | 23 +++++++ .../mcpitanlib/api/util/PlatformUtil.java | 5 ++ .../extra/transfer/util/FluidStorageUtil.java | 69 +++++++++++++++++++ .../api/util/fabric/PlatformUtilImpl.java | 24 +++++++ .../api/util/forge/PlatformUtilImpl.java | 26 +++++++ info.properties | 2 +- .../api/util/neoforge/PlatformUtilImpl.java | 26 +++++++ 12 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/DisplayNameArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/ExtraDataArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerFactory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/util/fabric/PlatformUtilImpl.java create mode 100644 forge/src/main/java/net/pitan76/mcpitanlib/api/util/forge/PlatformUtilImpl.java create mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/util/neoforge/PlatformUtilImpl.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/DisplayNameArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/DisplayNameArgs.java new file mode 100644 index 000000000..b82cfe48a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/DisplayNameArgs.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.api.event.container.factory; + +import net.pitan76.mcpitanlib.api.event.BaseEvent; + +public class DisplayNameArgs extends BaseEvent { + public DisplayNameArgs() { + super(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/ExtraDataArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/ExtraDataArgs.java new file mode 100644 index 000000000..f73f56479 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/ExtraDataArgs.java @@ -0,0 +1,50 @@ +package net.pitan76.mcpitanlib.api.event.container.factory; + +import net.minecraft.network.PacketByteBuf; +import net.minecraft.server.network.ServerPlayerEntity; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.network.PacketByteUtil; + +public class ExtraDataArgs extends BaseEvent { + public PacketByteBuf buf; + public ServerPlayerEntity player; + + public ExtraDataArgs(PacketByteBuf buf, ServerPlayerEntity player) { + super(); + this.buf = buf; + this.player = player; + } + + public ExtraDataArgs() { + super(); + } + + public ExtraDataArgs(PacketByteBuf buf) { + super(); + this.buf = buf; + } + + public boolean hasPlayer() { + return player != null; + } + + public boolean hasBuf() { + return buf != null; + } + + public PacketByteBuf getBuf() { + return buf; + } + + public ServerPlayerEntity getPlayer() { + return player; + } + + /** + * @param obj The object to write + * @see PacketByteUtil#writeVar(PacketByteBuf, Object) + */ + public void writeVar(Object obj) { + PacketByteUtil.writeVar(getBuf(), obj); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedNamedScreenHandlerFactory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedNamedScreenHandlerFactory.java index 863fc52e9..e5324df34 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedNamedScreenHandlerFactory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedNamedScreenHandlerFactory.java @@ -9,6 +9,7 @@ import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; +@Deprecated public class ExtendedNamedScreenHandlerFactory implements ExtendedMenuProvider { private final Text name; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerFactory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerFactory.java new file mode 100644 index 000000000..1bb6de4a8 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerFactory.java @@ -0,0 +1,23 @@ +package net.pitan76.mcpitanlib.api.gui; + +import dev.architectury.registry.menu.ExtendedMenuProvider; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; +import net.pitan76.mcpitanlib.api.event.container.factory.ExtraDataArgs; + +public interface ExtendedScreenHandlerFactory extends ExtendedMenuProvider { + @Override + default Text getDisplayName() { + return getDisplayName(new DisplayNameArgs()); + } + + @Override + default void saveExtraData(PacketByteBuf buf) { + writeExtraData(new ExtraDataArgs(buf)); + } + + Text getDisplayName(DisplayNameArgs args); + + void writeExtraData(ExtraDataArgs args); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java index 91120283a..9aaa2f06a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java @@ -55,4 +55,6 @@ public void writeNbt(NbtCompound nbt) { public void readNbt(NbtCompound nbt) { readNbtOverride(nbt); } + + } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java new file mode 100644 index 000000000..ba9ec05fc --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -0,0 +1,23 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.sound.BlockSoundGroup; + +public class BlockStateUtil { + public static Block getBlock(BlockState state) { + return state.getBlock(); + } + + public static boolean isAir(BlockState state) { + return state.isAir(); + } + + public static boolean isOpaque(BlockState state) { + return state.isOpaque(); + } + + public static BlockSoundGroup getSoundGroup(BlockState state) { + return state.getSoundGroup(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java index 88ce887a5..3c8b8d30a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.util; +import dev.architectury.injectables.annotations.ExpectPlatform; import dev.architectury.platform.Platform; import dev.architectury.utils.Env; import net.fabricmc.api.EnvType; @@ -20,18 +21,22 @@ public static boolean isForge() { return Platform.isForge(); } + @ExpectPlatform public static boolean isModLoaded(String id) { return Platform.isModLoaded(id); } + @ExpectPlatform public static boolean isClient() { return Platform.getEnvironment() == Env.CLIENT; } + @ExpectPlatform public static boolean isServer() { return Platform.getEnvironment() == Env.SERVER; } + @ExpectPlatform public static Path getConfigFolder() { return Platform.getConfigFolder(); } diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java new file mode 100644 index 000000000..863256263 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -0,0 +1,69 @@ +package net.pitan76.mcpitanlib.api.extra.transfer.util; + +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants; +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; +import net.fabricmc.fabric.api.transfer.v1.fluid.base.SingleFluidStorage; +import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; +import net.minecraft.fluid.FluidState; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.world.World; + +public class FluidStorageUtil { + public static SingleFluidStorage withFixedCapacity(long capacity, Runnable onChange) { + return SingleFluidStorage.withFixedCapacity(capacity, onChange); + } + + public static void readNbt(SingleFluidStorage storage, NbtCompound nbt, World world) { + storage.readNbt(nbt, world.getRegistryManager()); + } + + public static void writeNbt(SingleFluidStorage storage, NbtCompound nbt, World world) { + storage.writeNbt(nbt, world.getRegistryManager()); + } + + public static long getAmount(SingleFluidStorage storage) { + return storage.getAmount(); + } + + public static long getCapacity(SingleFluidStorage storage) { + return storage.getCapacity(); + } + + public static FluidVariant getResource(SingleFluidStorage storage) { + return storage.getResource(); + } + + public static boolean isResourceBlank(SingleFluidStorage storage) { + return storage.isResourceBlank(); + } + + public static long insert(SingleFluidStorage storage, FluidVariant insertedVariant, long maxAmount, Transaction transaction) { + return storage.insert(insertedVariant, maxAmount, transaction); + } + + public static long extract(SingleFluidStorage storage, FluidVariant extractedVariant, long maxAmount, Transaction transaction) { + return storage.extract(extractedVariant, maxAmount, transaction); + } + + public static void insert(SingleFluidStorage storage, FluidState fluidState, long maxAmount) { + try (Transaction transaction = Transaction.openOuter()) { + insert(storage, FluidVariant.of(fluidState.getFluid()), maxAmount, transaction); + transaction.commit(); + } + } + + public static void extract(SingleFluidStorage storage, FluidState fluidState, long maxAmount) { + try (Transaction transaction = Transaction.openOuter()) { + extract(storage, FluidVariant.of(fluidState.getFluid()), maxAmount, transaction); + transaction.commit(); + } + } + + public static boolean isEmpty(SingleFluidStorage storage) { + return getAmount(storage) == 0; + } + + public static boolean isFull(SingleFluidStorage storage) { + return getAmount(storage) >= getCapacity(storage); + } +} diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/util/fabric/PlatformUtilImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/util/fabric/PlatformUtilImpl.java new file mode 100644 index 000000000..5645a7e76 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/util/fabric/PlatformUtilImpl.java @@ -0,0 +1,24 @@ +package net.pitan76.mcpitanlib.api.util.fabric; + +import net.fabricmc.api.EnvType; +import net.fabricmc.loader.api.FabricLoader; + +import java.nio.file.Path; + +public class PlatformUtilImpl { + public static boolean isClient() { + return FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT; + } + + public static boolean isServer() { + return FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER; + } + + public static Path getConfigFolder() { + return FabricLoader.getInstance().getConfigDir(); + } + + public static boolean isModLoaded(String id) { + return FabricLoader.getInstance().isModLoaded(id); + } +} diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/util/forge/PlatformUtilImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/util/forge/PlatformUtilImpl.java new file mode 100644 index 000000000..80019e102 --- /dev/null +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/util/forge/PlatformUtilImpl.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.util.forge; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.nio.file.Path; + +public class PlatformUtilImpl { + public static boolean isClient() { + return FMLEnvironment.dist == Dist.CLIENT; + } + + public static boolean isServer() { + return FMLEnvironment.dist == Dist.DEDICATED_SERVER; + } + + public static Path getConfigFolder() { + return FMLPaths.CONFIGDIR.get(); + } + + public static boolean isModLoaded(String id) { + return ModList.get().isLoaded(id); + } +} diff --git a/info.properties b/info.properties index bb7062c1d..41c3d60e9 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.2 +mod_version=2.2.3 maven_group=net.pitan76 \ No newline at end of file diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/util/neoforge/PlatformUtilImpl.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/util/neoforge/PlatformUtilImpl.java new file mode 100644 index 000000000..d3836ed5e --- /dev/null +++ b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/util/neoforge/PlatformUtilImpl.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.util.neoforge; + +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.ModList; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.fml.loading.FMLPaths; + +import java.nio.file.Path; + +public class PlatformUtilImpl { + public static boolean isClient() { + return FMLEnvironment.dist == Dist.CLIENT; + } + + public static boolean isServer() { + return FMLEnvironment.dist == Dist.DEDICATED_SERVER; + } + + public static Path getConfigFolder() { + return FMLPaths.CONFIGDIR.get(); + } + + public static boolean isModLoaded(String id) { + return ModList.get().isLoaded(id); + } +} From fc96ab889efabbb08471d86c44ef9c5a6f6a1aec Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 13 Mar 2024 01:08:49 +0900 Subject: [PATCH 305/617] 1204 --- .../mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java index 863256263..ea28f76f6 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.extra.transfer.util; -import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; import net.fabricmc.fabric.api.transfer.v1.fluid.base.SingleFluidStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; @@ -14,11 +13,11 @@ public static SingleFluidStorage withFixedCapacity(long capacity, Runnable onCha } public static void readNbt(SingleFluidStorage storage, NbtCompound nbt, World world) { - storage.readNbt(nbt, world.getRegistryManager()); + storage.readNbt(nbt); } public static void writeNbt(SingleFluidStorage storage, NbtCompound nbt, World world) { - storage.writeNbt(nbt, world.getRegistryManager()); + storage.writeNbt(nbt); } public static long getAmount(SingleFluidStorage storage) { From 055abf28e41f1f04b1e2d6d246a8b5bd1f7f5ca2 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 25 Mar 2024 13:47:17 +0900 Subject: [PATCH 306/617] fix util --- .../extra/transfer/util/FluidStorageUtil.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java index ea28f76f6..53c2ea7fa 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -7,17 +7,29 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.world.World; +@SuppressWarnings("removal") public class FluidStorageUtil { public static SingleFluidStorage withFixedCapacity(long capacity, Runnable onChange) { - return SingleFluidStorage.withFixedCapacity(capacity, onChange); + return new SingleFluidStorage() { + + @Override + protected long getCapacity(FluidVariant fluidVariant) { + return capacity; + } + + @Override + protected void markDirty() { + onChange.run(); + } + }; } public static void readNbt(SingleFluidStorage storage, NbtCompound nbt, World world) { - storage.readNbt(nbt); + storage.fluidVariant.getNbt().copyFrom(nbt); } public static void writeNbt(SingleFluidStorage storage, NbtCompound nbt, World world) { - storage.writeNbt(nbt); + nbt.copyFrom(storage.fluidVariant.getNbt()); } public static long getAmount(SingleFluidStorage storage) { From 8d70167cfea127e6b68bc8576314b3985a9b02c4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 25 Mar 2024 16:27:43 +0900 Subject: [PATCH 307/617] change ver 2.2.4 if stack does not have nbt, return false --- .../java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java | 3 +++ info.properties | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index 3f3d38cad..13945b306 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -103,6 +103,9 @@ public static void remove(ItemStack stack, String key) { * @return 値が存在するかどうか */ public static boolean has(ItemStack stack, String key) { + if (!hasNbt(stack)) + return false; + NbtCompound nbt = getNbt(stack); return nbt.contains(key); } diff --git a/info.properties b/info.properties index 41c3d60e9..127a5c022 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.3 +mod_version=2.2.4 maven_group=net.pitan76 \ No newline at end of file From c8680a637043649a162c7f4f9b23b1a2e00b5beb Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 25 Mar 2024 16:32:14 +0900 Subject: [PATCH 308/617] fix hasnbt --- .../java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index 13945b306..bfe6ce3d4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -42,6 +42,8 @@ public static void setNbt(ItemStack stack, NbtCompound nbt) { * @return NBTが存在するかどうか */ public static boolean hasNbt(ItemStack stack) { + if (stack.getNbt() == null) return false; + return stack.getNbt().contains("components") && stack.getNbt().getCompound("components").contains("minecraft:custom_data"); } @@ -53,6 +55,9 @@ public static boolean hasNbt(ItemStack stack) { */ public static NbtCompound getNbt(ItemStack stack) { NbtCompound customData = NbtUtil.create(); + if (!hasNbt(stack)) + return customData; + if (stack.getNbt().contains("components")) { NbtCompound components = stack.getNbt().getCompound("components"); if (components.contains("minecraft:custom_data")) { From bd53c73c4b9abea6ac7de244d3e430342ba81f6a Mon Sep 17 00:00:00 2001 From: mymai1208 <62325307+mymai1208@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:14:55 +0900 Subject: [PATCH 309/617] add registerEntityModelLayer --- .../api/client/registry/CompatRegistryClient.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index a64faecf9..4a8b9cf68 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.client.registry; +import dev.architectury.registry.client.level.entity.EntityModelLayerRegistry; import dev.architectury.registry.client.level.entity.EntityRendererRegistry; import dev.architectury.registry.client.particle.ParticleProviderRegistry; import dev.architectury.registry.client.rendering.BlockEntityRendererRegistry; @@ -14,6 +15,7 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; import net.minecraft.client.model.ModelPart; +import net.minecraft.client.model.TexturedModelData; import net.minecraft.client.particle.ParticleFactory; import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.render.RenderLayer; @@ -111,6 +113,10 @@ public static void registryClientSprite(Identifier atlasId, Sprite sprite) { // ~1.19.2 } + public static void registerEntityModelLayer(EntityModelLayer layer, Supplier modelData) { + EntityModelLayerRegistry.register(layer, modelData); + } + public static void registerBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { BlockEntityRendererRegistry.register(type, ctx -> provider.create(new BlockEntityRendererFactory.Context( ctx.getRenderDispatcher(), ctx.getRenderManager(), null, null, ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() From 7215f27d7eab1950f752980044cea19a4d0565a0 Mon Sep 17 00:00:00 2001 From: mymai1208 <62325307+mymai1208@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:48:14 +0900 Subject: [PATCH 310/617] fix --- .../client/registry/CompatRegistryClient.java | 5 ++-- .../render/EntityModelLayerContext.java | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/render/EntityModelLayerContext.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index 4a8b9cf68..bb1e0c13f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -39,6 +39,7 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.client.render.EntityModelLayerContext; import java.util.List; import java.util.Random; @@ -113,8 +114,8 @@ public static void registryClientSprite(Identifier atlasId, Sprite sprite) { // ~1.19.2 } - public static void registerEntityModelLayer(EntityModelLayer layer, Supplier modelData) { - EntityModelLayerRegistry.register(layer, modelData); + public static void registerEntityModelLayer(EntityModelLayer layer, EntityModelLayerContext context) { + EntityModelLayerRegistry.register(layer, () -> TexturedModelData.of(context.getData(), context.getWidth(), context.getHeight())); } public static void registerBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/EntityModelLayerContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/EntityModelLayerContext.java new file mode 100644 index 000000000..9c8880f56 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/EntityModelLayerContext.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.client.render; + +import net.minecraft.client.model.ModelData; + +public class EntityModelLayerContext { + private final ModelData data; + private final int width; + private final int height; + + public EntityModelLayerContext(ModelData data, int width, int height) { + this.data = data; + this.width = width; + this.height = height; + } + + public int getHeight() { + return height; + } + + public int getWidth() { + return width; + } + + public ModelData getData() { + return data; + } +} From 81a485f70e09ca6eeb7664022e34244a70eb2e95 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 28 Jun 2024 09:52:51 +0900 Subject: [PATCH 311/617] add BlockState API 2.2.5 --- .../pitan76/mcpitanlib/api/util/BlockStateUtil.java | 9 +++++++++ .../pitan76/mcpitanlib/api/util/StateManagerUtil.java | 10 ++++++++++ info.properties | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/StateManagerUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index ba9ec05fc..0d3a302b7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -3,6 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; public class BlockStateUtil { public static Block getBlock(BlockState state) { @@ -20,4 +21,12 @@ public static boolean isOpaque(BlockState state) { public static BlockSoundGroup getSoundGroup(BlockState state) { return state.getSoundGroup(); } + + public static BlockState getDefaultState(Block block) { + return block.getDefaultState(); + } + + public static StateManager getStateManager(Block block) { + return block.getStateManager(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/StateManagerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StateManagerUtil.java new file mode 100644 index 000000000..9591bbdb9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StateManagerUtil.java @@ -0,0 +1,10 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.state.State; +import net.minecraft.state.StateManager; + +public class StateManagerUtil { + public static > S getDefaultState(StateManager manager) { + return manager.getDefaultState(); + } +} diff --git a/info.properties b/info.properties index 127a5c022..a391e77c6 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.4 +mod_version=2.2.5 maven_group=net.pitan76 \ No newline at end of file From 268bdc21122ab5891226bee8374abf46bccdd25f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 28 Jun 2024 22:02:48 +0900 Subject: [PATCH 312/617] Id api --- .../pitan76/mcpitanlib/api/block/ExtendBlock.java | 8 ++++++++ .../pitan76/mcpitanlib/api/util/IdentifierUtil.java | 13 +++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 0fb8beb52..71aee156b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -225,4 +225,12 @@ public void appendProperties(StateManager.Builder builder) { public void appendProperties(AppendPropertiesArgs args) { super.appendProperties(args.builder); } + + /** + * Compatible for getDefaultState() + * @return default block state + */ + public BlockState getNewDefaultState() { + return super.getDefaultState(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java new file mode 100644 index 000000000..2e90b103d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.util.Identifier; + +public class IdentifierUtil { + public static Identifier id(String id) { + return new Identifier(id); + } + + public static Identifier id(String namespace, String path) { + return Identifier.of(namespace, path); + } +} From b306a05ab447e4421d4668278b97cc2d38a7614e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 28 Jun 2024 23:12:58 +0900 Subject: [PATCH 313/617] fix Id api --- .../java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java index 2e90b103d..537d6f703 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java @@ -8,6 +8,6 @@ public static Identifier id(String id) { } public static Identifier id(String namespace, String path) { - return Identifier.of(namespace, path); + return new Identifier(namespace, path); } } From 31d6f49cda7b492435c864d590cd6851ac4eaded Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 29 Jun 2024 12:43:25 +0900 Subject: [PATCH 314/617] update gradle, loom for java 21 --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 4f40dea7d..ae4e20434 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.5-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false } architectury { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index db9a6b825..17655d0ef 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From cb983cde739640943d827280cbe685063e5bd923 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:53:58 +0900 Subject: [PATCH 315/617] add Id API --- .../pitan76/mcpitanlib/api/util/IdentifierUtil.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java index 537d6f703..8aa652151 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java @@ -10,4 +10,16 @@ public static Identifier id(String id) { public static Identifier id(String namespace, String path) { return new Identifier(namespace, path); } + + public static String toString(Identifier identifier) { + return identifier.toString(); + } + + public static String getNamespace(Identifier identifier) { + return identifier.getNamespace(); + } + + public static String getPath(Identifier identifier) { + return identifier.getPath(); + } } From d447efb5d103323286cc7d5e16c75d263316cc4f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 29 Jun 2024 18:14:20 +0900 Subject: [PATCH 316/617] fix 121 --- .../mcpitanlib/api/item/CompatItems.java | 18 ++++++++ .../mcpitanlib/api/item/ExtendItem.java | 6 +++ .../api/item/tool/CompatibleAxeItem.java | 5 ++ .../api/item/tool/CompatibleHoeItem.java | 5 ++ .../item/tool/CompatibleMiningToolItem.java | 5 ++ .../api/item/tool/CompatiblePickaxeItem.java | 5 ++ .../api/item/tool/CompatibleShearsItem.java | 5 ++ .../api/item/tool/CompatibleShovelItem.java | 5 ++ .../api/item/tool/CompatibleSwordItem.java | 5 ++ .../mcpitanlib/api/util/ItemStackUtil.java | 12 +++++ .../mcpitanlib/api/util/RecipeUtil.java | 46 +++++++++++++------ .../api/world/CompatiblePersistentState.java | 9 ++++ 12 files changed, 113 insertions(+), 13 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java new file mode 100644 index 000000000..7b6e8684c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java @@ -0,0 +1,18 @@ +package net.pitan76.mcpitanlib.api.item; + +import net.minecraft.item.Item; +import net.minecraft.item.Items; + +public class CompatItems { + public Item SHORT_GRASS = Items.SHORT_GRASS; + public Item TALL_GRASS = Items.TALL_GRASS; + public Item TURTLE_SCUTE = Items.TURTLE_SCUTE; + + // Compatibility + public Item GRASS = SHORT_GRASS; + public Item SCUTE = TURTLE_SCUTE; + + public static boolean isExist(Item item) { + return item != null && item != Items.AIR; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index 58b7313ec..ee0fbe896 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -10,6 +10,7 @@ import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; +import net.minecraft.util.Rarity; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -163,4 +164,9 @@ public boolean postHit(PostHitEvent event) { public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } + + // -1.20.6 + public Rarity getRarity(ItemStack stack) { + return Rarity.COMMON; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java index 519993d89..bab735ab8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java @@ -70,4 +70,9 @@ public boolean postHit(PostHitEvent event) { public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } + + // -1.20.6 + public boolean isDamageable() { + return true; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java index 870d9cb56..ed9fe7e65 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java @@ -70,4 +70,9 @@ public boolean postHit(PostHitEvent event) { public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } + + // -1.20.6 + public boolean isDamageable() { + return true; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java index c3a06a104..66efa64d6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java @@ -73,4 +73,9 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos pos, LivingEntity miner) { return postMine(new PostMineEvent(stack, world, state, pos, miner)); } + + // -1.20.6 + public boolean isDamageable() { + return true; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java index a70c5f4c1..7ec11e4ab 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java @@ -70,4 +70,9 @@ public boolean postHit(PostHitEvent event) { public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } + + // -1.20.6 + public boolean isDamageable() { + return true; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java index fb1811e29..e94fa537f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java @@ -69,4 +69,9 @@ public boolean postHit(PostHitEvent event) { public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } + + // -1.20.6 + public boolean isDamageable() { + return true; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java index cdfcbb7fd..a91bff5ca 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java @@ -70,4 +70,9 @@ public boolean postHit(PostHitEvent event) { public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } + + // -1.20.6 + public boolean isDamageable() { + return true; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java index 605fcccae..0f1dc40a8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java @@ -70,4 +70,9 @@ public boolean postHit(PostHitEvent event) { public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } + + // -1.20.6 + public boolean isDamageable() { + return true; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index cdf080d50..9244d6123 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -1,6 +1,8 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.world.World; import java.util.Objects; @@ -42,4 +44,14 @@ public static boolean areNbtOrComponentEqual(ItemStack left, ItemStack right) { public static boolean hasNbtOrComponent(ItemStack stack) { return stack.hasNbt(); } + + /** + * NBTからItemStackを取得する + * @param world World + * @param nbt NbtCompound + * @return ItemStack + */ + public static ItemStack fromNbt(World world, NbtCompound nbt) { + return ItemStack.fromNbt(world.getRegistryManager(), nbt).orElse(ItemStack.EMPTY); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java index 0f6ded1ce..76e16ef4f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java @@ -2,10 +2,9 @@ import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.Recipe; -import net.minecraft.recipe.RecipeType; -import net.minecraft.recipe.ShapelessRecipe; +import net.minecraft.recipe.*; +import net.minecraft.recipe.book.CraftingRecipeCategory; +import net.minecraft.recipe.input.RecipeInput; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; @@ -16,24 +15,45 @@ public class RecipeUtil { public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { - return createShapelessRecipe(id, group, output, input); + return new ShapelessRecipe(group, CraftingRecipeCategory.valueOf(category.name()), output, input); } public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, ItemStack output, DefaultedList input) { - return new ShapelessRecipe(id, group, output, input); + return createShapelessRecipe(id, group, CompatibilityCraftingRecipeCategory.MISC, output, input); } - public static ItemStack craft(Recipe recipe, C inventory, World world) { - return recipe.craft(inventory); + public static ItemStack craft_2(Recipe recipe, C inventory, World world) { + return recipe.craft(inventory, world.getRegistryManager()); } - public static ItemStack getOutput(Recipe recipe, World world) { - return recipe.getOutput(); + public static ItemStack getOutput_2(Recipe recipe, World world) { + return recipe.getResult(world.getRegistryManager()); + } + + public static ItemStack craft(Recipe recipe, Inventory inventory, World world) { + if (inventory instanceof RecipeInput) { + Recipe inputRecipe = (Recipe) recipe; + return inputRecipe.craft((RecipeInput) inventory, world.getRegistryManager()); + } + return ItemStack.EMPTY; + } + + public static ItemStack getOutput(Recipe recipe, World world) { + return recipe.getResult(world.getRegistryManager()); } public static List> getAllRecipes(World world) { - Collection> recipes = world.getRecipeManager().values(); - return new ArrayList<>(recipes); + Collection> recipes = world.getRecipeManager().values(); + List> outRecipes = new ArrayList<>(); + for (Object recipeEntryObj : recipes) { + if (recipeEntryObj instanceof RecipeEntry) { + RecipeEntry recipeEntry = (RecipeEntry) recipeEntryObj; + if (recipeEntry.value() instanceof Recipe) { + outRecipes.add(recipeEntry.value()); + } + } + } + return outRecipes; } public static RecipeType getType(Recipe recipe) { @@ -41,7 +61,7 @@ public static RecipeType getType(Recipe recipe) { } public static Identifier getId(Recipe recipe) { - return new Identifier(recipe.getClass().hashCode() + ""); + return IdentifierUtil.id(recipe.getClass().hashCode() + ""); } public enum CompatibilityCraftingRecipeCategory { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java index c8206f828..c77faaf3d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.world; import net.minecraft.nbt.NbtCompound; +import net.minecraft.registry.RegistryWrapper; import net.minecraft.world.PersistentState; public abstract class CompatiblePersistentState extends PersistentState { @@ -15,4 +16,12 @@ public CompatiblePersistentState() { // 1.16 public abstract void readNbt(NbtCompound tag); + + @Deprecated + @Override + public NbtCompound writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) { + return writeNbt(nbt); + } + + public abstract NbtCompound writeNbt(NbtCompound tag); } From 83c28706b6dee521eaaf8eb2914d85becdd2f32d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 18:21:15 +0900 Subject: [PATCH 317/617] fix 1206 --- .../java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java index 76e16ef4f..2cd0686fc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.inventory.Inventory; +import net.minecraft.inventory.RecipeInputInventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.*; import net.minecraft.recipe.book.CraftingRecipeCategory; -import net.minecraft.recipe.input.RecipeInput; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; @@ -31,9 +31,9 @@ public static ItemStack getOutput_2(Recipe recipe, Worl } public static ItemStack craft(Recipe recipe, Inventory inventory, World world) { - if (inventory instanceof RecipeInput) { - Recipe inputRecipe = (Recipe) recipe; - return inputRecipe.craft((RecipeInput) inventory, world.getRegistryManager()); + if (inventory instanceof RecipeInputInventory) { + Recipe inputRecipe = (Recipe) recipe; + return inputRecipe.craft((RecipeInputInventory) inventory, world.getRegistryManager()); } return ItemStack.EMPTY; } From 7988df3526becc403595ae33f54072d088c06b5d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 18:26:48 +0900 Subject: [PATCH 318/617] fix 1204 --- .../java/net/pitan76/mcpitanlib/api/item/CompatItems.java | 2 +- .../mcpitanlib/api/item/tool/CompatibleAxeItem.java | 2 +- .../mcpitanlib/api/item/tool/CompatibleHoeItem.java | 2 +- .../mcpitanlib/api/item/tool/CompatibleMiningToolItem.java | 2 +- .../mcpitanlib/api/item/tool/CompatiblePickaxeItem.java | 2 +- .../mcpitanlib/api/item/tool/CompatibleShearsItem.java | 2 +- .../mcpitanlib/api/item/tool/CompatibleShovelItem.java | 2 +- .../mcpitanlib/api/item/tool/CompatibleSwordItem.java | 2 +- .../net/pitan76/mcpitanlib/api/util/ItemStackUtil.java | 2 +- .../mcpitanlib/api/world/CompatiblePersistentState.java | 7 ------- 10 files changed, 9 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java index 7b6e8684c..7e71a42e0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java @@ -6,7 +6,7 @@ public class CompatItems { public Item SHORT_GRASS = Items.SHORT_GRASS; public Item TALL_GRASS = Items.TALL_GRASS; - public Item TURTLE_SCUTE = Items.TURTLE_SCUTE; + public Item TURTLE_SCUTE = Items.SCUTE; // Compatibility public Item GRASS = SHORT_GRASS; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java index bab735ab8..c0c6da398 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java @@ -73,6 +73,6 @@ public boolean postMine(PostMineEvent event) { // -1.20.6 public boolean isDamageable() { - return true; + return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java index ed9fe7e65..f213eb4ab 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java @@ -73,6 +73,6 @@ public boolean postMine(PostMineEvent event) { // -1.20.6 public boolean isDamageable() { - return true; + return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java index 66efa64d6..edc658581 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java @@ -76,6 +76,6 @@ public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos // -1.20.6 public boolean isDamageable() { - return true; + return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java index 7ec11e4ab..494238139 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java @@ -73,6 +73,6 @@ public boolean postMine(PostMineEvent event) { // -1.20.6 public boolean isDamageable() { - return true; + return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java index e94fa537f..7fee63860 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java @@ -72,6 +72,6 @@ public boolean postMine(PostMineEvent event) { // -1.20.6 public boolean isDamageable() { - return true; + return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java index a91bff5ca..b8a7eb646 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java @@ -73,6 +73,6 @@ public boolean postMine(PostMineEvent event) { // -1.20.6 public boolean isDamageable() { - return true; + return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java index 0f1dc40a8..8001d566e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java @@ -73,6 +73,6 @@ public boolean postMine(PostMineEvent event) { // -1.20.6 public boolean isDamageable() { - return true; + return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 9244d6123..f99c16ea7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -52,6 +52,6 @@ public static boolean hasNbtOrComponent(ItemStack stack) { * @return ItemStack */ public static ItemStack fromNbt(World world, NbtCompound nbt) { - return ItemStack.fromNbt(world.getRegistryManager(), nbt).orElse(ItemStack.EMPTY); + return ItemStack.fromNbt(nbt); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java index c77faaf3d..b7b0569e5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java @@ -1,7 +1,6 @@ package net.pitan76.mcpitanlib.api.world; import net.minecraft.nbt.NbtCompound; -import net.minecraft.registry.RegistryWrapper; import net.minecraft.world.PersistentState; public abstract class CompatiblePersistentState extends PersistentState { @@ -17,11 +16,5 @@ public CompatiblePersistentState() { // 1.16 public abstract void readNbt(NbtCompound tag); - @Deprecated - @Override - public NbtCompound writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) { - return writeNbt(nbt); - } - public abstract NbtCompound writeNbt(NbtCompound tag); } From 6ec07aa724167eaa4e731f07fc302fba82c41ab8 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 18:43:39 +0900 Subject: [PATCH 319/617] fix1201 --- .../mcpitanlib/api/item/CompatItems.java | 2 +- .../mcpitanlib/api/util/CustomDataUtil.java | 18 ++++++++++++++++++ .../mcpitanlib/api/util/RecipeUtil.java | 19 +++++-------------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java index 7e71a42e0..d6d2d4db1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java @@ -4,7 +4,7 @@ import net.minecraft.item.Items; public class CompatItems { - public Item SHORT_GRASS = Items.SHORT_GRASS; + public Item SHORT_GRASS = Items.GRASS; public Item TALL_GRASS = Items.TALL_GRASS; public Item TURTLE_SCUTE = Items.SCUTE; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index bfe6ce3d4..eb5a458f2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -58,6 +58,24 @@ public static NbtCompound getNbt(ItemStack stack) { if (!hasNbt(stack)) return customData; + // 以前のNBTとの互換性 + for (String key : stack.getNbt().getKeys()) { + if (key.equals("components")) continue; + if (key.startsWith("minecraft:")) continue; + if ( + key.equals("Damage") || key.equals("Unbreakable") || key.equals("HideFlags") || + key.equals("Enchantments") || key.equals("StoredEnchantments") || key.equals("RepairCost") || + key.equals("display") || key.equals("AttributeModifiers") || key.equals("CustomModelData") || + key.equals("custom_potion_effects") || key.equals("Potion") || key.equals("CustomPotionColor") || + key.equals("Trim") || key.equals("BlockEntityTag") || key.equals("EntityTag") || + key.equals("CanPlaceOn") || key.equals("CanDestroy") || key.equals("effects") + ) continue; + + + customData.put(key, stack.getNbt().get(key)); + stack.getNbt().remove(key); + } + if (stack.getNbt().contains("components")) { NbtCompound components = stack.getNbt().getCompound("components"); if (components.contains("minecraft:custom_data")) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java index 2cd0686fc..5145fcd9a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java @@ -15,7 +15,7 @@ public class RecipeUtil { public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { - return new ShapelessRecipe(group, CraftingRecipeCategory.valueOf(category.name()), output, input); + return new ShapelessRecipe(id, group, CraftingRecipeCategory.valueOf(category.name()), output, input); } public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, ItemStack output, DefaultedList input) { @@ -27,7 +27,7 @@ public static ItemStack craft_2(Recipe recipe, C invent } public static ItemStack getOutput_2(Recipe recipe, World world) { - return recipe.getResult(world.getRegistryManager()); + return recipe.getOutput(world.getRegistryManager()); } public static ItemStack craft(Recipe recipe, Inventory inventory, World world) { @@ -39,21 +39,12 @@ public static ItemStack craft(Recipe recipe, Inventory inventory, World world } public static ItemStack getOutput(Recipe recipe, World world) { - return recipe.getResult(world.getRegistryManager()); + return recipe.getOutput(world.getRegistryManager()); } public static List> getAllRecipes(World world) { - Collection> recipes = world.getRecipeManager().values(); - List> outRecipes = new ArrayList<>(); - for (Object recipeEntryObj : recipes) { - if (recipeEntryObj instanceof RecipeEntry) { - RecipeEntry recipeEntry = (RecipeEntry) recipeEntryObj; - if (recipeEntry.value() instanceof Recipe) { - outRecipes.add(recipeEntry.value()); - } - } - } - return outRecipes; + Collection> recipes = world.getRecipeManager().values(); + return new ArrayList<>(recipes); } public static RecipeType getType(Recipe recipe) { From 7842a21f9f57378ce89d2ccf774a45b4b4165750 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 18:44:53 +0900 Subject: [PATCH 320/617] fix1201 --- .../mcpitanlib/api/util/CustomDataUtil.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index eb5a458f2..bfe6ce3d4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -58,24 +58,6 @@ public static NbtCompound getNbt(ItemStack stack) { if (!hasNbt(stack)) return customData; - // 以前のNBTとの互換性 - for (String key : stack.getNbt().getKeys()) { - if (key.equals("components")) continue; - if (key.startsWith("minecraft:")) continue; - if ( - key.equals("Damage") || key.equals("Unbreakable") || key.equals("HideFlags") || - key.equals("Enchantments") || key.equals("StoredEnchantments") || key.equals("RepairCost") || - key.equals("display") || key.equals("AttributeModifiers") || key.equals("CustomModelData") || - key.equals("custom_potion_effects") || key.equals("Potion") || key.equals("CustomPotionColor") || - key.equals("Trim") || key.equals("BlockEntityTag") || key.equals("EntityTag") || - key.equals("CanPlaceOn") || key.equals("CanDestroy") || key.equals("effects") - ) continue; - - - customData.put(key, stack.getNbt().get(key)); - stack.getNbt().remove(key); - } - if (stack.getNbt().contains("components")) { NbtCompound components = stack.getNbt().getCompound("components"); if (components.contains("minecraft:custom_data")) { From 21b32187bb51589668cd1847bec493276e45f567 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 18:51:07 +0900 Subject: [PATCH 321/617] fix 1192 RecipeUtil --- .../mcpitanlib/api/util/RecipeUtil.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java index 5145fcd9a..8d809d153 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java @@ -1,10 +1,9 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.inventory.CraftingInventory; import net.minecraft.inventory.Inventory; -import net.minecraft.inventory.RecipeInputInventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.*; -import net.minecraft.recipe.book.CraftingRecipeCategory; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; @@ -15,31 +14,32 @@ public class RecipeUtil { public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { - return new ShapelessRecipe(id, group, CraftingRecipeCategory.valueOf(category.name()), output, input); + return createShapelessRecipe(id, group, output, input); } public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, ItemStack output, DefaultedList input) { - return createShapelessRecipe(id, group, CompatibilityCraftingRecipeCategory.MISC, output, input); + return new ShapelessRecipe(id, group, output, input); } public static ItemStack craft_2(Recipe recipe, C inventory, World world) { - return recipe.craft(inventory, world.getRegistryManager()); + return recipe.craft(inventory); } public static ItemStack getOutput_2(Recipe recipe, World world) { - return recipe.getOutput(world.getRegistryManager()); + return recipe.getOutput(); } public static ItemStack craft(Recipe recipe, Inventory inventory, World world) { - if (inventory instanceof RecipeInputInventory) { - Recipe inputRecipe = (Recipe) recipe; - return inputRecipe.craft((RecipeInputInventory) inventory, world.getRegistryManager()); + if (inventory instanceof CraftingInventory) { + Recipe inputRecipe = (Recipe) recipe; + return inputRecipe.craft((CraftingInventory) inventory); } + return ItemStack.EMPTY; } public static ItemStack getOutput(Recipe recipe, World world) { - return recipe.getOutput(world.getRegistryManager()); + return recipe.getOutput(); } public static List> getAllRecipes(World world) { From 40c674311ee151bc9c871f5ddf63037e4130bbb3 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 29 Jun 2024 20:30:43 +0900 Subject: [PATCH 322/617] fixAPIs --- .../api/item/tool/CompatibleAxeItem.java | 7 +++- .../api/item/tool/CompatibleHoeItem.java | 7 +++- .../item/tool/CompatibleMiningToolItem.java | 7 +++- .../api/item/tool/CompatiblePickaxeItem.java | 7 +++- .../api/item/tool/CompatibleShearsItem.java | 7 +++- .../api/item/tool/CompatibleShovelItem.java | 7 +++- .../api/item/tool/CompatibleSwordItem.java | 7 +++- .../mcpitanlib/api/util/CustomDataUtil.java | 9 +++++ .../mcpitanlib/api/util/ItemStackUtil.java | 37 +++++++++++++++++++ .../api/world/CompatiblePersistentState.java | 8 +++- 10 files changed, 95 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java index c0c6da398..11dc73a7a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java @@ -71,8 +71,13 @@ public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } - // -1.20.6 + @Deprecated public boolean isDamageable() { + return isDamageableOnDefault(); + } + + // -1.20.6 + public boolean isDamageableOnDefault() { return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java index f213eb4ab..706582577 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java @@ -71,8 +71,13 @@ public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } - // -1.20.6 + @Deprecated public boolean isDamageable() { + return isDamageableOnDefault(); + } + + // -1.20.6 + public boolean isDamageableOnDefault() { return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java index edc658581..b07dc547f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java @@ -74,8 +74,13 @@ public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos return postMine(new PostMineEvent(stack, world, state, pos, miner)); } - // -1.20.6 + @Deprecated public boolean isDamageable() { + return isDamageableOnDefault(); + } + + // -1.20.6 + public boolean isDamageableOnDefault() { return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java index 494238139..93cd0cf33 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java @@ -71,8 +71,13 @@ public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } - // -1.20.6 + @Deprecated public boolean isDamageable() { + return isDamageableOnDefault(); + } + + // -1.20.6 + public boolean isDamageableOnDefault() { return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java index 7fee63860..a38a4d1ba 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java @@ -70,8 +70,13 @@ public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } - // -1.20.6 + @Deprecated public boolean isDamageable() { + return isDamageableOnDefault(); + } + + // -1.20.6 + public boolean isDamageableOnDefault() { return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java index b8a7eb646..f138a2a78 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java @@ -71,8 +71,13 @@ public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } - // -1.20.6 + @Deprecated public boolean isDamageable() { + return isDamageableOnDefault(); + } + + // -1.20.6 + public boolean isDamageableOnDefault() { return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java index 8001d566e..be0f4c95a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java @@ -71,8 +71,13 @@ public boolean postMine(PostMineEvent event) { return super.postMine(event.stack, event.world, event.state, event.pos, event.miner); } - // -1.20.6 + @Deprecated public boolean isDamageable() { + return isDamageableOnDefault(); + } + + // -1.20.6 + public boolean isDamageableOnDefault() { return super.isDamageable(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index bfe6ce3d4..d170679cd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -168,4 +168,13 @@ public static void put(ItemStack stack, String key, T value) { public static boolean contains(ItemStack stack, String key) { return has(stack, key); } + + /** + * 1.20.3以前下位互換のための修正用 + * @param stack ItemStack + * @param keys 移植するキー + */ + public static void fix_oldNbt(ItemStack stack, String[] keys) { + + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index f99c16ea7..36b741652 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.world.World; @@ -54,4 +55,40 @@ public static boolean hasNbtOrComponent(ItemStack stack) { public static ItemStack fromNbt(World world, NbtCompound nbt) { return ItemStack.fromNbt(nbt); } + + public static ItemStack getDefaultStack(Item item) { + return item.getDefaultStack(); + } + + public static int getMaxDamage(ItemStack stack) { + return stack.getMaxDamage(); + } + + public static int getMaxDamage(Item item) { + return getMaxDamage(getDefaultStack(item)); + } + + public static int getDamage(ItemStack stack) { + return stack.getDamage(); + } + + public static void setDamage(ItemStack stack, int damage) { + stack.setDamage(damage); + } + + public static int getCount(ItemStack stack) { + return stack.getCount(); + } + + public static void setCount(ItemStack stack, int count) { + stack.setCount(count); + } + + public static void decrementCount(ItemStack stack, int count) { + stack.decrement(count); + } + + public static void incrementCount(ItemStack stack, int count) { + stack.increment(count); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java index b7b0569e5..247d552a1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java @@ -16,5 +16,11 @@ public CompatiblePersistentState() { // 1.16 public abstract void readNbt(NbtCompound tag); - public abstract NbtCompound writeNbt(NbtCompound tag); + @Deprecated + @Override + public NbtCompound writeNbt(NbtCompound nbt) { + return writeNbtOverride(nbt); + } + + public abstract NbtCompound writeNbtOverride(NbtCompound tag); } From 1de96cc5ec1b383dccc892c960cf09575d1a46c5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 20:31:04 +0900 Subject: [PATCH 323/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index a391e77c6..ecddbd6e6 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.5 +mod_version=2.2.6 maven_group=net.pitan76 \ No newline at end of file From 507634fb43ac535a457b30614dfdba64b616183a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 29 Jun 2024 20:30:43 +0900 Subject: [PATCH 324/617] fix1201 --- .../net/pitan76/mcpitanlib/api/util/CustomDataUtil.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index d170679cd..f31f7fff8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -175,6 +175,15 @@ public static boolean contains(ItemStack stack, String key) { * @param keys 移植するキー */ public static void fix_oldNbt(ItemStack stack, String[] keys) { + NbtCompound customData = getOrCreateNbt(stack); + for (String key : keys) { + if (stack.getNbt().contains(key)) { + customData.put(key, stack.getNbt().get(key)); + stack.getNbt().remove(key); + } + } + + setNbt(stack, customData); } } From 808e7dcde3d24c3f31c50b709c6e42e21306bfae Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 21:15:12 +0900 Subject: [PATCH 325/617] tooltip api --- .../api/client/event/ItemTooltipRegistry.java | 10 ++++ .../event/listener/ItemTooltipContext.java | 58 +++++++++++++++++++ .../event/listener/ItemTooltipListener.java | 17 ++++++ 3 files changed, 85 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/event/ItemTooltipRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/ItemTooltipRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/ItemTooltipRegistry.java new file mode 100644 index 000000000..8166f7406 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/ItemTooltipRegistry.java @@ -0,0 +1,10 @@ +package net.pitan76.mcpitanlib.api.client.event; + +import dev.architectury.event.events.client.ClientTooltipEvent; +import net.pitan76.mcpitanlib.api.client.event.listener.ItemTooltipListener; + +public class ItemTooltipRegistry { + public static void registerItemTooltip(ItemTooltipListener listener) { + ClientTooltipEvent.ITEM.register(listener::onTooltip); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java new file mode 100644 index 000000000..296fd2778 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java @@ -0,0 +1,58 @@ +package net.pitan76.mcpitanlib.api.client.event.listener; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; + +import java.util.List; + +public class ItemTooltipContext { + + public ItemStack stack; + public List texts; + public Item.TooltipContext tooltipContext; + + @Deprecated + public TooltipType type; + + public ItemTooltipContext(ItemStack stack, List texts, Item.TooltipContext tooltipContext, TooltipType type) { + this.stack = stack; + this.texts = texts; + this.tooltipContext = tooltipContext; + this.type = type; + } + + public ItemStack getStack() { + return stack; + } + + public List getTexts() { + return texts; + } + + public Item.TooltipContext getTooltipContext() { + return tooltipContext; + } + + @Deprecated + public TooltipType getType() { + return type; + } + + public void addTooltip(Text text) { + texts.add(text); + } + + public void addTooltip(List texts) { + this.texts.addAll(texts); + } + + public boolean isAdvanced() { + return type.isAdvanced(); + } + + public boolean isCreative() { + return type.isCreative(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java new file mode 100644 index 000000000..d86227934 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.client.event.listener; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; + +import java.util.List; + +@FunctionalInterface +public interface ItemTooltipListener { + void onTooltip(ItemTooltipContext context); + + default void onTooltip(ItemStack stack, List texts, Item.TooltipContext tooltipContext, TooltipType type) { + onTooltip(new ItemTooltipContext(stack, texts, tooltipContext, type)); + } +} \ No newline at end of file From fb5239075600ec23108f0fd74d31c40b8bc67b82 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 21:16:38 +0900 Subject: [PATCH 326/617] fix tooltip api --- .../api/client/event/listener/ItemTooltipContext.java | 2 +- .../api/client/event/listener/ItemTooltipListener.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java index 296fd2778..491e1a740 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.client.event.listener; +import net.minecraft.client.item.TooltipType; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; import net.minecraft.text.Text; import java.util.List; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java index d86227934..64de7f16b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.client.event.listener; +import net.minecraft.client.item.TooltipType; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; import net.minecraft.text.Text; import java.util.List; From 5619b54cb7a75e01a677d2f71819c330809d16b0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 21:15:26 +0900 Subject: [PATCH 327/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index ecddbd6e6..ceb095932 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.6 +mod_version=2.2.7 maven_group=net.pitan76 \ No newline at end of file From 5c4c20682dc76d63be68159a81ba43404dff9571 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 21:20:23 +0900 Subject: [PATCH 328/617] fix tooltip api2 --- .../event/listener/ItemTooltipContext.java | 22 +++++-------------- .../event/listener/ItemTooltipListener.java | 7 +++--- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java index 491e1a740..4d956f00d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java @@ -1,7 +1,6 @@ package net.pitan76.mcpitanlib.api.client.event.listener; -import net.minecraft.client.item.TooltipType; -import net.minecraft.item.Item; +import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -11,16 +10,12 @@ public class ItemTooltipContext { public ItemStack stack; public List texts; - public Item.TooltipContext tooltipContext; + public TooltipContext tooltipContext; - @Deprecated - public TooltipType type; - - public ItemTooltipContext(ItemStack stack, List texts, Item.TooltipContext tooltipContext, TooltipType type) { + public ItemTooltipContext(ItemStack stack, List texts, TooltipContext tooltipContext) { this.stack = stack; this.texts = texts; this.tooltipContext = tooltipContext; - this.type = type; } public ItemStack getStack() { @@ -31,15 +26,10 @@ public List getTexts() { return texts; } - public Item.TooltipContext getTooltipContext() { + public TooltipContext getTooltipContext() { return tooltipContext; } - @Deprecated - public TooltipType getType() { - return type; - } - public void addTooltip(Text text) { texts.add(text); } @@ -49,10 +39,10 @@ public void addTooltip(List texts) { } public boolean isAdvanced() { - return type.isAdvanced(); + return tooltipContext.isAdvanced(); } public boolean isCreative() { - return type.isCreative(); + return tooltipContext.isCreative(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java index 64de7f16b..0a0b4a04b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipListener.java @@ -1,7 +1,6 @@ package net.pitan76.mcpitanlib.api.client.event.listener; -import net.minecraft.client.item.TooltipType; -import net.minecraft.item.Item; +import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -11,7 +10,7 @@ public interface ItemTooltipListener { void onTooltip(ItemTooltipContext context); - default void onTooltip(ItemStack stack, List texts, Item.TooltipContext tooltipContext, TooltipType type) { - onTooltip(new ItemTooltipContext(stack, texts, tooltipContext, type)); + default void onTooltip(ItemStack stack, List texts, TooltipContext tooltipContext) { + onTooltip(new ItemTooltipContext(stack, texts, tooltipContext)); } } \ No newline at end of file From 340814c216078dcc09e2ce65537806a8f1e54003 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 29 Jun 2024 21:24:14 +0900 Subject: [PATCH 329/617] use tooltipevent116 --- .../api/client/event/listener/ItemTooltipContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java index 4d956f00d..8149ff89d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/ItemTooltipContext.java @@ -43,6 +43,6 @@ public boolean isAdvanced() { } public boolean isCreative() { - return tooltipContext.isCreative(); + return !tooltipContext.isAdvanced(); } } From 511877545cd5fd941a67581c6597f8b5a84ca337 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 30 Jun 2024 00:30:06 +0900 Subject: [PATCH 330/617] fix CompatItems info --- .../net/pitan76/mcpitanlib/api/item/CompatItems.java | 10 +++++----- info.properties | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java index d6d2d4db1..9903512e4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java @@ -4,13 +4,13 @@ import net.minecraft.item.Items; public class CompatItems { - public Item SHORT_GRASS = Items.GRASS; - public Item TALL_GRASS = Items.TALL_GRASS; - public Item TURTLE_SCUTE = Items.SCUTE; + public static Item SHORT_GRASS = Items.GRASS; + public static Item TALL_GRASS = Items.TALL_GRASS; + public static Item TURTLE_SCUTE = Items.SCUTE; // Compatibility - public Item GRASS = SHORT_GRASS; - public Item SCUTE = TURTLE_SCUTE; + public static Item GRASS = SHORT_GRASS; + public static Item SCUTE = TURTLE_SCUTE; public static boolean isExist(Item item) { return item != null && item != Items.AIR; diff --git a/info.properties b/info.properties index ceb095932..b41efbce2 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.7 +mod_version=2.2.8 maven_group=net.pitan76 \ No newline at end of file From 74eb18926450479b4d3efbe9f64b3f3472f8958e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 30 Jun 2024 00:30:06 +0900 Subject: [PATCH 331/617] add setNewDefaultState() --- .../net/pitan76/mcpitanlib/api/block/ExtendBlock.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 71aee156b..6d38ca91e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -233,4 +233,12 @@ public void appendProperties(AppendPropertiesArgs args) { public BlockState getNewDefaultState() { return super.getDefaultState(); } + + /** + * Compatible for setDefaultState() + * @param state BlockState + */ + public void setNewDefaultState(BlockState state) { + super.setDefaultState(state); + } } From 104cb9999246078b4f28131ac70c5cdaebda9be0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 30 Jun 2024 17:41:23 +0900 Subject: [PATCH 332/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index b41efbce2..536de8892 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.8 +mod_version=2.2.9 maven_group=net.pitan76 \ No newline at end of file From 926b528e7b2334a13d0f1490040094ae57e0afd5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 7 Jul 2024 12:50:22 +0900 Subject: [PATCH 333/617] NbtRWArgs(nbt, registryLookup) --- .../mcpitanlib/api/event/nbt/NbtRWArgs.java | 28 ++++++++++++++++ .../mcpitanlib/api/event/nbt/ReadNbtArgs.java | 16 +++++++++ .../api/event/nbt/WriteNbtArgs.java | 16 +++++++++ .../api/tile/CompatBlockEntity.java | 32 +++++++++++++++++- .../api/tile/CompatChestBlockEntity.java | 33 ++++++++++++++++++- .../mcpitanlib/api/util/InventoryUtil.java | 27 +++++++++++++++ .../mcpitanlib/api/util/ItemStackUtil.java | 10 ++++++ .../api/world/CompatiblePersistentState.java | 13 ++++++-- .../extra/transfer/util/FluidStorageUtil.java | 17 ++++++++++ info.properties | 2 +- 10 files changed, 188 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java new file mode 100644 index 000000000..f6b00513d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java @@ -0,0 +1,28 @@ +package net.pitan76.mcpitanlib.api.event.nbt; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.registry.RegistryWrapper; + +public class NbtRWArgs { + public NbtCompound nbt; + private final RegistryWrapper.WrapperLookup wrapperLookup; + + @Deprecated + public NbtRWArgs(NbtCompound nbt, RegistryWrapper.WrapperLookup wrapperLookup) { + this.nbt = nbt; + this.wrapperLookup = wrapperLookup; + } + + public NbtRWArgs(NbtCompound nbt) { + this(nbt, null); + } + + public NbtCompound getNbt() { + return nbt; + } + + @Deprecated + public RegistryWrapper.WrapperLookup getWrapperLookup() { + return wrapperLookup; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java new file mode 100644 index 000000000..857887850 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.event.nbt; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.registry.RegistryWrapper; + +public class ReadNbtArgs extends NbtRWArgs { + + @Deprecated + public ReadNbtArgs(NbtCompound nbt, RegistryWrapper.WrapperLookup wrapperLookup) { + super(nbt, wrapperLookup); + } + + public ReadNbtArgs(NbtCompound nbt) { + super(nbt); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java new file mode 100644 index 000000000..71bc990b6 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.event.nbt; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.registry.RegistryWrapper; + +public class WriteNbtArgs extends NbtRWArgs { + + @Deprecated + public WriteNbtArgs(NbtCompound nbt, RegistryWrapper.WrapperLookup wrapperLookup) { + super(nbt, wrapperLookup); + } + + public WriteNbtArgs(NbtCompound nbt) { + super(nbt); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java index 9aaa2f06a..b3188a47b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java @@ -9,6 +9,8 @@ import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; import net.minecraft.util.math.BlockPos; import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; import org.jetbrains.annotations.Nullable; @@ -36,25 +38,53 @@ public UpdatePacketType getUpdatePacketType() { return UpdatePacketType.NONE; } + public void writeNbt(WriteNbtArgs args) { + + } + + public void readNbt(ReadNbtArgs args) { + + } + + + // deprecated + + /** + * @deprecated Use {@link #writeNbt(WriteNbtArgs)} instead + */ + @Deprecated public void writeNbtOverride(NbtCompound nbt) { super.writeNbt(nbt); } + /** + * @deprecated Use {@link #readNbt(ReadNbtArgs)} instead + */ + @Deprecated public void readNbtOverride(NbtCompound nbt) { super.readNbt(nbt); } + // ---- + @Deprecated @Override public void writeNbt(NbtCompound nbt) { + // deprecated writeNbtOverride(nbt); + // ---- + + writeNbt(new WriteNbtArgs(nbt)); } @Deprecated @Override public void readNbt(NbtCompound nbt) { + // deprecated readNbtOverride(nbt); - } + // ---- + readNbt(new ReadNbtArgs(nbt)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatChestBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatChestBlockEntity.java index 77ac26416..da01103ba 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatChestBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatChestBlockEntity.java @@ -9,6 +9,8 @@ import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; import net.minecraft.util.math.BlockPos; import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; import org.jetbrains.annotations.Nullable; @@ -36,23 +38,52 @@ public UpdatePacketType getUpdatePacketType() { return UpdatePacketType.NONE; } + public void writeNbt(WriteNbtArgs args) { + + } + + public void readNbt(ReadNbtArgs args) { + + } + + + // deprecated + + /** + * @deprecated Use {@link #writeNbt(WriteNbtArgs)} instead + */ + @Deprecated public void writeNbtOverride(NbtCompound nbt) { super.writeNbt(nbt); } + /** + * @deprecated Use {@link #readNbt(ReadNbtArgs)} instead + */ + @Deprecated public void readNbtOverride(NbtCompound nbt) { super.readNbt(nbt); } + // ---- + @Deprecated @Override public void writeNbt(NbtCompound nbt) { + // deprecated writeNbtOverride(nbt); + // ---- + + writeNbt(new WriteNbtArgs(nbt)); } @Deprecated @Override public void readNbt(NbtCompound nbt) { + // deprecated readNbtOverride(nbt); + // ---- + + readNbt(new ReadNbtArgs(nbt)); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index 17b17ad84..9190aea4a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -5,6 +5,7 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; public class InventoryUtil { public static boolean insertItem(ItemStack insertStack, DefaultedList inventory) { @@ -43,15 +44,41 @@ public static boolean canMergeItems(ItemStack first, ItemStack second) { return ItemStackUtil.areNbtOrComponentEqual(first, second); } + public static NbtCompound writeNbt(NbtRWArgs args, DefaultedList stacks, boolean setIfEmpty) { + return Inventories.writeNbt(args.nbt, stacks, setIfEmpty, args.getWrapperLookup()); + } + + public static NbtCompound writeNbt(NbtRWArgs args, DefaultedList stacks) { + return writeNbt(args, stacks, true); + } + + public static void readNbt(NbtRWArgs args, DefaultedList stacks) { + Inventories.readNbt(args.nbt, stacks, args.getWrapperLookup()); + } + + // deprecated + /** + * @deprecated Use {@link #writeNbt(NbtRWArgs, DefaultedList)} instead + */ + @Deprecated public static NbtCompound writeNbt(World world, NbtCompound nbt, DefaultedList stacks) { return writeNbt(world, nbt, true, stacks); } + /** + * @deprecated Use {@link #writeNbt(NbtRWArgs, DefaultedList, boolean)} instead + */ + @Deprecated public static NbtCompound writeNbt(World world, NbtCompound nbt, boolean setIfEmpty, DefaultedList stacks) { return Inventories.writeNbt(nbt, stacks, setIfEmpty); } + /** + * @deprecated Use {@link #readNbt(NbtRWArgs, DefaultedList)} instead + */ + @Deprecated public static void readNbt(World world, NbtCompound nbt, DefaultedList stacks) { Inventories.readNbt(nbt, stacks); } + // ---- } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 36b741652..77a5b0cb4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -4,6 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; import java.util.Objects; @@ -56,6 +57,15 @@ public static ItemStack fromNbt(World world, NbtCompound nbt) { return ItemStack.fromNbt(nbt); } + /** + * NBTからItemStackを取得する + * @param args NbtRWArgs + * @return ItemStack + */ + public static ItemStack fromNbt(NbtRWArgs args) { + return ItemStack.fromNbt(args.getWrapperLookup(), args.getNbt()).orElse(ItemStack.EMPTY); + } + public static ItemStack getDefaultStack(Item item) { return item.getDefaultStack(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java index 247d552a1..4b60ecf52 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java @@ -2,6 +2,8 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.world.PersistentState; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; public abstract class CompatiblePersistentState extends PersistentState { // 1.16 @@ -14,13 +16,18 @@ public CompatiblePersistentState() { } // 1.16 - public abstract void readNbt(NbtCompound tag); + @Deprecated + public void readNbt(NbtCompound tag) { + readNbt(new ReadNbtArgs(tag)); + } + + public abstract void readNbt(ReadNbtArgs args); @Deprecated @Override public NbtCompound writeNbt(NbtCompound nbt) { - return writeNbtOverride(nbt); + return writeNbt(new WriteNbtArgs(nbt)); } - public abstract NbtCompound writeNbtOverride(NbtCompound tag); + public abstract NbtCompound writeNbt(WriteNbtArgs args); } diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java index 53c2ea7fa..7242ffa78 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -6,6 +6,7 @@ import net.minecraft.fluid.FluidState; import net.minecraft.nbt.NbtCompound; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; @SuppressWarnings("removal") public class FluidStorageUtil { @@ -24,10 +25,26 @@ protected void markDirty() { }; } + public static void readNbt(SingleFluidStorage storage, NbtRWArgs args) { + storage.readNbt(args.getNbt(), args.getWrapperLookup()); + } + + public static void writeNbt(SingleFluidStorage storage, NbtRWArgs args) { + storage.writeNbt(args.getNbt(), args.getWrapperLookup()); + } + + /** + * @deprecated Use {@link #readNbt(SingleFluidStorage, NbtRWArgs)} instead + */ + @Deprecated public static void readNbt(SingleFluidStorage storage, NbtCompound nbt, World world) { storage.fluidVariant.getNbt().copyFrom(nbt); } + /** + * @deprecated Use {@link #writeNbt(SingleFluidStorage, NbtRWArgs)} instead + */ + @Deprecated public static void writeNbt(SingleFluidStorage storage, NbtCompound nbt, World world) { nbt.copyFrom(storage.fluidVariant.getNbt()); } diff --git a/info.properties b/info.properties index 536de8892..d74fbe8f4 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.2.9 +mod_version=2.3.1 maven_group=net.pitan76 \ No newline at end of file From cfed600dcb4020f8459060015db3fa499521ceb4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 7 Jul 2024 14:35:47 +0900 Subject: [PATCH 334/617] 1204 --- .../java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java | 4 ++-- .../java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java | 2 +- .../mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index 9190aea4a..e4d2af1ad 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -45,7 +45,7 @@ public static boolean canMergeItems(ItemStack first, ItemStack second) { } public static NbtCompound writeNbt(NbtRWArgs args, DefaultedList stacks, boolean setIfEmpty) { - return Inventories.writeNbt(args.nbt, stacks, setIfEmpty, args.getWrapperLookup()); + return Inventories.writeNbt(args.nbt, stacks, setIfEmpty); } public static NbtCompound writeNbt(NbtRWArgs args, DefaultedList stacks) { @@ -53,7 +53,7 @@ public static NbtCompound writeNbt(NbtRWArgs args, DefaultedList stac } public static void readNbt(NbtRWArgs args, DefaultedList stacks) { - Inventories.readNbt(args.nbt, stacks, args.getWrapperLookup()); + Inventories.readNbt(args.nbt, stacks); } // deprecated diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 77a5b0cb4..060efd585 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -63,7 +63,7 @@ public static ItemStack fromNbt(World world, NbtCompound nbt) { * @return ItemStack */ public static ItemStack fromNbt(NbtRWArgs args) { - return ItemStack.fromNbt(args.getWrapperLookup(), args.getNbt()).orElse(ItemStack.EMPTY); + return ItemStack.fromNbt(args.getNbt()); } public static ItemStack getDefaultStack(Item item) { diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java index 7242ffa78..a6b8208ee 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -26,11 +26,11 @@ protected void markDirty() { } public static void readNbt(SingleFluidStorage storage, NbtRWArgs args) { - storage.readNbt(args.getNbt(), args.getWrapperLookup()); + storage.readNbt(args.getNbt()); } public static void writeNbt(SingleFluidStorage storage, NbtRWArgs args) { - storage.writeNbt(args.getNbt(), args.getWrapperLookup()); + storage.writeNbt(args.getNbt()); } /** From cb167bacbec44070a531e51115295ccbf0d614f8 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 7 Jul 2024 14:43:39 +0900 Subject: [PATCH 335/617] 1182 --- .../mcpitanlib/api/event/nbt/NbtRWArgs.java | 15 +-------------- .../mcpitanlib/api/event/nbt/ReadNbtArgs.java | 6 ------ .../mcpitanlib/api/event/nbt/WriteNbtArgs.java | 6 ------ 3 files changed, 1 insertion(+), 26 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java index f6b00513d..7f181d105 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java @@ -1,28 +1,15 @@ package net.pitan76.mcpitanlib.api.event.nbt; import net.minecraft.nbt.NbtCompound; -import net.minecraft.registry.RegistryWrapper; public class NbtRWArgs { public NbtCompound nbt; - private final RegistryWrapper.WrapperLookup wrapperLookup; - - @Deprecated - public NbtRWArgs(NbtCompound nbt, RegistryWrapper.WrapperLookup wrapperLookup) { - this.nbt = nbt; - this.wrapperLookup = wrapperLookup; - } public NbtRWArgs(NbtCompound nbt) { - this(nbt, null); + this.nbt = nbt; } public NbtCompound getNbt() { return nbt; } - - @Deprecated - public RegistryWrapper.WrapperLookup getWrapperLookup() { - return wrapperLookup; - } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java index 857887850..0fa846f0f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java @@ -1,15 +1,9 @@ package net.pitan76.mcpitanlib.api.event.nbt; import net.minecraft.nbt.NbtCompound; -import net.minecraft.registry.RegistryWrapper; public class ReadNbtArgs extends NbtRWArgs { - @Deprecated - public ReadNbtArgs(NbtCompound nbt, RegistryWrapper.WrapperLookup wrapperLookup) { - super(nbt, wrapperLookup); - } - public ReadNbtArgs(NbtCompound nbt) { super(nbt); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java index 71bc990b6..295063b02 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java @@ -1,15 +1,9 @@ package net.pitan76.mcpitanlib.api.event.nbt; import net.minecraft.nbt.NbtCompound; -import net.minecraft.registry.RegistryWrapper; public class WriteNbtArgs extends NbtRWArgs { - @Deprecated - public WriteNbtArgs(NbtCompound nbt, RegistryWrapper.WrapperLookup wrapperLookup) { - super(nbt, wrapperLookup); - } - public WriteNbtArgs(NbtCompound nbt) { super(nbt); } From ad5eb814ea303597eae187f9f481380a03dea0e5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 7 Jul 2024 14:57:19 +0900 Subject: [PATCH 336/617] FluidStorageUtil --- .../mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java index a6b8208ee..67a10fe2c 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -26,11 +26,11 @@ protected void markDirty() { } public static void readNbt(SingleFluidStorage storage, NbtRWArgs args) { - storage.readNbt(args.getNbt()); + storage.fluidVariant.getNbt().copyFrom(args.nbt); } public static void writeNbt(SingleFluidStorage storage, NbtRWArgs args) { - storage.writeNbt(args.getNbt()); + args.nbt.copyFrom(storage.fluidVariant.getNbt()); } /** From 88942af071fd7536a66c5933bcdbb2c1150b37a8 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 8 Jul 2024 10:29:10 +0900 Subject: [PATCH 337/617] fix InventoryUtil API --- .../pitan76/mcpitanlib/api/util/InventoryUtil.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index e4d2af1ad..bf8f6fb30 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -44,8 +44,16 @@ public static boolean canMergeItems(ItemStack first, ItemStack second) { return ItemStackUtil.areNbtOrComponentEqual(first, second); } + public static NbtCompound writeNbt(NbtRWArgs args, NbtCompound nbt, DefaultedList stacks, boolean setIfEmpty) { + return Inventories.writeNbt(nbt, stacks, setIfEmpty); + } + + public static void readNbt(NbtRWArgs args, NbtCompound nbt, DefaultedList stacks) { + Inventories.readNbt(nbt, stacks); + } + public static NbtCompound writeNbt(NbtRWArgs args, DefaultedList stacks, boolean setIfEmpty) { - return Inventories.writeNbt(args.nbt, stacks, setIfEmpty); + return Inventories.writeNbt(args.getNbt(), stacks, setIfEmpty); } public static NbtCompound writeNbt(NbtRWArgs args, DefaultedList stacks) { @@ -53,7 +61,7 @@ public static NbtCompound writeNbt(NbtRWArgs args, DefaultedList stac } public static void readNbt(NbtRWArgs args, DefaultedList stacks) { - Inventories.readNbt(args.nbt, stacks); + Inventories.readNbt(args.getNbt(), stacks); } // deprecated From 98d096b258d5ba48fb19f919a5e9d517da98ed2e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 8 Jul 2024 10:29:33 +0900 Subject: [PATCH 338/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index d74fbe8f4..497319321 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.1 +mod_version=2.3.2 maven_group=net.pitan76 \ No newline at end of file From 25178bad0d526aa4339308bb706ccf846755e42b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 9 Jul 2024 15:29:27 +0900 Subject: [PATCH 339/617] fix CustomDataUtil --- .../java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java | 2 +- info.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index f31f7fff8..fef95d330 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -33,7 +33,7 @@ public static void setNbt(ItemStack stack, NbtCompound nbt) { components = stack.getNbt().getCompound("components"); } components.put("minecraft:custom_data", nbt); - stack.getNbt().put("components", components); + stack.getOrCreateNbt().put("components", components); } /** diff --git a/info.properties b/info.properties index 497319321..dbe054df5 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.2 +mod_version=2.3.2-fix.1 maven_group=net.pitan76 \ No newline at end of file From 57e439b32ade8e87be35ceb221d6dd391fec82dd Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 13 Jul 2024 14:28:01 +0900 Subject: [PATCH 340/617] add damage() in ItemStackUtil --- .../pitan76/mcpitanlib/api/util/ItemStackUtil.java | 11 +++++++++++ info.properties | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 060efd585..25e95bc51 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -1,8 +1,11 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; @@ -101,4 +104,12 @@ public static void decrementCount(ItemStack stack, int count) { public static void incrementCount(ItemStack stack, int count) { stack.increment(count); } + + public static void damage(ItemStack stack, int amount, ServerPlayerEntity entity, Runnable breakCallback) { + stack.damage(amount, entity.getRandom(), entity, breakCallback); + } + + public static void damage(ItemStack stack, int amount, LivingEntity entity, EquipmentSlot slot) { + stack.damage(amount, entity, slot); + } } diff --git a/info.properties b/info.properties index dbe054df5..de940b857 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.2-fix.1 +mod_version=2.3.3 maven_group=net.pitan76 \ No newline at end of file From 59c6d954963131275e3a483deadf0f0d620ff613 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:07:08 +0900 Subject: [PATCH 341/617] add damage() in ItemStackUtil --- .../net/pitan76/mcpitanlib/api/util/ItemStackUtil.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 25e95bc51..0fc3231a3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -106,10 +106,13 @@ public static void incrementCount(ItemStack stack, int count) { } public static void damage(ItemStack stack, int amount, ServerPlayerEntity entity, Runnable breakCallback) { - stack.damage(amount, entity.getRandom(), entity, breakCallback); + stack.damage(amount, entity, (player) -> breakCallback.run()); } public static void damage(ItemStack stack, int amount, LivingEntity entity, EquipmentSlot slot) { - stack.damage(amount, entity, slot); + if (entity instanceof ServerPlayerEntity entity1) + damage(stack, amount, entity1, () -> { + + }); } } From 813fd385a3c3fe6a40d58714c5245b7d7989624f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:56:49 +0900 Subject: [PATCH 342/617] add damage() in ItemStackUtil2 --- .../java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 0fc3231a3..82a13613c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -115,4 +115,8 @@ public static void damage(ItemStack stack, int amount, LivingEntity entity, Equi }); } + + public static void damage(ItemStack stack, int amount, ServerPlayerEntity entity) { + stack.damage(amount, entity.getServerWorld(), entity, (item) -> entity.sendEquipmentBreakStatus(item, EquipmentSlot.MAINHAND)); + } } From 01d7df69c3e39dd8cb33e83bf5bebbb94ed57945 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 13 Jul 2024 21:38:33 +0900 Subject: [PATCH 343/617] add damage() in ItemStackUtil2 --- .../java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 82a13613c..7f5ebc90c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -117,6 +117,6 @@ public static void damage(ItemStack stack, int amount, LivingEntity entity, Equi } public static void damage(ItemStack stack, int amount, ServerPlayerEntity entity) { - stack.damage(amount, entity.getServerWorld(), entity, (item) -> entity.sendEquipmentBreakStatus(item, EquipmentSlot.MAINHAND)); + stack.damage(amount, entity, (entity2) -> entity2.sendEquipmentBreakStatus(EquipmentSlot.MAINHAND)); } } From f7cf8338c2c4e8fdc09a3dc9c7ebd54af2ab4ff8 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 30 Aug 2024 12:56:16 +0900 Subject: [PATCH 344/617] add APIs --- .../mcpitanlib/api/block/ExtendBlock.java | 32 ++++ .../api/block/ExtendBlockProvider.java | 50 ++++++ .../api/block/ExtendPillarBlock.java | 13 ++ .../client/registry/CompatRegistryClient.java | 4 + .../api/enchantment/CompatEnchantment.java | 68 ++++++++ .../mcpitanlib/api/entity/CompatEntity.java | 78 +++++++++ .../api/entity/CompatThrownItemEntity.java | 149 ++++++++++++++++++ .../pitan76/mcpitanlib/api/entity/Player.java | 5 + .../api/event/block/BlockUseEvent.java | 4 + .../api/event/block/OutlineShapeEvent.java | 5 + .../api/event/block/PlacementStateArgs.java | 106 +++++++++++++ .../api/event/entity/CollisionEvent.java | 25 +++ .../api/event/entity/EntityHitEvent.java | 26 +++ .../api/event/entity/InitDataTrackerArgs.java | 20 +++ .../api/event/item/ItemUseEvent.java | 4 + .../mcpitanlib/api/util/BlockStateUtil.java | 5 + .../mcpitanlib/api/util/CompatIdentifier.java | 122 ++++++++++++++ .../mcpitanlib/api/util/EnchantmentUtil.java | 49 ++++++ .../mcpitanlib/api/util/EntityUtil.java | 8 + .../pitan76/mcpitanlib/api/util/Logger.java | 47 ++++++ .../mcpitanlib/api/util/LoggerUtil.java | 38 +++++ .../api/util/ParticleEffectUtil.java | 13 ++ .../mcpitanlib/api/util/VoxelShapeUtil.java | 35 ++++ .../mcpitanlib/api/util/WorldUtil.java | 5 + .../api/util/entity/ThrownItemEntityUtil.java | 14 ++ .../effect/ItemStackParticleEffectUtil.java | 22 +++ .../mcpitanlib/mixin/AbstractBlockMixin.java | 15 ++ .../pitan76/mcpitanlib/mixin/BlockMixin.java | 60 ++++++- 28 files changed, 1020 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendPillarBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/enchantment/CompatEnchantment.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/CollisionEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/EntityHitEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/LoggerUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/ParticleEffectUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/effect/ItemStackParticleEffectUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 6d38ca91e..ca0157f05 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -5,6 +5,8 @@ import net.minecraft.block.ShapeContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContext; import net.minecraft.screen.NamedScreenHandlerFactory; @@ -22,6 +24,7 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.block.*; import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.util.TextUtil; import org.jetbrains.annotations.Nullable; @@ -241,4 +244,33 @@ public BlockState getNewDefaultState() { public void setNewDefaultState(BlockState state) { super.setDefaultState(state); } + + @Deprecated + @Override + public @Nullable BlockState getPlacementState(ItemPlacementContext ctx) { + return this.getPlacementState(new PlacementStateArgs(ctx, this)); + } + + /** + * get placement state + * @param args PlacementStateArgs + * @return BlockState + */ + public @Nullable BlockState getPlacementState(PlacementStateArgs args) { + return super.getPlacementState(args.ctx); + } + + @Deprecated + @Override + public void appendTooltip(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipType type) { + appendTooltip(new ItemAppendTooltipEvent(stack, null, tooltip, type, context)); + } + + /** + * append tooltip to item + * @param event ItemAppendTooltipEvent + */ + public void appendTooltip(ItemAppendTooltipEvent event) { + super.appendTooltip(event.stack, event.context, event.tooltip, event.type); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java index aa475c456..6ea77f2b0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java @@ -1,13 +1,18 @@ package net.pitan76.mcpitanlib.api.block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.shape.VoxelShape; import net.pitan76.mcpitanlib.api.event.block.*; import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.util.TextUtil; +import java.util.List; + public interface ExtendBlockProvider { /** @@ -100,6 +105,51 @@ default void onStateReplaced(StateReplacedEvent event, Options options) { options.cancel = false; } + /** + * get pick stack + * @param event PickStackEvent + * @param options Options + * @return ItemStack + */ + default ItemStack getPickStack(PickStackEvent event, Options options) { + options.cancel = false; + return null; + } + + /** + * get placement state + * @param args PlacementStateArgs + * @param options Options + */ + default BlockState getPlacementState(PlacementStateArgs args, Options options) { + options.cancel = false; + return null; + } + + /** + * append properties + * @param args AppendPropertiesArgs + * @param options Options + */ + default void appendProperties(AppendPropertiesArgs args, Options options) { + options.cancel = false; + } + + /** + * get dropped stacks + * @param args DroppedStacksArgs + * @param options Options + * @return List + */ + default List getDroppedStacks(DroppedStacksArgs args, Options options) { + options.cancel = false; + return null; + } + + default void appendTooltip(ItemAppendTooltipEvent event, Options options) { + options.cancel = false; + } + public static class Options { public boolean cancel = true; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendPillarBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendPillarBlock.java new file mode 100644 index 000000000..e6449fa99 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendPillarBlock.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.api.block; + +import net.minecraft.block.PillarBlock; + +public class ExtendPillarBlock extends PillarBlock implements ExtendBlockProvider { + public ExtendPillarBlock(Settings settings) { + super(settings); + } + + public ExtendPillarBlock(CompatibleBlockSettings settings) { + this(settings.build()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index bb1e0c13f..2b5edb94d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -183,4 +183,8 @@ public static void registerRenderTypeBlock(RenderLayer layer, Block block) { public static void registerRenderTypeFluid(RenderLayer layer, Fluid fluid) { RenderTypeRegistry.register(layer, fluid); } + + public static void registerCutoutBlock(Block block) { + registerRenderTypeBlock(RenderLayer.getCutout(), block); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/enchantment/CompatEnchantment.java b/common/src/main/java/net/pitan76/mcpitanlib/api/enchantment/CompatEnchantment.java new file mode 100644 index 000000000..949dbe1b5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/enchantment/CompatEnchantment.java @@ -0,0 +1,68 @@ +package net.pitan76.mcpitanlib.api.enchantment; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.registry.BuiltinRegistries; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.util.Identifier; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.EnchantmentUtil; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +public class CompatEnchantment { + private final RegistryKey registryKey; + + @Deprecated + public CompatEnchantment(RegistryKey registryKey) { + this.registryKey = registryKey; + } + + public CompatEnchantment of(Identifier identifier) { + return EnchantmentUtil.getEnchantment(identifier); + } + + public Identifier getId() { + return registryKey.getRegistry(); + } + + @Deprecated + public RegistryKey getRegistryKey() { + return registryKey; + } + + public String toString() { + return getId().toString(); + } + + public boolean equals(Object obj) { + if (obj instanceof CompatEnchantment) { + return ((CompatEnchantment) obj).getId().equals(getId()); + } + return false; + } + + protected RegistryEntry getEntry(@Nullable World world) { + Optional> optionalEntry; + if (world == null) { + optionalEntry = BuiltinRegistries.createWrapperLookup().createRegistryLookup() + .getOptionalEntry(RegistryKeys.ENCHANTMENT, registryKey); + } else { + optionalEntry = world.getRegistryManager().get(RegistryKeys.ENCHANTMENT).getEntry(registryKey); + } + + return optionalEntry.orElseThrow(); + } + + public Enchantment getEnchantment(@Nullable World world) { + return getEntry(world).value(); + } + + public int getLevel(ItemStack stack, @Nullable World world) { + return EnchantmentHelper.getLevel(getEntry(world), stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java new file mode 100644 index 000000000..796da806b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java @@ -0,0 +1,78 @@ +package net.pitan76.mcpitanlib.api.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.listener.ClientPlayPacketListener; +import net.minecraft.network.packet.Packet; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.entity.InitDataTrackerArgs; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; + +public class CompatEntity extends Entity { + public CompatEntity(EntityType type, World world) { + super(type, world); + } + + @Deprecated + @Override + public void initDataTracker(DataTracker.Builder builder) { + initDataTracker(new InitDataTrackerArgs(builder)); + } + + public void initDataTracker(InitDataTrackerArgs args) { + + } + + public void readCustomDataFromNbt(ReadNbtArgs nbt) { + + } + + public void writeCustomDataToNbt(WriteNbtArgs nbt) { + + } + + @Deprecated + @Override + public void readCustomDataFromNbt(NbtCompound nbt) { + readCustomDataFromNbt(new ReadNbtArgs(nbt)); + } + + @Deprecated + @Override + public void writeCustomDataToNbt(NbtCompound nbt) { + writeCustomDataToNbt(new WriteNbtArgs(nbt)); + } + + public Packet createSpawnPacket() { + return null; + } + + public void writeNbt(WriteNbtArgs args) { + super.writeNbt(args.getNbt()); + } + + public void readNbt(ReadNbtArgs args) { + super.readNbt(args.getNbt()); + } + + @Deprecated + @Override + public NbtCompound writeNbt(NbtCompound nbt) { + writeNbt(new WriteNbtArgs(nbt)); + return nbt; + } + + @Deprecated + @Override + public void readNbt(NbtCompound nbt) { + readNbt(new ReadNbtArgs(nbt)); + } + + @Override + public World getWorld() { + return super.getWorld(); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java new file mode 100644 index 000000000..a7f71a891 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java @@ -0,0 +1,149 @@ +package net.pitan76.mcpitanlib.api.entity; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.projectile.thrown.ThrownItemEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.text.Text; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.entity.CollisionEvent; +import net.pitan76.mcpitanlib.api.event.entity.EntityHitEvent; +import net.pitan76.mcpitanlib.api.event.entity.InitDataTrackerArgs; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; + +public abstract class CompatThrownItemEntity extends ThrownItemEntity { + + public CompatThrownItemEntity(EntityType entityType, World world) { + super(entityType, world); + } + + public CompatThrownItemEntity(EntityType entityType, double d, double e, double f, World world) { + super(entityType, d, e, f, world); + } + + public CompatThrownItemEntity(EntityType entityType, LivingEntity livingEntity, World world) { + super(entityType, livingEntity, world); + } + + public abstract Item getDefaultItemOverride(); + + @Deprecated + @Override + protected Item getDefaultItem() { + return getDefaultItemOverride(); + } + + public ItemStack callGetItem() { + return super.getStack(); + } + + @Deprecated + @Override + public ItemStack getStack() { + return callGetItem(); + } + + public void callSetItem(ItemStack stack) { + super.setItem(stack); + } + + @Deprecated + @Override + public void setItem(ItemStack stack) { + callSetItem(stack); + } + + public void callHandleStatus(byte status) { + super.handleStatus(status); + } + + @Deprecated + @Override + public void handleStatus(byte status) { + callHandleStatus(status); + } + + public void onEntityHit(EntityHitEvent event) { + super.onEntityHit(event.entityHitResult); + } + + @Deprecated + @Override + protected void onEntityHit(EntityHitResult entityHitResult) { + onEntityHit(new EntityHitEvent(entityHitResult)); + } + + public void onCollision(CollisionEvent event) { + super.onCollision(event.hitResult); + } + + @Deprecated + @Override + protected void onCollision(HitResult hitResult) { + onCollision(new CollisionEvent(hitResult)); + } + + // ------------------ ExtendEntity ------------------ + + @Deprecated + @Override + public void initDataTracker(DataTracker.Builder builder) { + initDataTracker(new InitDataTrackerArgs(builder)); + } + + public void initDataTracker(InitDataTrackerArgs args) { + super.initDataTracker(args.getBuilder()); + } + + public void readCustomDataFromNbt(ReadNbtArgs nbt) { + super.readCustomDataFromNbt(nbt.getNbt()); + } + + public void writeCustomDataToNbt(WriteNbtArgs nbt) { + super.writeCustomDataToNbt(nbt.getNbt()); + } + + @Deprecated + @Override + public void readCustomDataFromNbt(NbtCompound nbt) { + readCustomDataFromNbt(new ReadNbtArgs(nbt)); + } + + @Deprecated + @Override + public void writeCustomDataToNbt(NbtCompound nbt) { + writeCustomDataToNbt(new WriteNbtArgs(nbt)); + } + + public void writeNbt(WriteNbtArgs args) { + super.writeNbt(args.getNbt()); + } + + public void readNbt(ReadNbtArgs args) { + super.readNbt(args.getNbt()); + } + + @Deprecated + @Override + public NbtCompound writeNbt(NbtCompound nbt) { + writeNbt(new WriteNbtArgs(nbt)); + return nbt; + } + + @Deprecated + @Override + public void readNbt(NbtCompound nbt) { + readNbt(new ReadNbtArgs(nbt)); + } + + @Override + public World getWorld() { + return super.getWorld(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 64657bf49..9206f093c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -21,6 +21,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.gui.ExtendedNamedScreenHandlerFactory; @@ -287,4 +288,8 @@ public ItemStack getMainHandStack() { public ItemStack getOffHandStack() { return getStackInHand(Hand.OFF_HAND); } + + public Direction getHorizontalFacing() { + return getEntity().getHorizontalFacing(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java index 27ac0f670..62c6b3e4a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java @@ -95,4 +95,8 @@ public boolean hasBlockEntity() { public BlockEntity getBlockEntity() { return WorldUtil.getBlockEntity(world, pos); } + + public boolean isSneaking() { + return player.isSneaking(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java index 8489bdacd..c4586bfb7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java @@ -2,6 +2,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; +import net.minecraft.state.property.Property; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; import net.pitan76.mcpitanlib.api.event.BaseEvent; @@ -34,4 +35,8 @@ public BlockView getWorld() { public ShapeContext getContext() { return context; } + + public > T getProperty(Property property) { + return state.get(property); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java new file mode 100644 index 000000000..6c59a99cc --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java @@ -0,0 +1,106 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.state.property.Property; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; +import net.pitan76.mcpitanlib.api.util.BlockStateUtil; +import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; +import org.jetbrains.annotations.Nullable; + +public class PlacementStateArgs extends BaseEvent { + public ItemPlacementContext ctx; + + @Nullable + public Block block; + + public PlacementStateArgs(ItemPlacementContext ctx) { + this.ctx = ctx; + } + + public PlacementStateArgs(ItemPlacementContext ctx, @Nullable Block block) { + this.ctx = ctx; + this.block = block; + } + + public boolean canPlace() { + return ctx.canPlace(); + } + + public BlockPos getPos() { + return ctx.getBlockPos(); + } + + public Player getPlayer() { + return new Player(ctx.getPlayer()); + } + + public Direction[] getPlacementDirections() { + return ctx.getPlacementDirections(); + } + + public Hand getHand() { + return ctx.getHand(); + } + + public Direction getSide() { + return ctx.getSide(); + } + + public Direction getHorizontalPlayerFacing() { + return ctx.getHorizontalPlayerFacing(); + } + + public float getPlayerYaw() { + return ctx.getPlayerYaw(); + } + + public World getWorld() { + return ctx.getWorld(); + } + + public boolean isClient() { + return getWorld().isClient(); + } + + public Vec3d getHitPos() { + return ctx.getHitPos(); + } + + public boolean canReplaceExisting() { + return ctx.canReplaceExisting(); + } + + @Deprecated + public ItemUsageContextMixin getIUCAccessor() { + return (ItemUsageContextMixin) ctx; + } + + public BlockHitResult getHitResult() { + return getIUCAccessor().getHit(); + } + + public ItemUseOnBlockEvent toItemUseOnBlockEvent() { + return new ItemUseOnBlockEvent(getWorld(), getPlayer().getPlayerEntity(), getHand(), ctx.getStack(), getHitResult()); + } + + public ItemPlacementContext getCtx() { + return ctx; + } + + public , V extends T> BlockState withBlockState(Property property, V value) { + if (block == null) + return null; + + return BlockStateUtil.with(BlockStateUtil.getDefaultState(block), property, value); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/CollisionEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/CollisionEvent.java new file mode 100644 index 000000000..2bc5aa0d8 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/CollisionEvent.java @@ -0,0 +1,25 @@ +package net.pitan76.mcpitanlib.api.event.entity; + +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.Vec3d; + +public class CollisionEvent { + + public HitResult hitResult; + + public CollisionEvent(HitResult hitResult) { + this.hitResult = hitResult; + } + + public HitResult getHitResult() { + return hitResult; + } + + public HitResult.Type getType() { + return hitResult.getType(); + } + + public Vec3d getPos() { + return hitResult.getPos(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/EntityHitEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/EntityHitEvent.java new file mode 100644 index 000000000..048b496ed --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/EntityHitEvent.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.event.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.util.hit.HitResult; + +public class EntityHitEvent { + + public EntityHitResult entityHitResult; + + public EntityHitEvent(EntityHitResult result) { + this.entityHitResult = result; + } + + public EntityHitResult getEntityHitResult() { + return entityHitResult; + } + + public Entity getEntity() { + return entityHitResult.getEntity(); + } + + public HitResult.Type getType() { + return entityHitResult.getType(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java new file mode 100644 index 000000000..5adabbd80 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java @@ -0,0 +1,20 @@ +package net.pitan76.mcpitanlib.api.event.entity; + +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.TrackedData; + +public class InitDataTrackerArgs { + public DataTracker.Builder builder; + + public InitDataTrackerArgs(DataTracker.Builder builder) { + this.builder = builder; + } + + public DataTracker.Builder getBuilder() { + return builder; + } + + public DataTracker.Builder add(TrackedData data, T value) { + return builder.add(data, value); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java index 7405fede5..230611a56 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java @@ -56,4 +56,8 @@ public TypedActionResult pass() { public TypedActionResult consume() { return TypedActionResult.consume(stack); } + + public boolean isSneaking() { + return user.isSneaking(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index 0d3a302b7..53209c900 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -4,6 +4,7 @@ import net.minecraft.block.BlockState; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.state.StateManager; +import net.minecraft.state.property.Property; public class BlockStateUtil { public static Block getBlock(BlockState state) { @@ -29,4 +30,8 @@ public static BlockState getDefaultState(Block block) { public static StateManager getStateManager(Block block) { return block.getStateManager(); } + + public static , V extends T> BlockState with(BlockState state, Property property, V value) { + return state.with(property, value); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java new file mode 100644 index 000000000..5a21546e9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java @@ -0,0 +1,122 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.util.Identifier; + +/** + * This is the Identifier class unique to MCPitanLib. + * It is different from Minecraft's Identifier class. + */ +public class CompatIdentifier { + private final String namespace; + private final String path; + + /** + * Creates a new Identifier with the given namespace and path. + * @param namespace The namespace of the Identifier. + * @param path The path of the Identifier. + */ + public CompatIdentifier(String namespace, String path) { + this.namespace = namespace; + this.path = path; + } + + /** + * Creates a new Identifier with the given id. + * @param id The id of the Identifier. + */ + public CompatIdentifier(String id) { + if (!id.contains(":")) { + this.namespace = "minecraft"; + this.path = id; + return; + } + String[] split = id.split(":"); + this.namespace = split[0]; + this.path = split[1]; + } + + /** + * Creates a new Identifier with the given id. + * @param id The id of the Identifier. + * @return The Identifier. + */ + public static CompatIdentifier of(String id) { + return new CompatIdentifier(id); + } + + /** + * Creates a new Identifier with the given namespace and path. + * @param namespace The namespace of the Identifier. + * @param path The path of the Identifier. + * @return The Identifier. + */ + public static CompatIdentifier of(String namespace, String path) { + return new CompatIdentifier(namespace, path); + } + + /** + * Returns the string representation of the Identifier. + * @return The string representation of the Identifier. + */ + public String toString() { + return this.namespace + ":" + this.path; + } + + /** + * Returns the namespace of the Identifier. + * @return The namespace of the Identifier. + */ + public String getNamespace() { + return this.namespace; + } + + /** + * Returns the path of the Identifier. + * @return The path of the Identifier. + */ + public String getPath() { + return this.path; + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } else if (obj != null && this.getClass() == obj.getClass()) { + CompatIdentifier identifier = (CompatIdentifier)obj; + return this.namespace.equals(identifier.namespace) && this.path.equals(identifier.path); + } else { + return false; + } + } + + public boolean equals(CompatIdentifier identifier) { + return this.namespace.equals(identifier.namespace) && this.path.equals(identifier.path); + } + + public boolean equals(String id) { + return this.toString().equals(id); + } + + public static boolean equals(CompatIdentifier id1, CompatIdentifier id2) { + return id1.namespace.equals(id2.namespace) && id1.path.equals(id2.path); + } + + // ---- + + /** + * Converts this MCPitanLib Identifier to a Minecraft Identifier. + * @return The Minecraft Identifier. + */ + public Identifier toMinecraft() { + return IdentifierUtil.id(this.toString()); + } + + /** + * Converts a Minecraft Identifier to an MCPitanLib Identifier. + * @param id The Minecraft Identifier. + * @return The Identifier. + */ + public static CompatIdentifier fromMinecraft(Identifier id) { + return of(id.toString()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java new file mode 100644 index 000000000..bf9afb248 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java @@ -0,0 +1,49 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.util.Identifier; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.enchantment.CompatEnchantment; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class EnchantmentUtil { + public static CompatEnchantment getEnchantment(Identifier identifier) { + RegistryKey registryKey = RegistryKey.of(RegistryKeys.ENCHANTMENT, identifier); + return new CompatEnchantment(registryKey); + } + + public static Identifier getId(CompatEnchantment enchantment) { + return enchantment.getId(); + } + + public static int getLevel(CompatEnchantment enchantment, ItemStack stack, @Nullable World world) { + return enchantment.getLevel(stack, world); + } + + // CompatIdentifier + public static CompatEnchantment getEnchantment(CompatIdentifier identifier) { + return getEnchantment(identifier.toMinecraft()); + } + + public static CompatIdentifier getCompatId(CompatEnchantment enchantment) { + return CompatIdentifier.fromMinecraft(enchantment.getId()); + } + + public static List getEnchantments(ItemStack stack) { + List enchantments = new ArrayList<>(); + + EnchantmentHelper.getEnchantments(stack).getEnchantments().forEach((enchantment) -> { + if (enchantment.getKey().isPresent()) + enchantments.add(new CompatEnchantment(enchantment.getKey().get())); + }); + + return enchantments; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index 1be594da5..647f74c2d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -30,4 +30,12 @@ public static boolean damageWithMobAttack(Entity target, float damageAmount, Ent public static boolean damageWithPlayerAttack(Entity target, float damageAmount, Entity source, Player attacker) { return target.damage(DamageSourceUtil.playerAttack(attacker, source), damageAmount); } + + public static void discard(Entity entity) { + entity.discard(); + } + + public static void kill(Entity entity) { + entity.kill(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java new file mode 100644 index 000000000..4c3c8df7b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java @@ -0,0 +1,47 @@ +package net.pitan76.mcpitanlib.api.util; + +public class Logger { + private final org.apache.logging.log4j.Logger logger; + + public Logger(String modid) { + this.logger = LoggerUtil.getLogger(modid); + } + + public org.apache.logging.log4j.Logger getLogger() { + return logger; + } + + public void info(String message) { + LoggerUtil.info(logger, message); + } + + public void warn(String message) { + LoggerUtil.warn(logger, message); + } + + public void error(String message) { + LoggerUtil.error(logger, message); + } + + public void debug(String message) { + LoggerUtil.debug(logger, message); + } + + public void trace(String message) { + LoggerUtil.trace(logger, message); + } + + // ---- + + public void error(Exception e) { + error(e.getMessage()); + } + + public void initializeMessage() { + info("Initializing..."); + } + + public void initializedMessage() { + info("Initialized"); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/LoggerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/LoggerUtil.java new file mode 100644 index 000000000..666a367b5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/LoggerUtil.java @@ -0,0 +1,38 @@ +package net.pitan76.mcpitanlib.api.util; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class LoggerUtil { + public static Logger getLogger(String name) { + return LogManager.getLogger(name); + } + + public static Logger getLogger(Class clazz) { + return LogManager.getLogger(clazz); + } + + public static Logger getLogger() { + return LogManager.getLogger(); + } + + public static void info(Logger logger, String message) { + logger.info(message); + } + + public static void warn(Logger logger, String message) { + logger.warn(message); + } + + public static void error(Logger logger, String message) { + logger.error(message); + } + + public static void debug(Logger logger, String message) { + logger.debug(message); + } + + public static void trace(Logger logger, String message) { + logger.trace(message); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ParticleEffectUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ParticleEffectUtil.java new file mode 100644 index 000000000..bcfa9d246 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ParticleEffectUtil.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleType; +import net.pitan76.mcpitanlib.api.util.particle.effect.ItemStackParticleEffectUtil; + +public class ParticleEffectUtil { + public static ItemStackParticleEffectUtil itemStack = new ItemStackParticleEffectUtil(); + + public static ParticleType getType(ParticleEffect effect) { + return effect.getType(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java new file mode 100644 index 000000000..8c2343406 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; + +public class VoxelShapeUtil { + public static VoxelShape union(VoxelShape shape,VoxelShape... shapes) { + return VoxelShapes.union(shape, shapes); + } + + public static VoxelShape cuboid(double x1, double y1, double z1, double x2, double y2, double z2) { + return VoxelShapes.cuboid(x1, y1, z1, x2, y2, z2); + } + + public static VoxelShape cuboid(double x, double y, double z, double size) { + return VoxelShapes.cuboid(x, y, z, x + size, y + size, z + size); + } + + public static VoxelShape cuboid(double size) { + return VoxelShapes.cuboid(0, 0, 0, size, size, size); + } + + public static VoxelShape centeredCuboid(double x, double y, double z, double size) { + return VoxelShapes.cuboid(x - size / 2, y - size / 2, z - size / 2, x + size / 2, y + size / 2, z + size / 2); + } + + public static VoxelShape empty() { + return VoxelShapes.empty(); + } + + public static VoxelShape fullCube() { + return VoxelShapes.fullCube(); + } + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 93e6d881e..ef8de434b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -10,6 +10,7 @@ import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.item.ItemStack; +import net.minecraft.particle.ParticleEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ChunkTicketType; import net.minecraft.server.world.ServerWorld; @@ -214,4 +215,8 @@ public static void removeBlockEntity(World world, BlockPos pos) { public static boolean removeBlock(World world, BlockPos pos, boolean move) { return world.removeBlock(pos, move); } + + public static void addParticle(World world, ParticleEffect parameters, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { + world.addParticle(parameters, x, y, z, velocityX, velocityY, velocityZ); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java new file mode 100644 index 000000000..c883b01fe --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java @@ -0,0 +1,14 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.projectile.thrown.ThrownItemEntity; +import net.minecraft.item.ItemStack; + +public class ThrownItemEntityUtil { + public static ItemStack getItem(ThrownItemEntity entity) { + return entity.getStack(); + } + + public static void setItem(ThrownItemEntity entity, ItemStack stack) { + entity.setItem(stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/effect/ItemStackParticleEffectUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/effect/ItemStackParticleEffectUtil.java new file mode 100644 index 000000000..9eab41f4d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/effect/ItemStackParticleEffectUtil.java @@ -0,0 +1,22 @@ +package net.pitan76.mcpitanlib.api.util.particle.effect; + +import net.minecraft.item.ItemStack; +import net.minecraft.particle.ItemStackParticleEffect; +import net.minecraft.particle.ParticleType; +import net.minecraft.particle.ParticleTypes; + +// Use: ParticleEffectUtil +public class ItemStackParticleEffectUtil { + + public ItemStackParticleEffectUtil() { + // Empty constructor + } + + public ItemStackParticleEffect create(ParticleType type, ItemStack stack) { + return new ItemStackParticleEffect(type, stack); + } + + public ItemStackParticleEffect createTypedItem(ItemStack stack) { + return new ItemStackParticleEffect(ParticleTypes.ITEM, stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java index d5cea5d55..4e1b3767d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java @@ -4,6 +4,8 @@ import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.server.world.ServerWorld; @@ -25,6 +27,8 @@ import java.util.Random; +import java.util.List; + @Mixin(AbstractBlock.class) public class AbstractBlockMixin { @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) @@ -93,4 +97,15 @@ public class AbstractBlockMixin { ci.cancel(); } } + + @Inject(method = "getDroppedStacks", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inject_getDroppedStacks(BlockState state, LootContextParameterSet.Builder builder, CallbackInfoReturnable> cir) { + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + List returnValue = provider.getDroppedStacks(new DroppedStacksArgs(state, builder), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java index df8b72837..0df2cd43e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java @@ -4,14 +4,20 @@ import net.minecraft.block.BlockState; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.state.StateManager; +import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.WorldView; import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider; import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider.Options; -import net.pitan76.mcpitanlib.api.event.block.BlockBreakEvent; -import net.pitan76.mcpitanlib.api.event.block.BlockPlacedEvent; +import net.pitan76.mcpitanlib.api.event.block.*; import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.event.v1.listener.BlockBreakTask; import net.pitan76.mcpitanlib.api.event.v1.listener.BlockPlacedTask; import net.pitan76.mcpitanlib.api.event.v2.BlockEventRegistry; @@ -20,6 +26,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.List; + @Mixin(Block.class) public class BlockMixin { @@ -66,4 +74,52 @@ public class BlockMixin { ci.cancel(); } } + + @Inject(method = "getPickStack", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$getPickStack(WorldView world, BlockPos pos, BlockState state, CallbackInfoReturnable cir) { + // ExtendBlockProviderを実装している場合 + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + ItemStack returnValue = provider.getPickStack(new PickStackEvent(world, pos, state), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "appendProperties", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$appendProperties(StateManager.Builder builder, CallbackInfo ci) { + // ExtendBlockProviderを実装している場合 + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + provider.appendProperties(new AppendPropertiesArgs(builder), options); + if (options.cancel) + ci.cancel(); + } + } + + @Inject(method = "getPlacementState", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$getPlacementState(ItemPlacementContext ctx, CallbackInfoReturnable cir) { + // ExtendBlockProviderを実装している場合 + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + BlockState returnValue = provider.getPlacementState(new PlacementStateArgs(ctx), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "appendTooltip", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$appendTooltip(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipType type, CallbackInfo ci) { + // ExtendBlockProviderを実装している場合 + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + provider.appendTooltip(new ItemAppendTooltipEvent(stack, null, tooltip, type, context), options); + if (options.cancel) + ci.cancel(); + } + } } From 791fba769e7566ce243cf490e193871af3311f82 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 30 Aug 2024 15:32:56 +0900 Subject: [PATCH 345/617] 1201 --- .../src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java | 3 ++- info.properties | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java index 0df2cd43e..963883e16 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java @@ -25,6 +25,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.List; @@ -76,7 +77,7 @@ public class BlockMixin { } @Inject(method = "getPickStack", at = @At("HEAD"), cancellable = true) - private void mcpitanlib$getPickStack(WorldView world, BlockPos pos, BlockState state, CallbackInfoReturnable cir) { + private void mcpitanlib$getPickStack(BlockView world, BlockPos pos, BlockState state, CallbackInfoReturnable cir) { // ExtendBlockProviderを実装している場合 if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; diff --git a/info.properties b/info.properties index de940b857..75831314b 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.3 +mod_version=2.3.4 maven_group=net.pitan76 \ No newline at end of file From 36a0b6753c9863b0e885dee1c26e6bb85dd55490 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 30 Aug 2024 15:39:05 +0900 Subject: [PATCH 346/617] 1192 --- .../mcpitanlib/api/block/ExtendBlock.java | 1 - .../api/enchantment/CompatEnchantment.java | 36 ++++--------------- .../mcpitanlib/api/entity/CompatEntity.java | 2 +- .../api/event/block/PlacementStateArgs.java | 2 +- .../mcpitanlib/api/util/EnchantmentUtil.java | 12 +++---- .../mcpitanlib/mixin/AbstractBlockMixin.java | 2 +- 6 files changed, 14 insertions(+), 41 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index ca0157f05..1e88dcb60 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -5,7 +5,6 @@ import net.minecraft.block.ShapeContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContext; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/enchantment/CompatEnchantment.java b/common/src/main/java/net/pitan76/mcpitanlib/api/enchantment/CompatEnchantment.java index 949dbe1b5..f0427c4b3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/enchantment/CompatEnchantment.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/enchantment/CompatEnchantment.java @@ -3,23 +3,18 @@ import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.ItemStack; -import net.minecraft.registry.BuiltinRegistries; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.util.EnchantmentUtil; import org.jetbrains.annotations.Nullable; -import java.util.Optional; - public class CompatEnchantment { - private final RegistryKey registryKey; + private final Enchantment enchantment; @Deprecated - public CompatEnchantment(RegistryKey registryKey) { - this.registryKey = registryKey; + public CompatEnchantment(Enchantment enchantment) { + this.enchantment = enchantment; } public CompatEnchantment of(Identifier identifier) { @@ -27,12 +22,7 @@ public CompatEnchantment of(Identifier identifier) { } public Identifier getId() { - return registryKey.getRegistry(); - } - - @Deprecated - public RegistryKey getRegistryKey() { - return registryKey; + return Registry.ENCHANTMENT.getId(enchantment); } public String toString() { @@ -46,23 +36,11 @@ public boolean equals(Object obj) { return false; } - protected RegistryEntry getEntry(@Nullable World world) { - Optional> optionalEntry; - if (world == null) { - optionalEntry = BuiltinRegistries.createWrapperLookup().createRegistryLookup() - .getOptionalEntry(RegistryKeys.ENCHANTMENT, registryKey); - } else { - optionalEntry = world.getRegistryManager().get(RegistryKeys.ENCHANTMENT).getEntry(registryKey); - } - - return optionalEntry.orElseThrow(); - } - public Enchantment getEnchantment(@Nullable World world) { - return getEntry(world).value(); + return enchantment; } public int getLevel(ItemStack stack, @Nullable World world) { - return EnchantmentHelper.getLevel(getEntry(world), stack); + return EnchantmentHelper.getLevel(enchantment, stack); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java index 796da806b..43f5f4e9b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java @@ -4,8 +4,8 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.data.DataTracker; import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; -import net.minecraft.network.packet.Packet; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.entity.InitDataTrackerArgs; import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java index 6c59a99cc..de6f38cb0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java @@ -57,7 +57,7 @@ public Direction getSide() { } public Direction getHorizontalPlayerFacing() { - return ctx.getHorizontalPlayerFacing(); + return ctx.getPlayerFacing(); } public float getPlayerYaw() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java index bf9afb248..69cb70d99 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java @@ -1,11 +1,9 @@ package net.pitan76.mcpitanlib.api.util; -import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.ItemStack; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.enchantment.CompatEnchantment; import org.jetbrains.annotations.Nullable; @@ -15,8 +13,7 @@ public class EnchantmentUtil { public static CompatEnchantment getEnchantment(Identifier identifier) { - RegistryKey registryKey = RegistryKey.of(RegistryKeys.ENCHANTMENT, identifier); - return new CompatEnchantment(registryKey); + return new CompatEnchantment(Registry.ENCHANTMENT.get(identifier)); } public static Identifier getId(CompatEnchantment enchantment) { @@ -39,9 +36,8 @@ public static CompatIdentifier getCompatId(CompatEnchantment enchantment) { public static List getEnchantments(ItemStack stack) { List enchantments = new ArrayList<>(); - EnchantmentHelper.getEnchantments(stack).getEnchantments().forEach((enchantment) -> { - if (enchantment.getKey().isPresent()) - enchantments.add(new CompatEnchantment(enchantment.getKey().get())); + EnchantmentHelper.get(stack).forEach((key, value) -> { + enchantments.add(new CompatEnchantment(key)); }); return enchantments; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java index 4e1b3767d..72edd7408 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java @@ -99,7 +99,7 @@ public class AbstractBlockMixin { } @Inject(method = "getDroppedStacks", at = @At("HEAD"), cancellable = true) - private void mcpitanlib$inject_getDroppedStacks(BlockState state, LootContextParameterSet.Builder builder, CallbackInfoReturnable> cir) { + private void mcpitanlib$inject_getDroppedStacks(BlockState state, LootContext.Builder builder, CallbackInfoReturnable> cir) { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); From 318711a2b44176be86ddde2e269b97aa197fb781 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 30 Aug 2024 15:47:19 +0900 Subject: [PATCH 347/617] 1182 --- .../pitan76/mcpitanlib/api/block/ExtendBlock.java | 7 ++++--- .../mcpitanlib/api/entity/CompatEntity.java | 5 ++--- .../api/entity/CompatThrownItemEntity.java | 8 +++----- .../api/event/entity/InitDataTrackerArgs.java | 15 +-------------- .../api/event/item/ItemAppendTooltipEvent.java | 9 +++++++++ .../net/pitan76/mcpitanlib/mixin/BlockMixin.java | 9 ++++----- 6 files changed, 23 insertions(+), 30 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 1e88dcb60..b25435bdd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -3,6 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; +import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemPlacementContext; @@ -261,8 +262,8 @@ public void setNewDefaultState(BlockState state) { @Deprecated @Override - public void appendTooltip(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipType type) { - appendTooltip(new ItemAppendTooltipEvent(stack, null, tooltip, type, context)); + public void appendTooltip(ItemStack stack, @Nullable BlockView world, List tooltip, TooltipContext context) { + appendTooltip(new ItemAppendTooltipEvent(stack, world, tooltip, context)); } /** @@ -270,6 +271,6 @@ public void appendTooltip(ItemStack stack, Item.TooltipContext context, List type, World world) { @Deprecated @Override - public void initDataTracker(DataTracker.Builder builder) { - initDataTracker(new InitDataTrackerArgs(builder)); + public void initDataTracker() { + initDataTracker(new InitDataTrackerArgs()); } public void initDataTracker(InitDataTrackerArgs args) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java index a7f71a891..14748d500 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java @@ -2,12 +2,10 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.projectile.thrown.ThrownItemEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; -import net.minecraft.text.Text; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.world.World; @@ -93,12 +91,12 @@ protected void onCollision(HitResult hitResult) { @Deprecated @Override - public void initDataTracker(DataTracker.Builder builder) { - initDataTracker(new InitDataTrackerArgs(builder)); + public void initDataTracker() { + initDataTracker(new InitDataTrackerArgs()); } public void initDataTracker(InitDataTrackerArgs args) { - super.initDataTracker(args.getBuilder()); + super.initDataTracker(); } public void readCustomDataFromNbt(ReadNbtArgs nbt) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java index 5adabbd80..96f1c1777 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java @@ -1,20 +1,7 @@ package net.pitan76.mcpitanlib.api.event.entity; -import net.minecraft.entity.data.DataTracker; -import net.minecraft.entity.data.TrackedData; - public class InitDataTrackerArgs { - public DataTracker.Builder builder; - - public InitDataTrackerArgs(DataTracker.Builder builder) { - this.builder = builder; - } - - public DataTracker.Builder getBuilder() { - return builder; - } + public InitDataTrackerArgs() { - public DataTracker.Builder add(TrackedData data, T value) { - return builder.add(data, value); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java index 29dfbb2f7..d16c00b51 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java @@ -3,6 +3,7 @@ import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.world.BlockView; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; import org.jetbrains.annotations.Nullable; @@ -12,6 +13,7 @@ public class ItemAppendTooltipEvent extends BaseEvent { public ItemStack stack; public World world; + public BlockView blockView; public List tooltip; public TooltipContext context; @@ -22,6 +24,13 @@ public ItemAppendTooltipEvent(ItemStack stack, @Nullable World world, List this.context = context; } + public ItemAppendTooltipEvent(ItemStack stack, @Nullable BlockView world, List tooltip, TooltipContext context) { + this.stack = stack; + this.blockView = world; + this.tooltip = tooltip; + this.context = context; + } + public ItemStack getStack() { return stack; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java index 963883e16..c13cf8599 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockMixin.java @@ -2,17 +2,16 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; import net.minecraft.state.StateManager; import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; import net.minecraft.world.World; -import net.minecraft.world.WorldView; import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider; import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider.Options; import net.pitan76.mcpitanlib.api.event.block.*; @@ -113,12 +112,12 @@ public class BlockMixin { } @Inject(method = "appendTooltip", at = @At("HEAD"), cancellable = true) - private void mcpitanlib$appendTooltip(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipType type, CallbackInfo ci) { + private void mcpitanlib$appendTooltip(ItemStack stack, BlockView world, List tooltip, TooltipContext context, CallbackInfo ci) { // ExtendBlockProviderを実装している場合 if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); - provider.appendTooltip(new ItemAppendTooltipEvent(stack, null, tooltip, type, context), options); + provider.appendTooltip(new ItemAppendTooltipEvent(stack, world, tooltip, context), options); if (options.cancel) ci.cancel(); } From 46ca53eab4876185fe8723ead27f48933c9e49af Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 30 Aug 2024 20:33:21 +0900 Subject: [PATCH 348/617] add APIs --- .../registry/EntityRendererRegistry.java | 13 ++ .../api/item/CreativeTabBuilder.java | 5 + .../api/registry/v2/CompatRegistryV2.java | 112 ++++++++++++++++++ .../api/util/entity/ArrowEntityUtil.java | 26 ++++ .../util/entity/SmallFireballEntityUtil.java | 29 +++++ .../api/util/entity/SnowballEntityUtil.java | 23 ++++ .../util/entity/SpectralArrowEntityUtil.java | 26 ++++ .../mcpitanlib/api/util/math/Vec3dUtil.java | 69 +++++++++++ .../mcpitanlib/api/util/math/Vec3iUtil.java | 33 ++++++ info.properties | 2 +- 10 files changed, 337 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/EntityRendererRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SmallFireballEntityUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SnowballEntityUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3dUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3iUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/EntityRendererRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/EntityRendererRegistry.java new file mode 100644 index 000000000..7fa99982f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/EntityRendererRegistry.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.api.client.registry; + +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.FlyingItemEntityRenderer; +import net.minecraft.entity.EntityType; + +import java.util.function.Supplier; + +public class EntityRendererRegistry { + public static void registerEntityRendererAsFlyingItem(Supplier> entityType) { + CompatRegistryClient.registerEntityRenderer(entityType, (ctx -> (EntityRenderer) new FlyingItemEntityRenderer<>(ctx))); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java index b934185e3..b2a8af7ab 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CreativeTabBuilder.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import java.util.HashMap; import java.util.Map; @@ -37,6 +38,10 @@ public static CreativeTabBuilder create(Identifier identifier) { return new CreativeTabBuilder(identifier); } + public static CreativeTabBuilder create(CompatIdentifier identifier) { + return create(identifier.toMinecraft()); + } + public CreativeTabBuilder setDisplayName(Text text) { this.displayName = text; return this; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java new file mode 100644 index 000000000..7650904ea --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -0,0 +1,112 @@ +package net.pitan76.mcpitanlib.api.registry.v2; + +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.EntityType; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.particle.ParticleType; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.sound.SoundEvent; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; +import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.registry.CompatRegistry; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.function.Supplier; + +public class CompatRegistryV2 { + + public final CompatRegistry cr1; + + @Deprecated + public CompatRegistryV2(CompatRegistry compatRegistry) { + this.cr1 = compatRegistry; + } + + /** + * Create a new CompatRegistry + * @param MOD_ID The mod id + * @return The new CompatRegistry + */ + public static CompatRegistry create(String MOD_ID) { + return CompatRegistry.create(MOD_ID); + } + + /** + * Register an item + * @param id The item id + * @param supplier The item supplier + * @return The registry result + */ + public RegistryResult registerItem(CompatIdentifier id, Supplier supplier) { + return cr1.registerItem(id.toMinecraft(), supplier); + } + + public Supplier registerExtendItem(CompatIdentifier id, Supplier supplier) { + RegistryResult result = registerItem(id, supplier::get); + return () -> (ExtendItem) result.get(); + } + + /** + * Register a block + * @param id The block id + * @param supplier The block supplier + * @return The registry result + */ + public RegistryResult registerBlock(CompatIdentifier id, Supplier supplier) { + return cr1.registerBlock(id.toMinecraft(), supplier); + } + + public Supplier registerExtendBlock(CompatIdentifier id, Supplier supplier) { + RegistryResult result = registerBlock(id, supplier::get); + return () -> (ExtendBlock) result.get(); + } + + public RegistryResult> registerScreenHandlerType(CompatIdentifier id, Supplier> supplier) { + return cr1.registerScreenHandlerType(id.toMinecraft(), supplier); + } + + public RegistryResult> registerBlockEntityType(CompatIdentifier id, Supplier> supplier) { + return cr1.registerBlockEntityType(id.toMinecraft(), supplier); + } + + public RegistryResult> registerEntity(CompatIdentifier id, Supplier> supplier) { + return cr1.registerEntity(id.toMinecraft(), supplier); + } + + public RegistryResult registerSoundEvent(CompatIdentifier id) { + return cr1.registerSoundEvent(id.toMinecraft()); + } + + public RegistryResult registerSoundEvent(CompatIdentifier id, float distanceToTravel) { + return cr1.registerSoundEvent(id.toMinecraft(), distanceToTravel); + } + + public RegistryResult registerFluid(CompatIdentifier id, Supplier supplier) { + return cr1.registerFluid(id.toMinecraft(), supplier); + } + + public RegistryResult> registerParticleType(CompatIdentifier id, Supplier> supplier) { + return cr1.registerParticleType(id.toMinecraft(), supplier); + } + + public RegistryResult registerItemGroup(CompatIdentifier id, Supplier supplier) { + return cr1.registerItemGroup(id.toMinecraft(), supplier); + } + + public RegistryResult registerItemGroup(CompatIdentifier id, CreativeTabBuilder builder) { + return cr1.registerItemGroup(id.toMinecraft(), builder); + } + + public RegistryResult registerItemGroup(CreativeTabBuilder builder) { + return cr1.registerItemGroup(builder.getIdentifier(), builder); + } + + public void allRegister() { + cr1.allRegister(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java new file mode 100644 index 000000000..e12d3910f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.projectile.ArrowEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; +import org.jetbrains.annotations.Nullable; + +public class ArrowEntityUtil { + public static ArrowEntity create(World world, double x, double y, double z, ItemStack stack, @Nullable ItemStack shotFrom) { + return new ArrowEntity(world, x, y, z, stack, shotFrom); + } + + public static ArrowEntity create(World world, double x, double y, double z, ItemStack stack) { + return create(world, x, y, z, stack, null); + } + + public static ArrowEntity create(World world, double x, double y, double z) { + return create(world, x, y, z, ItemStackUtil.getDefaultStack(Items.ARROW)); + } + + public static void setVelocity(ArrowEntity arrow, double x, double y, double z, float velocity, float divergence) { + arrow.setVelocity(x, y, z, velocity, divergence); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SmallFireballEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SmallFireballEntityUtil.java new file mode 100644 index 000000000..38f484a37 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SmallFireballEntityUtil.java @@ -0,0 +1,29 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.projectile.SmallFireballEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.math.Vec3dUtil; + +public class SmallFireballEntityUtil { + public static SmallFireballEntity create(World world, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { + return new SmallFireballEntity(world, x, y, z, Vec3dUtil.create(velocityX, velocityY, velocityZ)); + } + + public static SmallFireballEntity create(World world, double x, double y, double z, Vec3d velocity) { + return new SmallFireballEntity(world, x, y, z, velocity); + } + + public static void setVelocity(SmallFireballEntity entity, double x, double y, double z, float velocity, float divergence) { + entity.setVelocity(x, y, z, velocity, divergence); + } + + public static void setItem(SmallFireballEntity entity, ItemStack stack) { + entity.setItem(stack); + } + + public static ItemStack getItem(SmallFireballEntity entity) { + return entity.getStack(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SnowballEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SnowballEntityUtil.java new file mode 100644 index 000000000..b41984039 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SnowballEntityUtil.java @@ -0,0 +1,23 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.projectile.thrown.SnowballEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class SnowballEntityUtil { + public static SnowballEntity create(World world, double x, double y, double z) { + return new SnowballEntity(world, x, y, z); + } + + public static void setVelocity(SnowballEntity entity, double x, double y, double z, float velocity, float divergence) { + entity.setVelocity(x, y, z, velocity, divergence); + } + + public static void setItem(SnowballEntity entity, ItemStack stack) { + entity.setItem(stack); + } + + public static ItemStack getItem(SnowballEntity entity) { + return entity.getStack(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java new file mode 100644 index 000000000..2f83e9548 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.projectile.SpectralArrowEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; +import org.jetbrains.annotations.Nullable; + +public class SpectralArrowEntityUtil { + public static SpectralArrowEntity create(World world, double x, double y, double z, ItemStack stack, @Nullable ItemStack shotFrom) { + return new SpectralArrowEntity(world, x, y, z, stack, shotFrom); + } + + public static SpectralArrowEntity create(World world, double x, double y, double z, ItemStack stack) { + return create(world, x, y, z, stack, null); + } + + public static SpectralArrowEntity create(World world, double x, double y, double z) { + return create(world, x, y, z, ItemStackUtil.getDefaultStack(Items.ARROW)); + } + + public static void setVelocity(SpectralArrowEntity arrow, double x, double y, double z, float velocity, float divergence) { + arrow.setVelocity(x, y, z, velocity, divergence); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3dUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3dUtil.java new file mode 100644 index 000000000..c93066c33 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3dUtil.java @@ -0,0 +1,69 @@ +package net.pitan76.mcpitanlib.api.util.math; + +import net.minecraft.util.math.Vec3d; + +public class Vec3dUtil { + public static Vec3d create(double x, double y, double z) { + return new Vec3d(x, y, z); + } + + public static Vec3d add(Vec3d a, Vec3d b) { + return a.add(b); + } + + public static Vec3d subtract(Vec3d a, Vec3d b) { + return a.subtract(b); + } + + public static Vec3d multiply(Vec3d a, double b) { + return a.multiply(b); + } + + public static Vec3d divide(Vec3d a, double b) { + return a.multiply(1.0D / b); + } + + public static double dot(Vec3d a, Vec3d b) { + return a.dotProduct(b); + } + + public static Vec3d cross(Vec3d a, Vec3d b) { + return a.crossProduct(b); + } + + public static Vec3d normalize(Vec3d a) { + return a.normalize(); + } + + public static Vec3d rotateX(Vec3d a, float angle) { + return a.rotateX(angle); + } + + public static Vec3d rotateY(Vec3d a, float angle) { + return a.rotateY(angle); + } + + public static Vec3d rotateZ(Vec3d a, float angle) { + return a.rotateZ(angle); + } + + public static Vec3d add(Vec3d a, double x, double y, double z) { + return a.add(x, y, z); + } + + public static Vec3d subtract(Vec3d a, double x, double y, double z) { + return a.subtract(x, y, z); + } + + public static Vec3d multiply(Vec3d a, double x, double y, double z) { + return a.multiply(x, y, z); + } + + public static double distanceTo(Vec3d a, Vec3d b) { + return a.distanceTo(b); + } + + + + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3iUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3iUtil.java new file mode 100644 index 000000000..4def019b0 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3iUtil.java @@ -0,0 +1,33 @@ +package net.pitan76.mcpitanlib.api.util.math; + +import net.minecraft.util.math.Vec3i; + +public class Vec3iUtil { + public static Vec3i create(int x, int y, int z) { + return new Vec3i(x, y, z); + } + + public static Vec3i add(Vec3i a, Vec3i b) { + return a.add(b); + } + + public static Vec3i subtract(Vec3i a, Vec3i b) { + return a.subtract(b); + } + + public static Vec3i multiply(Vec3i a, int b) { + return a.multiply(b); + } + + public static Vec3i cross(Vec3i a, Vec3i b) { + return a.crossProduct(b); + } + + public static Vec3i add(Vec3i a, int x, int y, int z) { + return a.add(x, y, z); + } + + public static Vec3i subtract(Vec3i a, int x, int y, int z) { + return a.add(-x, -y, -z); + } +} diff --git a/info.properties b/info.properties index 75831314b..e4530718c 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.4 +mod_version=2.3.5 maven_group=net.pitan76 \ No newline at end of file From 13f4f717841e7fa91160f5d29cb09db338a032ec Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 30 Aug 2024 20:37:11 +0900 Subject: [PATCH 349/617] 1204 --- .../pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java | 2 +- .../mcpitanlib/api/util/entity/SmallFireballEntityUtil.java | 5 ++--- .../mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java index e12d3910f..e8f2d7c55 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java @@ -9,7 +9,7 @@ public class ArrowEntityUtil { public static ArrowEntity create(World world, double x, double y, double z, ItemStack stack, @Nullable ItemStack shotFrom) { - return new ArrowEntity(world, x, y, z, stack, shotFrom); + return new ArrowEntity(world, x, y, z, stack); } public static ArrowEntity create(World world, double x, double y, double z, ItemStack stack) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SmallFireballEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SmallFireballEntityUtil.java index 38f484a37..23cf8ca89 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SmallFireballEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SmallFireballEntityUtil.java @@ -4,15 +4,14 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import net.pitan76.mcpitanlib.api.util.math.Vec3dUtil; public class SmallFireballEntityUtil { public static SmallFireballEntity create(World world, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { - return new SmallFireballEntity(world, x, y, z, Vec3dUtil.create(velocityX, velocityY, velocityZ)); + return new SmallFireballEntity(world, x, y, z, velocityX, velocityY, velocityZ); } public static SmallFireballEntity create(World world, double x, double y, double z, Vec3d velocity) { - return new SmallFireballEntity(world, x, y, z, velocity); + return create(world, x, y, z, velocity.x, velocity.y, velocity.z); } public static void setVelocity(SmallFireballEntity entity, double x, double y, double z, float velocity, float divergence) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java index 2f83e9548..35ebeb876 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java @@ -9,7 +9,7 @@ public class SpectralArrowEntityUtil { public static SpectralArrowEntity create(World world, double x, double y, double z, ItemStack stack, @Nullable ItemStack shotFrom) { - return new SpectralArrowEntity(world, x, y, z, stack, shotFrom); + return new SpectralArrowEntity(world, x, y, z, stack); } public static SpectralArrowEntity create(World world, double x, double y, double z, ItemStack stack) { From e88d6f2cfd7700aa0873509a62dbd5e4bb76246b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 30 Aug 2024 20:39:21 +0900 Subject: [PATCH 350/617] 1201 --- .../pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java | 4 +++- .../mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java index e8f2d7c55..21754a8d7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ArrowEntityUtil.java @@ -9,7 +9,9 @@ public class ArrowEntityUtil { public static ArrowEntity create(World world, double x, double y, double z, ItemStack stack, @Nullable ItemStack shotFrom) { - return new ArrowEntity(world, x, y, z, stack); + ArrowEntity arrow = new ArrowEntity(world, x, y, z); + arrow.initFromStack(stack); + return arrow; } public static ArrowEntity create(World world, double x, double y, double z, ItemStack stack) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java index 35ebeb876..4218b7b8f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SpectralArrowEntityUtil.java @@ -9,7 +9,7 @@ public class SpectralArrowEntityUtil { public static SpectralArrowEntity create(World world, double x, double y, double z, ItemStack stack, @Nullable ItemStack shotFrom) { - return new SpectralArrowEntity(world, x, y, z, stack); + return new SpectralArrowEntity(world, x, y, z); } public static SpectralArrowEntity create(World world, double x, double y, double z, ItemStack stack) { From 6a119d055d683d24e4d2919e0b1fcc79e0b4ec33 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 31 Aug 2024 19:40:50 +0900 Subject: [PATCH 351/617] add APIs --- .../api/block/CompatPillarBlock.java | 52 +++++++++++++ .../api/block/CompatStairsBlock.java | 73 +++++++++++++++++++ .../api/block/ExtendPillarBlock.java | 13 ---- .../api/datafixer/ItemStackFixer.java | 52 +++++++++++++ .../api/registry/v2/CompatRegistryV2.java | 13 +++- .../mcpitanlib/core/datafixer/Pair.java | 43 +++++++++++ 6 files changed, 229 insertions(+), 17 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java delete mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendPillarBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/datafixer/ItemStackFixer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/core/datafixer/Pair.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java new file mode 100644 index 000000000..4be321670 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java @@ -0,0 +1,52 @@ +package net.pitan76.mcpitanlib.api.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.PillarBlock; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.state.StateManager; +import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; +import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; + +public class CompatPillarBlock extends PillarBlock implements ExtendBlockProvider { + public CompatPillarBlock(Settings settings) { + super(settings); + } + + public CompatPillarBlock(CompatibleBlockSettings settings) { + this(settings.build()); + } + + public void appendProperties(AppendPropertiesArgs args) { + super.appendProperties(args.builder); + } + + public BlockState getPlacementState(PlacementStateArgs args) { + return super.getPlacementState(args.ctx); + } + + @Deprecated + @Override + public void appendProperties(StateManager.Builder builder) { + appendProperties(new AppendPropertiesArgs(builder)); + } + + @Deprecated + @Override + public BlockState getPlacementState(ItemPlacementContext ctx) { + return getPlacementState(new PlacementStateArgs(ctx)); + } + + // ExtendBlockProvider + @Deprecated + @Override + public void appendProperties(AppendPropertiesArgs args, Options options) { + ExtendBlockProvider.super.appendProperties(args, options); + } + + @Deprecated + @Override + public BlockState getPlacementState(PlacementStateArgs args, Options options) { + return ExtendBlockProvider.super.getPlacementState(args, options); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java new file mode 100644 index 000000000..3a016f3e3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java @@ -0,0 +1,73 @@ +package net.pitan76.mcpitanlib.api.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; +import net.minecraft.block.StairsBlock; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.state.StateManager; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; +import net.pitan76.mcpitanlib.api.event.block.OutlineShapeEvent; +import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; + +public class CompatStairsBlock extends StairsBlock implements ExtendBlockProvider { + public CompatStairsBlock(BlockState baseBlockState, Settings settings) { + super(baseBlockState, settings); + } + + public CompatStairsBlock(BlockState baseBlockState, CompatibleBlockSettings settings) { + this(baseBlockState, settings.build()); + } + + public VoxelShape getOutlineShape(OutlineShapeEvent event) { + return super.getOutlineShape(event.state, event.world, event.pos, event.context); + } + + public void appendProperties(AppendPropertiesArgs args) { + super.appendProperties(args.builder); + } + + public BlockState getPlacementState(PlacementStateArgs args) { + return super.getPlacementState(args.ctx); + } + + @Deprecated + @Override + public void appendProperties(StateManager.Builder builder) { + appendProperties(new AppendPropertiesArgs(builder)); + } + + @Deprecated + @Override + public BlockState getPlacementState(ItemPlacementContext ctx) { + return getPlacementState(new PlacementStateArgs(ctx)); + } + + @Deprecated + @Override + protected VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return getOutlineShape(new OutlineShapeEvent(state, world, pos, context)); + } + + // ExtendBlockProvider + @Deprecated + @Override + public void appendProperties(AppendPropertiesArgs args, Options options) { + ExtendBlockProvider.super.appendProperties(args, options); + } + + @Deprecated + @Override + public BlockState getPlacementState(PlacementStateArgs args, Options options) { + return ExtendBlockProvider.super.getPlacementState(args, options); + } + + @Deprecated + @Override + public VoxelShape getOutlineShape(OutlineShapeEvent event, Options options) { + return ExtendBlockProvider.super.getOutlineShape(event, options); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendPillarBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendPillarBlock.java deleted file mode 100644 index e6449fa99..000000000 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendPillarBlock.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.pitan76.mcpitanlib.api.block; - -import net.minecraft.block.PillarBlock; - -public class ExtendPillarBlock extends PillarBlock implements ExtendBlockProvider { - public ExtendPillarBlock(Settings settings) { - super(settings); - } - - public ExtendPillarBlock(CompatibleBlockSettings settings) { - this(settings.build()); - } -} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/datafixer/ItemStackFixer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/datafixer/ItemStackFixer.java new file mode 100644 index 000000000..a3b041b01 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/datafixer/ItemStackFixer.java @@ -0,0 +1,52 @@ +package net.pitan76.mcpitanlib.api.datafixer; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class ItemStackFixer { + private static final Map> nbt2componentMapIfItemEqualMap = new HashMap<>(); + private static final Map, Map> nbt2componentMapIfitemMatchesMap = new HashMap<>(); + private static final Map nbt2componentMap = new HashMap<>(); + + public static void nbt2componentIfItemEquals(String itemId, String nbtKey, String componentId) { + Map nbt2componentMap; + if (nbt2componentMapIfItemEqualMap.containsKey(itemId)) { + nbt2componentMap = nbt2componentMapIfItemEqualMap.get(itemId); + } else { + nbt2componentMap = new HashMap<>(); + nbt2componentMapIfItemEqualMap.put(itemId, nbt2componentMap); + } + + nbt2componentMap.put(nbtKey, componentId); + } + + public static void nbt2componentIfItemMatches(Set itemId, String nbtKey, String componentId) { + Map nbt2componentMap; + if (nbt2componentMapIfitemMatchesMap.containsKey(itemId)) { + nbt2componentMap = nbt2componentMapIfitemMatchesMap.get(itemId); + } else { + nbt2componentMap = new HashMap<>(); + nbt2componentMapIfitemMatchesMap.put(itemId, nbt2componentMap); + } + + nbt2componentMap.put(nbtKey, componentId); + } + + public static void nbt2component(String nbtKey, String componentId) { + if (nbt2componentMap.containsKey(nbtKey)) return; + nbt2componentMap.put(nbtKey, componentId); + } + + public static Map> getNbt2componentMapIfItemEqualMap() { + return nbt2componentMapIfItemEqualMap; + } + + public static Map, Map> getNbt2componentMapIfitemMatchesMap() { + return nbt2componentMapIfitemMatchesMap; + } + + public static Map getNbt2componentMap() { + return nbt2componentMap; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 7650904ea..20a4996e5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -28,12 +28,17 @@ public CompatRegistryV2(CompatRegistry compatRegistry) { } /** - * Create a new CompatRegistry + * Create a new CompatRegistryV2 * @param MOD_ID The mod id - * @return The new CompatRegistry + * @return The new CompatRegistryV2 */ - public static CompatRegistry create(String MOD_ID) { - return CompatRegistry.create(MOD_ID); + public static CompatRegistryV2 create(String MOD_ID) { + CompatRegistry cr1 = CompatRegistry.create(MOD_ID); + return new CompatRegistryV2(cr1); + } + + public static CompatRegistryV2 create(CompatRegistry compatRegistry) { + return new CompatRegistryV2(compatRegistry); } /** diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/datafixer/Pair.java b/common/src/main/java/net/pitan76/mcpitanlib/core/datafixer/Pair.java new file mode 100644 index 000000000..d6d85643f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/datafixer/Pair.java @@ -0,0 +1,43 @@ +package net.pitan76.mcpitanlib.core.datafixer; + +public class Pair { + private A a; + private B b; + + public Pair(A a, B b) { + this.a = a; + this.b = b; + } + + public A getA() { + return a; + } + + public B getB() { + return b; + } + + public void setA(A a) { + this.a = a; + } + + public void setB(B b) { + this.b = b; + } + + public static Pair of(A a, B b) { + return new Pair<>(a, b); + } + + public static Pair of() { + return new Pair<>(null, null); + } + + public static Pair ofA(A a) { + return new Pair<>(a, null); + } + + public static Pair ofB(B b) { + return new Pair<>(null, b); + } +} From 5db6c1dc71f10b525a3ceeedced45fd81fb98656 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 31 Aug 2024 19:41:16 +0900 Subject: [PATCH 352/617] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index e4530718c..41119228c 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.5 +mod_version=2.3.6 maven_group=net.pitan76 \ No newline at end of file From 11b1be68c4ac92837380266bd4c544e76911c1ad Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 31 Aug 2024 19:46:04 +0900 Subject: [PATCH 353/617] 1204 --- .../api/block/CompatStairsBlock.java | 2 +- .../api/datafixer/ItemStackFixer.java | 35 +++++-------------- 2 files changed, 10 insertions(+), 27 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java index 3a016f3e3..ecd6d9a89 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java @@ -48,7 +48,7 @@ public BlockState getPlacementState(ItemPlacementContext ctx) { @Deprecated @Override - protected VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { return getOutlineShape(new OutlineShapeEvent(state, world, pos, context)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/datafixer/ItemStackFixer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/datafixer/ItemStackFixer.java index a3b041b01..6899afdb1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/datafixer/ItemStackFixer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/datafixer/ItemStackFixer.java @@ -5,48 +5,31 @@ import java.util.Set; public class ItemStackFixer { - private static final Map> nbt2componentMapIfItemEqualMap = new HashMap<>(); - private static final Map, Map> nbt2componentMapIfitemMatchesMap = new HashMap<>(); - private static final Map nbt2componentMap = new HashMap<>(); public static void nbt2componentIfItemEquals(String itemId, String nbtKey, String componentId) { - Map nbt2componentMap; - if (nbt2componentMapIfItemEqualMap.containsKey(itemId)) { - nbt2componentMap = nbt2componentMapIfItemEqualMap.get(itemId); - } else { - nbt2componentMap = new HashMap<>(); - nbt2componentMapIfItemEqualMap.put(itemId, nbt2componentMap); - } - - nbt2componentMap.put(nbtKey, componentId); + } public static void nbt2componentIfItemMatches(Set itemId, String nbtKey, String componentId) { - Map nbt2componentMap; - if (nbt2componentMapIfitemMatchesMap.containsKey(itemId)) { - nbt2componentMap = nbt2componentMapIfitemMatchesMap.get(itemId); - } else { - nbt2componentMap = new HashMap<>(); - nbt2componentMapIfitemMatchesMap.put(itemId, nbt2componentMap); - } - - nbt2componentMap.put(nbtKey, componentId); + } public static void nbt2component(String nbtKey, String componentId) { - if (nbt2componentMap.containsKey(nbtKey)) return; - nbt2componentMap.put(nbtKey, componentId); + } + @Deprecated public static Map> getNbt2componentMapIfItemEqualMap() { - return nbt2componentMapIfItemEqualMap; + return new HashMap<>(); } + @Deprecated public static Map, Map> getNbt2componentMapIfitemMatchesMap() { - return nbt2componentMapIfitemMatchesMap; + return new HashMap<>(); } + @Deprecated public static Map getNbt2componentMap() { - return nbt2componentMap; + return new HashMap<>(); } } From a110d507f2e7e2d3b36f50664429719cd99d2fc5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 1 Sep 2024 20:27:17 +0900 Subject: [PATCH 354/617] add APIs --- .../mcpitanlib/api/CommonModInitializer.java | 66 ++++++++++++++++++ .../api/client/SimpleHandledScreen.java | 29 ++++++++ .../fabric/ExtendModInitializer.java | 68 +++++++++++++++++++ info.properties | 2 +- 4 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/CommonModInitializer.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/fabric/ExtendModInitializer.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/CommonModInitializer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/CommonModInitializer.java new file mode 100644 index 000000000..148772679 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/CommonModInitializer.java @@ -0,0 +1,66 @@ +package net.pitan76.mcpitanlib.api; + +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.IdentifierUtil; +import net.pitan76.mcpitanlib.api.util.Logger; + +public abstract class CommonModInitializer { + + public final String MOD_ID; + public final String MOD_NAME; + + public final CompatRegistryV2 registry; + public final Logger logger; + + public CommonModInitializer() { + this.MOD_ID = getId(); + this.MOD_NAME = getName(); + + this.registry = CompatRegistryV2.create(MOD_ID); + this.logger = new Logger(MOD_ID); + + logger.initializeMessage(); + init(); + registry.allRegister(); + } + + public abstract void init(); + + public abstract String getId(); + + public String getName() { + return getId(); + } + + + // Utilities + public Identifier id(String path) { + return IdentifierUtil.id(MOD_ID, path); + } + + public CompatIdentifier compatId(String path) { + return CompatIdentifier.of(MOD_ID, path); + } + + public void info(String message) { + logger.info(message); + } + + public void warn(String message) { + logger.warn(message); + } + + public void error(String message) { + logger.error(message); + } + + public void debug(String message) { + logger.debug(message); + } + + public void trace(String message) { + logger.trace(message); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index fb8d9e20e..dceb63a06 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -232,4 +232,33 @@ public void close() { public void removed() { removedOverride(); } + + public Identifier getBackgroundTexture() { + return null; + } + + public void setTitleX(int x) { + this.titleX = x; + } + + public void setTitleY(int y) { + this.titleY = y; + } + + public void setTitlePos(int x, int y) { + setTitleX(x); + setTitleY(y); + } + + public void setTitleXCenter() { + setTitleX(width / 2 - textRenderer.getWidth(title) / 2); + } + + public int getTitleX() { + return titleX; + } + + public int getTitleY() { + return titleY; + } } diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/ExtendModInitializer.java b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/ExtendModInitializer.java new file mode 100644 index 000000000..e0244894c --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/fabric/ExtendModInitializer.java @@ -0,0 +1,68 @@ +package net.pitan76.mcpitanlib.fabric; + +import net.fabricmc.api.ModInitializer; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.IdentifierUtil; +import net.pitan76.mcpitanlib.api.util.Logger; + +public abstract class ExtendModInitializer implements ModInitializer { + + public String MOD_ID; + public String MOD_NAME; + + public CompatRegistryV2 registry; + public Logger logger; + + @Override + public void onInitialize() { + this.MOD_ID = getId(); + this.MOD_NAME = getName(); + + this.registry = CompatRegistryV2.create(MOD_ID); + this.logger = new Logger(MOD_ID); + + logger.initializeMessage(); + init(); + registry.allRegister(); + } + + public abstract void init(); + + public abstract String getId(); + + public String getName() { + return getId(); + } + + + // Utilities + public Identifier id(String path) { + return IdentifierUtil.id(MOD_ID, path); + } + + public CompatIdentifier compatId(String path) { + return CompatIdentifier.of(MOD_ID, path); + } + + public void info(String message) { + logger.info(message); + } + + public void warn(String message) { + logger.warn(message); + } + + public void error(String message) { + logger.error(message); + } + + public void debug(String message) { + logger.debug(message); + } + + public void trace(String message) { + logger.trace(message); + } +} diff --git a/info.properties b/info.properties index 41119228c..184dd8764 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.6 +mod_version=2.3.7 maven_group=net.pitan76 \ No newline at end of file From 6375de6dbf31ddc84314c619be5cbb4c53a580f1 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 2 Sep 2024 23:04:35 +0900 Subject: [PATCH 355/617] addAPIs --- .../mcpitanlib/api/block/ExtendBlock.java | 12 ++++ .../api/block/ExtendBlockProvider.java | 5 ++ .../api/client/CompatInventoryScreen.java | 21 ++++++ .../client/registry/CompatRegistryClient.java | 5 ++ .../event/block/CanPathfindThroughArgs.java | 65 +++++++++++++++++++ .../api/item/CompatibleItemSettings.java | 9 +++ .../mcpitanlib/api/util/EnchantmentUtil.java | 26 ++++++++ .../mcpitanlib/api/util/FluidStateUtil.java | 20 ++++++ .../mcpitanlib/api/util/InventoryUtil.java | 5 ++ .../mcpitanlib/api/util/ItemStackUtil.java | 16 +++++ .../pitan76/mcpitanlib/api/util/SlotUtil.java | 21 ++++++ .../mcpitanlib/mixin/AbstractBlockMixin.java | 13 ++++ info.properties | 2 +- .../api/util/neoforge/PlatformUtilImpl.java | 26 -------- 14 files changed, 219 insertions(+), 27 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/CompatInventoryScreen.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/CanPathfindThroughArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java delete mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/util/neoforge/PlatformUtilImpl.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index b25435bdd..92d315cfd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -5,6 +5,7 @@ import net.minecraft.block.ShapeContext; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; @@ -273,4 +274,15 @@ public void appendTooltip(ItemStack stack, @Nullable BlockView world, List public void appendTooltip(ItemAppendTooltipEvent event) { super.appendTooltip(event.stack, event.blockView, event.tooltip, event.context); } + + @Deprecated + @Override + public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { + return canPathfindThrough(new CanPathfindThroughArgs(state, world, pos, type)); + } + + @SuppressWarnings("removal") + public boolean canPathfindThrough(CanPathfindThroughArgs args) { + return super.canPathfindThrough(args.state, args.getBlockView(), args.getPos(), args.type); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java index 6ea77f2b0..19f450e2e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java @@ -150,6 +150,11 @@ default void appendTooltip(ItemAppendTooltipEvent event, Options options) { options.cancel = false; } + default Boolean canPathfindThrough(CanPathfindThroughArgs args, Options options) { + options.cancel = false; + return null; + } + public static class Options { public boolean cancel = true; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/CompatInventoryScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/CompatInventoryScreen.java new file mode 100644 index 000000000..64cef2c47 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/CompatInventoryScreen.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.client; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public abstract class CompatInventoryScreen extends SimpleInventoryScreen { + + public CompatInventoryScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + public abstract CompatIdentifier getCompatTexture(); + + @Override + public Identifier getTexture() { + return getCompatTexture().toMinecraft(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index 2b5edb94d..84c111f8b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -39,6 +39,7 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.MCPitanLib; import net.pitan76.mcpitanlib.api.client.render.EntityModelLayerContext; import java.util.List; @@ -48,6 +49,10 @@ @Environment(EnvType.CLIENT) public class CompatRegistryClient { public static > void registerScreen(ScreenHandlerType type, ScreenFactory factory) { + registerScreen(MCPitanLib.MOD_ID, type, factory); + } + + public static > void registerScreen(String modId, ScreenHandlerType type, ScreenFactory factory) { MenuRegistry.registerScreenFactory(type, factory::create); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/CanPathfindThroughArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/CanPathfindThroughArgs.java new file mode 100644 index 000000000..a4e1338f3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/CanPathfindThroughArgs.java @@ -0,0 +1,65 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.ai.pathing.NavigationType; +import net.minecraft.fluid.FluidState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.FluidStateUtil; + +public class CanPathfindThroughArgs extends BaseEvent { + public BlockState state; + private BlockView blockView; + private BlockPos pos; + public NavigationType type; + + public CanPathfindThroughArgs(BlockState state, BlockView blockView, BlockPos pos, NavigationType type) { + this.state = state; + this.blockView = blockView; + this.pos = pos; + this.type = type; + } + + public BlockState getState() { + return state; + } + + public NavigationType getType() { + return type; + } + + public FluidState getFluidState() { + return state.getFluidState(); + } + + public boolean isWaterNavigationType() { + return type == NavigationType.WATER; + } + + public boolean isAirNavigationType() { + return type == NavigationType.AIR; + } + + public boolean isLandNavigationType() { + return type == NavigationType.LAND; + } + + public boolean isWaterState() { + return FluidStateUtil.isWater(getFluidState()); + } + + public boolean isLavaState() { + return FluidStateUtil.isLava(getFluidState()); + } + + @Deprecated(forRemoval = true) + public BlockPos getPos() { + return pos; + } + + @Deprecated(forRemoval = true) + public BlockView getBlockView() { + return blockView; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index 6c7d1c6d6..adcc3bfbd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -5,6 +5,7 @@ import net.minecraft.item.ItemGroup; import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import java.util.function.Supplier; @@ -82,4 +83,12 @@ public ExtendSettings build() { } return settings; } + + public CompatibleItemSettings addGroup(ItemGroup itemGroup, CompatIdentifier identifier) { + return addGroup(itemGroup, identifier.toMinecraft()); + } + + public CompatibleItemSettings addGroup(Supplier itemGroup, CompatIdentifier identifier) { + return addGroup(itemGroup, identifier.toMinecraft()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java index 69cb70d99..6b15f76c6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; @@ -9,7 +10,9 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class EnchantmentUtil { public static CompatEnchantment getEnchantment(Identifier identifier) { @@ -42,4 +45,27 @@ public static List getEnchantments(ItemStack stack) { return enchantments; } + + public static boolean hasEnchantment(ItemStack stack) { + return stack.hasEnchantments(); + } + + public static Map getEnchantment(ItemStack stack, @Nullable World world) { + Map enchantments = new HashMap<>(); + + List enchantmentList = getEnchantments(stack); + enchantmentList.forEach((enchantment) -> { + enchantments.put(enchantment, getLevel(enchantment, stack, world)); + }); + + return enchantments; + } + + public static void setEnchantment(ItemStack stack, Map enchantments, @Nullable World world) { + Map enchantmentMap = new HashMap<>(); + + enchantments.forEach((key, value) -> enchantmentMap.put(key.getEnchantment(world), value)); + + EnchantmentHelper.set(enchantmentMap, stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java new file mode 100644 index 000000000..e56eb6057 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java @@ -0,0 +1,20 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.block.BlockState; +import net.minecraft.fluid.FluidState; +import net.minecraft.tag.FluidTags; + +public class FluidStateUtil { + public static boolean isWater(FluidState state) { + return state.isIn(FluidTags.WATER); + } + + public static boolean isLava(FluidState state) { + return state.isIn(FluidTags.LAVA); + } + + @Deprecated + public static FluidState getFluidState(BlockState state) { + return state.getFluidState(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index bf8f6fb30..964c917f0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.inventory.Inventories; +import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.collection.DefaultedList; @@ -89,4 +90,8 @@ public static void readNbt(World world, NbtCompound nbt, DefaultedList entity2.sendEquipmentBreakStatus(EquipmentSlot.MAINHAND)); } + + public static ItemStack empty() { + return ItemStack.EMPTY; + } + + public static ItemStack create(Item item) { + return new ItemStack(item); + } + + public static ItemStack create(Item item, int count) { + return new ItemStack(item, count); + } + + public static boolean isEmpty(ItemStack stack) { + return stack.isEmpty(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java index 8a2826b73..23a65c55c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java @@ -2,6 +2,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; +import net.pitan76.mcpitanlib.api.entity.Player; public class SlotUtil { public static void setStack(Slot slot, ItemStack stack) { @@ -15,4 +16,24 @@ public static ItemStack getStack(Slot slot) { public static void takeStack(Slot slot, int amount) { slot.takeStack(amount); } + + public static boolean hasStack(Slot slot) { + return slot.hasStack(); + } + + public static void markDirty(Slot slot) { + slot.markDirty(); + } + + public static boolean canInsert(Slot slot, ItemStack stack) { + return slot.canInsert(stack); + } + + public static boolean canTakeItems(Slot slot) { + return slot.canTakeItems(null); + } + + public static void onTakeItem(Slot slot, Player player, ItemStack stack) { + slot.onTakeItem(player.getEntity(), stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java index 72edd7408..c7143f5bc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java @@ -3,6 +3,7 @@ import net.minecraft.block.AbstractBlock; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; +import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContext; @@ -108,4 +109,16 @@ public class AbstractBlockMixin { cir.setReturnValue(returnValue); } } + + @Inject(method = "canPathfindThrough", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inject_canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type, CallbackInfoReturnable cir) { + if (this instanceof ExtendBlockProvider) { + ExtendBlockProvider provider = (ExtendBlockProvider) this; + Options options = new Options(); + Boolean returnValue = provider.canPathfindThrough(new CanPathfindThroughArgs(state, world, pos, type), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + } diff --git a/info.properties b/info.properties index 184dd8764..a07d156e3 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.7 +mod_version=2.3.8 maven_group=net.pitan76 \ No newline at end of file diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/util/neoforge/PlatformUtilImpl.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/util/neoforge/PlatformUtilImpl.java deleted file mode 100644 index d3836ed5e..000000000 --- a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/util/neoforge/PlatformUtilImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.pitan76.mcpitanlib.api.util.neoforge; - -import net.neoforged.api.distmarker.Dist; -import net.neoforged.fml.ModList; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.fml.loading.FMLPaths; - -import java.nio.file.Path; - -public class PlatformUtilImpl { - public static boolean isClient() { - return FMLEnvironment.dist == Dist.CLIENT; - } - - public static boolean isServer() { - return FMLEnvironment.dist == Dist.DEDICATED_SERVER; - } - - public static Path getConfigFolder() { - return FMLPaths.CONFIGDIR.get(); - } - - public static boolean isModLoaded(String id) { - return ModList.get().isLoaded(id); - } -} From 0adc11685dc89ff8a9b13ceafe345ee3d58b2d02 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 6 Sep 2024 18:48:35 +0900 Subject: [PATCH 356/617] add APIs --- .../mcpitanlib/api/block/ExtendBlock.java | 23 +++ .../mcpitanlib/api/client/SimpleScreen.java | 2 + .../pitan76/mcpitanlib/api/entity/Player.java | 47 ++++++ .../api/entity/effect/CompatStatusEffect.java | 40 +++++ .../effect/CompatStatusEffectInstance.java | 73 ++++++++++ .../api/event/block/BlockBreakStartEvent.java | 56 +++++++ .../api/event/block/EntityCollisionEvent.java | 83 +++++++++++ .../api/event/block/PickStackEvent.java | 14 ++ .../event/item/ItemAppendTooltipEvent.java | 5 + .../mcpitanlib/api/event/nbt/NbtRWArgs.java | 15 ++ .../mcpitanlib/api/event/nbt/ReadNbtArgs.java | 5 + .../api/event/nbt/WriteNbtArgs.java | 5 + .../api/item/CompatFoodComponent.java | 117 +++++++++++++++ .../api/network/v2/ClientNetworking.java | 19 +++ .../api/network/v2/ServerNetworking.java | 55 +++++++ .../network/v2/args/ClientReceiveEvent.java | 36 +++++ .../network/v2/args/ServerReceiveEvent.java | 36 +++++ .../api/registry/CompatRegistryLookup.java | 15 ++ .../api/util/BlockEntityDataUtil.java | 41 ++++++ .../mcpitanlib/api/util/BlockEntityUtil.java | 61 ++++++++ .../mcpitanlib/api/util/BlockViewUtil.java | 24 +++ .../mcpitanlib/api/util/EnchantmentUtil.java | 14 ++ .../mcpitanlib/api/util/InventoryUtil.java | 13 ++ .../mcpitanlib/api/util/ItemStackUtil.java | 9 ++ .../pitan76/mcpitanlib/api/util/Logger.java | 41 +++++- .../mcpitanlib/api/util/PropertyUtil.java | 137 ++++++++++++++++++ .../api/util/RegistryLookupUtil.java | 20 +++ .../api/util/SimpleInventoryUtil.java | 20 +++ .../mcpitanlib/api/util/SoundEventUtil.java | 8 + .../mcpitanlib/api/util/StatusEffectUtil.java | 26 ++++ .../mcpitanlib/api/util/ToolMaterialUtil.java | 15 ++ .../mcpitanlib/api/util/VoxelShapeUtil.java | 3 + .../mcpitanlib/api/util/WorldUtil.java | 4 + .../api/util/entity/ItemEntityUtil.java | 29 ++++ .../api/util/v2/CustomNameUtil.java | 49 +++++++ info.properties | 2 +- 36 files changed, 1157 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffect.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffectInstance.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakStartEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/EntityCollisionEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatFoodComponent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ClientNetworking.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ServerNetworking.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ClientReceiveEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockViewUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/RegistryLookupUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/StatusEffectUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/CustomNameUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 92d315cfd..8a6c6090f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -4,6 +4,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.player.PlayerEntity; @@ -23,6 +24,8 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.World; +import net.minecraft.world.WorldView; +import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.block.*; import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; @@ -285,4 +288,24 @@ public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos po public boolean canPathfindThrough(CanPathfindThroughArgs args) { return super.canPathfindThrough(args.state, args.getBlockView(), args.getPos(), args.type); } + + @Deprecated + @Override + public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { + onEntityCollision(new EntityCollisionEvent(state, world, pos, entity)); + } + + public void onEntityCollision(EntityCollisionEvent e) { + super.onEntityCollision(e.state, e.world, e.pos, e.entity); + } + + @Deprecated + @Override + public void onBlockBreakStart(BlockState state, World world, BlockPos pos, PlayerEntity player) { + onBlockBreakStart(new BlockBreakStartEvent(state, world, pos, new Player(player))); + } + + public void onBlockBreakStart(BlockBreakStartEvent e) { + super.onBlockBreakStart(e.state, e.world, e.pos, e.player.getPlayerEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index e37e7d7b5..8dbb25716 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -14,6 +14,8 @@ import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.KeyEventArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; public abstract class SimpleScreen extends Screen { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 9206f093c..cd897e020 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -19,15 +19,19 @@ import net.minecraft.stat.StatType; import net.minecraft.text.Text; import net.minecraft.util.Hand; +import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.gui.ExtendedNamedScreenHandlerFactory; +import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; import net.pitan76.mcpitanlib.core.player.ItemCooldown; +import java.util.Optional; import java.util.OptionalInt; import java.util.UUID; import java.util.function.Consumer; @@ -172,6 +176,14 @@ public boolean isCreative() { return getAbilities().creativeMode; } + public boolean isFlying() { + return getAbilities().flying; + } + + public boolean isInvulnerable() { + return getAbilities().invulnerable; + } + public World getWorld() { return getEntity().getWorld(); } @@ -277,6 +289,14 @@ public void incrementStat(StatType type, T object) { getEntity().incrementStat(type.getOrCreateStat(object)); } + public void incrementStat(Identifier id) { + getEntity().incrementStat(id); + } + + public void incrementStat(CompatIdentifier id) { + getEntity().incrementStat(id.toMinecraft()); + } + public void teleport(double x, double y, double z) { getEntity().teleport(x, y, z); } @@ -292,4 +312,31 @@ public ItemStack getOffHandStack() { public Direction getHorizontalFacing() { return getEntity().getHorizontalFacing(); } + + public void eatFood(World world, ItemStack stack, CompatFoodComponent foodComponentBuilder) { + getEntity().eatFood(world, stack); + } + + public double getX() { + return getEntity().getX(); + } + + public double getY() { + return getEntity().getY(); + } + + public double getZ() { + return getEntity().getZ(); + } + + public boolean isServerPlayer() { + return getEntity() instanceof ServerPlayerEntity; + } + + public Optional getServerPlayer() { + if (isServerPlayer()) + return Optional.of((ServerPlayerEntity) getEntity()); + + return Optional.empty(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffect.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffect.java new file mode 100644 index 000000000..55fcfa451 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffect.java @@ -0,0 +1,40 @@ +package net.pitan76.mcpitanlib.api.entity.effect; + +import net.minecraft.entity.effect.StatusEffect; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.StatusEffectUtil; +import org.jetbrains.annotations.Nullable; + +public class CompatStatusEffect { + private final StatusEffect statusEffect; + + @Deprecated + public CompatStatusEffect(StatusEffect statusEffect) { + this.statusEffect = statusEffect; + } + + public CompatStatusEffect of(Identifier identifier) { + return StatusEffectUtil.getStatusEffect(identifier); + } + + public Identifier getId() { + return Registry.STATUS_EFFECT.getId(statusEffect); + } + + public String toString() { + return getId().toString(); + } + + public boolean equals(Object obj) { + if (obj instanceof CompatStatusEffect) { + return ((CompatStatusEffect) obj).getId().equals(getId()); + } + return false; + } + + public StatusEffect getStatusEffect(@Nullable World world) { + return statusEffect; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffectInstance.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffectInstance.java new file mode 100644 index 000000000..c96a95554 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffectInstance.java @@ -0,0 +1,73 @@ +package net.pitan76.mcpitanlib.api.entity.effect; + +import net.minecraft.entity.effect.StatusEffect; +import net.minecraft.entity.effect.StatusEffectInstance; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +public class CompatStatusEffectInstance { + private final StatusEffectInstance instance; + + @Deprecated + public CompatStatusEffectInstance(StatusEffectInstance instance) { + this.instance = instance; + } + + public StatusEffectInstance getInstance() { + return instance; + } + + public Optional getCompatStatusEffect() { + return Optional.of(new CompatStatusEffect(instance.getEffectType())); + } + + public CompatStatusEffectInstance(CompatStatusEffect effect) { + this(effect, 0, 0); + } + + public CompatStatusEffectInstance(CompatStatusEffect effect, int duration) { + this(effect, duration, 0); + } + + public CompatStatusEffectInstance(CompatStatusEffect effect, int duration, int amplifier) { + this(effect, duration, amplifier, false, true); + } + + public CompatStatusEffectInstance(CompatStatusEffect effect, int duration, int amplifier, boolean ambient, boolean visible) { + this(effect, duration, amplifier, ambient, visible, visible); + } + + public CompatStatusEffectInstance(CompatStatusEffect effect, int duration, int amplifier, boolean ambient, boolean showParticles, boolean showIcon) { + this(effect, duration, amplifier, ambient, showParticles, showIcon, null); + } + + public CompatStatusEffectInstance(CompatStatusEffect effect, int duration, int amplifier, boolean ambient, boolean showParticles, boolean showIcon, @Nullable StatusEffectInstance hiddenEffect) { + StatusEffect statusEffect = effect.getStatusEffect(null); + this.instance = new StatusEffectInstance(statusEffect, duration, amplifier, ambient, showParticles, showIcon, hiddenEffect, statusEffect.getFactorCalculationDataSupplier()); + } + + public int getDuration() { + return instance.getDuration(); + } + + public int getAmplifier() { + return instance.getAmplifier(); + } + + public boolean isAmbient() { + return instance.isAmbient(); + } + + public boolean showParticles() { + return instance.shouldShowParticles(); + } + + public boolean showIcon() { + return instance.shouldShowIcon(); + } + + public boolean isInfinite() { + return instance.isPermanent(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakStartEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakStartEvent.java new file mode 100644 index 000000000..a98b2db09 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakStartEvent.java @@ -0,0 +1,56 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; + +public class BlockBreakStartEvent extends BaseEvent { + + public BlockState state; + public World world; + public BlockPos pos; + public Player player; + + public BlockBreakStartEvent(BlockState state, World world, BlockPos pos, Player player) { + this.state = state; + this.world = world; + this.pos = pos; + this.player = player; + } + + public boolean isClient() { + return WorldUtil.isClient(world); + } + + public BlockState getState() { + return state; + } + + public World getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public Player getPlayer() { + return player; + } + + public BlockPos getPlayerPos() { + return player.getBlockPos(); + } + + public ItemStack getPlayerMainHandStack() { + return player.getMainHandStack(); + } + + public ItemStack getPlayerOffHandStack() { + return player.getOffHandStack(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/EntityCollisionEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/EntityCollisionEvent.java new file mode 100644 index 000000000..298685fa1 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/EntityCollisionEvent.java @@ -0,0 +1,83 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.SoundEventUtil; +import net.pitan76.mcpitanlib.api.util.WorldUtil; + +import java.util.Optional; + +public class EntityCollisionEvent extends BaseEvent { + + public BlockState state; + public World world; + public BlockPos pos; + public Entity entity; + + public EntityCollisionEvent(BlockState state, World world, BlockPos pos, Entity entity) { + this.state = state; + this.world = world; + this.pos = pos; + this.entity = entity; + } + + public boolean isClient() { + return WorldUtil.isClient(world); + } + + public BlockPos getEntityPos() { + return entity.getBlockPos(); + } + + public BlockPos getBlockPos() { + return pos; + } + + public BlockState getState() { + return state; + } + + public Entity getEntity() { + return entity; + } + + public World getWorld() { + return world; + } + + public void playSound(SoundEvent event, SoundCategory category, float volume, float pitch) { + WorldUtil.playSound(world, null, entity.getBlockPos(), event, category, volume, pitch); + } + + public void playSound(SoundEvent event, float volume, float pitch) { + playSound(event, SoundCategory.BLOCKS, volume, pitch); + } + + public void playSound(SoundEvent event) { + playSound(event, 1f, 1f); + } + + public void playSound(SoundEvent event, SoundCategory category) { + playSound(event, category, 1f, 1f); + } + + public void playSound(CompatIdentifier id, SoundCategory category, float volume, float pitch) { + playSound(SoundEventUtil.getSoundEvent(id), category, volume, pitch); + } + + public boolean hasPlayerEntity() { + return entity instanceof PlayerEntity; + } + + public Optional getPlayerEntity() { + if (!hasPlayerEntity()) return Optional.empty(); + return Optional.of((PlayerEntity) entity); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java index 8be82972f..1eb8b355c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java @@ -61,4 +61,18 @@ public BlockEntity getBlockEntity() { return worldView.getBlockEntity(pos); return null; } + + public boolean isClient() { + if (blockView != null) + return getBlockEntity().getWorld().isClient(); + if (worldView != null) + return worldView.isClient(); + + try { + net.minecraft.client.MinecraftClient.getInstance(); + return true; + } catch (Error e) { + return false; + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java index d16c00b51..dd45ff1d4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java @@ -6,6 +6,7 @@ import net.minecraft.world.BlockView; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -66,4 +67,8 @@ public boolean isCreative() { public boolean isAdvanced() { return context.isAdvanced(); } + + public CompatRegistryLookup getRegistryLookup() { + return new CompatRegistryLookup(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java index 7f181d105..fa66d8d53 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java @@ -1,9 +1,16 @@ package net.pitan76.mcpitanlib.api.event.nbt; import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; public class NbtRWArgs { public NbtCompound nbt; + public CompatRegistryLookup registryLookup; + + public NbtRWArgs(NbtCompound nbt, CompatRegistryLookup registryLookup) { + this.nbt = nbt; + this.registryLookup = registryLookup; + } public NbtRWArgs(NbtCompound nbt) { this.nbt = nbt; @@ -12,4 +19,12 @@ public NbtRWArgs(NbtCompound nbt) { public NbtCompound getNbt() { return nbt; } + + public CompatRegistryLookup getRegistryLookup() { + return registryLookup; + } + + public boolean hasRegistryLookup() { + return registryLookup != null; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java index 0fa846f0f..22259251c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java @@ -1,10 +1,15 @@ package net.pitan76.mcpitanlib.api.event.nbt; import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; public class ReadNbtArgs extends NbtRWArgs { public ReadNbtArgs(NbtCompound nbt) { super(nbt); } + + public ReadNbtArgs(NbtCompound nbt, CompatRegistryLookup registryLookup) { + super(nbt, registryLookup); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java index 295063b02..8295cc754 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java @@ -1,9 +1,14 @@ package net.pitan76.mcpitanlib.api.event.nbt; import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; public class WriteNbtArgs extends NbtRWArgs { + public WriteNbtArgs(NbtCompound nbt, CompatRegistryLookup registryLookup) { + super(nbt, registryLookup); + } + public WriteNbtArgs(NbtCompound nbt) { super(nbt); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatFoodComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatFoodComponent.java new file mode 100644 index 000000000..746959eae --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatFoodComponent.java @@ -0,0 +1,117 @@ +package net.pitan76.mcpitanlib.api.item; + +import com.mojang.datafixers.util.Pair; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.item.FoodComponent; +import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffectInstance; + +import java.util.ArrayList; +import java.util.List; + +public class CompatFoodComponent { + private int hunger; + private float saturation; + private boolean meat; + private boolean alwaysEdible; + private boolean snack; + private final List> statusEffects = new ArrayList<>(); + + private FoodComponent latestComponent = null; + + public static CompatFoodComponent create() { + return new CompatFoodComponent(); + } + + public CompatFoodComponent setHunger(int hunger) { + this.hunger = hunger; + return this; + } + + public CompatFoodComponent setSaturation(float saturation) { + this.saturation = saturation; + return this; + } + + public CompatFoodComponent setAlwaysEdible() { + this.alwaysEdible = true; + return this; + } + + public CompatFoodComponent setSnack() { + this.snack = true; + return this; + } + + public CompatFoodComponent setMeat() { + this.meat = true; + return this; + } + + @Deprecated + public CompatFoodComponent addStatusEffect(StatusEffectInstance effect, float chance) { + statusEffects.add(Pair.of(effect, chance)); + return this; + } + + public CompatFoodComponent addStatusEffect(CompatStatusEffectInstance instance, float chance) { + return addStatusEffect(instance.getInstance(), chance); + } + + public FoodComponent.Builder getVanillaBuilder() { + FoodComponent.Builder builder = new FoodComponent.Builder(); + builder.hunger(hunger).saturationModifier(saturation); + if (alwaysEdible) builder.alwaysEdible(); + if (snack) builder.snack(); + if (meat) builder.meat(); + for (Pair pair : statusEffects) { + builder.statusEffect(pair.getFirst(), pair.getSecond()); + } + return builder; + } + + public FoodComponent build() { + return vanillaBuild(); + } + + public FoodComponent vanillaBuild() { + if (latestComponent != null) return latestComponent; + + latestComponent = getVanillaBuilder().build(); + return latestComponent; + } + + // ---- + + public int getHunger() { + return hunger; + } + + public float getSaturation() { + return saturation; + } + + public boolean isMeat() { + return meat; + } + + public boolean isSnack() { + return snack; + } + + public boolean isAlwaysEdible() { + return alwaysEdible; + } + + @Deprecated + public List> getStatusEffects() { + return statusEffects; + } + + public List> getCompatStatusEffects() { + List> compatStatusEffects = new ArrayList<>(); + for (Pair pair : statusEffects) { + compatStatusEffects.add(Pair.of(new CompatStatusEffectInstance(pair.getFirst()), pair.getSecond())); + } + return compatStatusEffects; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ClientNetworking.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ClientNetworking.java new file mode 100644 index 000000000..92c660eaf --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ClientNetworking.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.network.v2; + +import net.minecraft.network.PacketByteBuf; +import net.pitan76.mcpitanlib.api.network.v2.args.ClientReceiveEvent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.function.Consumer; + +public class ClientNetworking { + public static void send(CompatIdentifier id, PacketByteBuf buf) { + net.pitan76.mcpitanlib.api.network.ClientNetworking.send(id.toMinecraft(), buf); + } + + public static void registerReceiver(CompatIdentifier id, Consumer consumer) { + net.pitan76.mcpitanlib.api.network.ClientNetworking.registerReceiver(id.toMinecraft(), (client, player, buf) -> { + consumer.accept(new ClientReceiveEvent(client, player, buf)); + }); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ServerNetworking.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ServerNetworking.java new file mode 100644 index 000000000..9d855528c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ServerNetworking.java @@ -0,0 +1,55 @@ +package net.pitan76.mcpitanlib.api.network.v2; + +import net.minecraft.network.PacketByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.network.v2.args.ServerReceiveEvent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.function.Consumer; + +public class ServerNetworking { + public static void send(ServerPlayerEntity serverPlayerEntity, CompatIdentifier id, PacketByteBuf buf) { + net.pitan76.mcpitanlib.api.network.ServerNetworking.send(serverPlayerEntity, id.toMinecraft(), buf); + } + + public static void sendByServerPlayerEntity(Iterable players, CompatIdentifier id, PacketByteBuf buf) { + net.pitan76.mcpitanlib.api.network.ServerNetworking.send(players, id.toMinecraft(), buf); + } + + public static void send(Player player, CompatIdentifier id, PacketByteBuf buf) { + Optional optional = player.getServerPlayer(); + if (optional.isEmpty()) return; + + send(optional.get(), id, buf); + } + + public static void send(Iterable players, CompatIdentifier id, PacketByteBuf buf) { + List list = new ArrayList<>(); + for (Player player : players) { + Optional optional = player.getServerPlayer(); + optional.ifPresent(list::add); + } + + sendByServerPlayerEntity(list, id, buf); + } + + public static void sendAll(MinecraftServer server, CompatIdentifier id, PacketByteBuf buf) { + net.pitan76.mcpitanlib.api.network.ServerNetworking.sendAll(server, id.toMinecraft(), buf); + } + + public static void sendAll(World world, CompatIdentifier id, PacketByteBuf buf) { + sendAll(world.getServer(), id, buf); + } + + public static void registerReceiver(CompatIdentifier id, Consumer consumer) { + net.pitan76.mcpitanlib.api.network.ServerNetworking.registerReceiver(id.toMinecraft(), (server, player, buf) -> { + consumer.accept(new ServerReceiveEvent(server, player, buf)); + }); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ClientReceiveEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ClientReceiveEvent.java new file mode 100644 index 000000000..a2de5923e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ClientReceiveEvent.java @@ -0,0 +1,36 @@ +package net.pitan76.mcpitanlib.api.network.v2.args; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.network.PacketByteBuf; +import net.pitan76.mcpitanlib.api.entity.Player; + +public class ClientReceiveEvent { + public MinecraftClient client; + public ClientPlayerEntity clientPlayer; + public Player player; + public PacketByteBuf buf; + + public ClientReceiveEvent(MinecraftClient client, ClientPlayerEntity player, PacketByteBuf buf) { + this.client = client; + this.clientPlayer = player; + this.player = new Player(player); + this.buf = buf; + } + + public ClientPlayerEntity getClientPlayer() { + return clientPlayer; + } + + public Player getPlayer() { + return player; + } + + public MinecraftClient getClient() { + return client; + } + + public PacketByteBuf getBuf() { + return buf; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java new file mode 100644 index 000000000..b1afedc0d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java @@ -0,0 +1,36 @@ +package net.pitan76.mcpitanlib.api.network.v2.args; + +import net.minecraft.network.PacketByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ServerPlayerEntity; +import net.pitan76.mcpitanlib.api.entity.Player; + +public class ServerReceiveEvent { + public MinecraftServer server; + public ServerPlayerEntity serverPlayer; + public Player player; + public PacketByteBuf buf; + + public ServerReceiveEvent(MinecraftServer server, ServerPlayerEntity player, PacketByteBuf buf) { + this.server = server; + this.serverPlayer = player; + this.player = new Player(player); + this.buf = buf; + } + + public ServerPlayerEntity getServerPlayer() { + return serverPlayer; + } + + public Player getPlayer() { + return player; + } + + public MinecraftServer getServer() { + return server; + } + + public PacketByteBuf getBuf() { + return buf; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java new file mode 100644 index 000000000..964575d3a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.registry; + +import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; + +public class CompatRegistryLookup { + + public CompatRegistryLookup() { + + } + + public NbtRWArgs getNbtRWArgs(NbtCompound nbt) { + return new NbtRWArgs(nbt); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java new file mode 100644 index 000000000..17e1d9961 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java @@ -0,0 +1,41 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; + +public class BlockEntityDataUtil { + public static NbtCompound getBlockEntityNbt(ItemStack stack) { + if (!hasBlockEntityNbt(stack)) return NbtUtil.create(); + + return stack.getSubNbt("BlockEntityTag"); + } + + public static void setBlockEntityNbt(ItemStack stack, NbtCompound nbt) { + stack.setSubNbt("BlockEntityTag", nbt); + } + + public static boolean hasBlockEntityNbt(ItemStack stack) { + if (!stack.hasNbt()) return false; + if (!NbtUtil.has(stack.getNbt(), "BlockEntityTag")) return false; + + return true; + } + + public static void readCompatBlockEntityNbtFromStack(ItemStack stack, CompatBlockEntity blockEntity) { + NbtCompound nbt = getBlockEntityNbt(stack); + blockEntity.readNbt(new ReadNbtArgs(nbt)); + } + + public static void writeCompatBlockEntityNbtToStack(ItemStack stack, CompatBlockEntity blockEntity) { + NbtCompound nbt = getBlockEntityNbt(stack); + blockEntity.writeNbt(new WriteNbtArgs(nbt)); + setBlockEntityNbt(stack, nbt); + } + + public static void removeBlockEntityNbt(ItemStack stack) { + stack.removeSubNbt("BlockEntityTag"); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java new file mode 100644 index 000000000..ecdba9a58 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -0,0 +1,61 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; + +public class BlockEntityUtil { + + public static BlockEntity getBlockEntity(World world, BlockPos pos) { + return WorldUtil.getBlockEntity(world, pos); + } + + public static NbtCompound getBlockEntityNbt(@Nullable World world, BlockEntity blockEntity) { + if (world == null) + world = getWorld(blockEntity); + if (world == null) + return NbtUtil.create(); + + return blockEntity.createNbt(); + } + + public static NbtCompound getBlockEntityNbt(BlockEntity blockEntity) { + return getBlockEntityNbt(null, blockEntity); + } + + public static World getWorld(BlockEntity blockEntity) { + return blockEntity.getWorld(); + } + + public static boolean hasWorld(BlockEntity blockEntity) { + return blockEntity.hasWorld(); + } + + public static BlockPos getPos(BlockEntity blockEntity) { + return blockEntity.getPos(); + } + + public static BlockState getCachedState(BlockEntity blockEntity) { + return blockEntity.getCachedState(); + } + + public static BlockState getBlockState(BlockEntity blockEntity) { + return getWorld(blockEntity).getBlockState(getPos(blockEntity)); + } + + public static Block getBlock(BlockEntity blockEntity) { + return getBlockState(blockEntity).getBlock(); + } + + public static void markRemoved(BlockEntity blockEntity) { + blockEntity.markRemoved(); + } + + public static void markDirty(BlockEntity blockEntity) { + blockEntity.markDirty(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockViewUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockViewUtil.java new file mode 100644 index 000000000..a95953baf --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockViewUtil.java @@ -0,0 +1,24 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; + +public class BlockViewUtil { + public static BlockState getBlockState(BlockView blockView, BlockPos pos) { + return blockView.getBlockState(pos); + } + + public static BlockEntity getBlockEntity(BlockView blockView, BlockPos pos) { + return blockView.getBlockEntity(pos); + } + + public static boolean hasBlockEntity(BlockView blockView, BlockPos pos) { + return getBlockEntity(blockView, pos) != null; + } + + public static boolean isAir(BlockView blockView, BlockPos pos) { + return getBlockState(blockView, pos).isAir(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java index 6b15f76c6..fdda185ce 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EnchantmentUtil.java @@ -3,6 +3,7 @@ import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; @@ -68,4 +69,17 @@ public static void setEnchantment(ItemStack stack, Map inventory) { @@ -65,6 +66,18 @@ public static void readNbt(NbtRWArgs args, DefaultedList stacks) { Inventories.readNbt(args.getNbt(), stacks); } + public static void readNbt(CompatRegistryLookup registryLookup, NbtCompound nbt, DefaultedList stacks) { + Inventories.readNbt(nbt, stacks); + } + + public static NbtCompound writeNbt(CompatRegistryLookup registryLookup, NbtCompound nbt, DefaultedList stacks, boolean setIfEmpty) { + return Inventories.writeNbt(nbt, stacks, setIfEmpty); + } + + public static NbtCompound writeNbt(CompatRegistryLookup registryLookup, NbtCompound nbt, DefaultedList stacks) { + return writeNbt(registryLookup, nbt, stacks, true); + } + // deprecated /** * @deprecated Use {@link #writeNbt(NbtRWArgs, DefaultedList)} instead diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index aebda32c3..08601dc39 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -3,6 +3,7 @@ import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; import net.minecraft.item.Item; +import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.network.ServerPlayerEntity; @@ -132,6 +133,14 @@ public static ItemStack create(Item item, int count) { return new ItemStack(item, count); } + public static ItemStack create(ItemConvertible item) { + return new ItemStack(item); + } + + public static ItemStack create(ItemConvertible item, int count) { + return new ItemStack(item, count); + } + public static boolean isEmpty(ItemStack stack) { return stack.isEmpty(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java index 4c3c8df7b..1309ddebd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java @@ -1,10 +1,28 @@ package net.pitan76.mcpitanlib.api.util; public class Logger { + public String name = ""; + + public boolean usingPrefix = true; + private final org.apache.logging.log4j.Logger logger; - public Logger(String modid) { - this.logger = LoggerUtil.getLogger(modid); + public Logger(String name) { + this.name = name; + this.logger = LoggerUtil.getLogger(name); + } + + public Logger() { + this.logger = LoggerUtil.getLogger(); + } + + public Logger(Class clazz) { + this.logger = LoggerUtil.getLogger(clazz); + } + + public Logger(String name, boolean usePrefix) { + this(name); + usePrefix(usePrefix); } public org.apache.logging.log4j.Logger getLogger() { @@ -38,10 +56,25 @@ public void error(Exception e) { } public void initializeMessage() { - info("Initializing..."); + info(prefix() + "Initializing..."); } public void initializedMessage() { - info("Initialized"); + info(prefix() + "Initialized"); + } + + public String prefix() { + if (name.isEmpty() || !isUsingPrefix()) + return ""; + + return "[" + name + "] "; + } + + public void usePrefix(boolean use) { + usingPrefix = use; + } + + public boolean isUsingPrefix() { + return usingPrefix; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java new file mode 100644 index 000000000..bb1d865f2 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java @@ -0,0 +1,137 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.block.BlockState; +import net.minecraft.state.property.*; +import net.minecraft.util.StringIdentifiable; +import net.minecraft.util.math.Direction; +import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; + +public class PropertyUtil { + public static BooleanProperty createBooleanProperty(String name) { + return BooleanProperty.of(name); + } + + public static DirectionProperty createDirectionProperty(String name) { + return DirectionProperty.of(name); + } + + public static IntProperty createIntProperty(String name, int min, int max) { + return IntProperty.of(name, min, max); + } + + public static & StringIdentifiable> EnumProperty createEnumProperty(String name, Class type) { + return EnumProperty.of(name, type); + } + + public static BlockState with(BlockState state, BooleanProperty property, boolean value) { + return state.with(property, value); + } + + public static BlockState with(BlockState state, IntProperty property, int value) { + return state.with(property, value); + } + + public static BlockState with(BlockState state, DirectionProperty property, Direction value) { + return state.with(property, value); + } + + public static boolean get(BlockState state, BooleanProperty property) { + return state.get(property); + } + + public static int get(BlockState state, IntProperty property) { + return state.get(property); + } + + public static Direction get(BlockState state, DirectionProperty property) { + return state.get(property); + } + + public static Direction getFacing(BlockState state) { + return state.get(facing()); + } + + public static Direction getHorizontalFacing(BlockState state) { + return state.get(horizontalFacing()); + } + + public static int getPower(BlockState state) { + return state.get(power()); + } + + public static boolean isPowered(BlockState state) { + return state.get(powered()); + } + + public static void append(AppendPropertiesArgs args, Property... properties) { + args.addProperty(properties); + } + + public static void appendFacing(AppendPropertiesArgs args) { + args.addProperty(facing()); + } + + public static void appendHorizontalFacing(AppendPropertiesArgs args) { + args.addProperty(horizontalFacing()); + } + + public static void appendPower(AppendPropertiesArgs args) { + args.addProperty(power()); + } + + public static void appendPowered(AppendPropertiesArgs args) { + args.addProperty(powered()); + } + + public static IntProperty power() { + return Properties.POWER; + } + + public static BooleanProperty powered() { + return Properties.POWERED; + } + + public static DirectionProperty facing() { + return Properties.FACING; + } + + public static DirectionProperty horizontalFacing() { + return Properties.HORIZONTAL_FACING; + } + + public static BooleanProperty lit() { + return Properties.LIT; + } + + public static BooleanProperty waterlogged() { + return Properties.WATERLOGGED; + } + + public static BooleanProperty attached() { + return Properties.ATTACHED; + } + + public static BooleanProperty hanging() { + return Properties.HANGING; + } + + public static BooleanProperty bottom() { + return Properties.BOTTOM; + } + + public static BooleanProperty conditional() { + return Properties.CONDITIONAL; + } + + public static BooleanProperty inWall() { + return Properties.IN_WALL; + } + + public static BooleanProperty open() { + return Properties.OPEN; + } + + public static BooleanProperty occupied() { + return Properties.OCCUPIED; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RegistryLookupUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RegistryLookupUtil.java new file mode 100644 index 000000000..8ab2c899f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RegistryLookupUtil.java @@ -0,0 +1,20 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.block.entity.BlockEntity; +import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; + +public class RegistryLookupUtil { + public static CompatRegistryLookup getRegistryLookup(CompatBlockEntity entity) { + return new CompatRegistryLookup(); + } + + public static CompatRegistryLookup getRegistryLookup(BlockEntity entity) { + return new CompatRegistryLookup(); + } + + public static CompatRegistryLookup getRegistryLookup(NbtRWArgs args) { + return args.getRegistryLookup(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java index 11441b6b1..1d6cbc6f7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java @@ -12,4 +12,24 @@ public static DefaultedList getHeldStacks(SimpleInventory inventory) } return stacks; } + + public static SimpleInventory create(int size) { + return InventoryUtil.createSimpleInventory(size); + } + + public static ItemStack getStack(SimpleInventory inventory, int slot) { + return inventory.getStack(slot); + } + + public static void setStack(SimpleInventory inventory, int slot, ItemStack stack) { + inventory.setStack(slot, stack); + } + + public static void clear(SimpleInventory inventory) { + inventory.clear(); + } + + public static int size(SimpleInventory inventory) { + return inventory.size(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java index e475ea725..4a1627fe4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SoundEventUtil.java @@ -17,6 +17,14 @@ public static SoundEvent getSoundEvent(Identifier id) { return new SoundEvent(id); } + public static CompatIdentifier getCompatId(SoundEvent soundEvent) { + return CompatIdentifier.fromMinecraft(getId(soundEvent)); + } + + public static SoundEvent getSoundEvent(CompatIdentifier id) { + return getSoundEvent(id.toMinecraft()); + } + public static List getAllSoundEvents() { return Registry.SOUND_EVENT.stream().collect(Collectors.toList()); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/StatusEffectUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StatusEffectUtil.java new file mode 100644 index 000000000..492908e46 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StatusEffectUtil.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.entity.effect.StatusEffect; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffect; + +public class StatusEffectUtil { + public static CompatStatusEffect getStatusEffect(Identifier identifier) { + StatusEffect statusEffect = Registry.STATUS_EFFECT.get(identifier); + return new CompatStatusEffect(statusEffect); + } + + public static CompatStatusEffect getStatusEffect(CompatIdentifier identifier) { + return getStatusEffect(identifier.toMinecraft()); + } + + public static Identifier getId(CompatStatusEffect statusEffect) { + return statusEffect.getId(); + } + + public static CompatIdentifier getCompatId(CompatStatusEffect statusEffect) { + return CompatIdentifier.fromMinecraft(statusEffect.getId()); + } + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ToolMaterialUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ToolMaterialUtil.java index 1a61aa75d..87571de96 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ToolMaterialUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ToolMaterialUtil.java @@ -4,7 +4,22 @@ import net.pitan76.mcpitanlib.api.item.tool.CompatibleToolMaterial; public class ToolMaterialUtil { + // ミスでstatic化し忘れていたが、互換性のため保持しておく public CompatibleToolMaterial create(int miningLevel, int durability, float miningSpeed, float attackDamage, int enchantability, Ingredient repairIngredient) { + return create2(miningLevel, durability, miningSpeed, attackDamage, enchantability, repairIngredient); + } + + /** + * Create CompatibleToolMaterial + * @param miningLevel Mining Level + * @param durability Durability + * @param miningSpeed Mining Speed + * @param attackDamage Attack Damage + * @param enchantability Enchantability + * @param repairIngredient Repair Ingredient + * @return CompatibleToolMaterial + */ + public static CompatibleToolMaterial create2(int miningLevel, int durability, float miningSpeed, float attackDamage, int enchantability, Ingredient repairIngredient) { return new CompatibleToolMaterial() { @Override public int getCompatMiningLevel() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java index 8c2343406..837bb8b7f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java @@ -32,4 +32,7 @@ public static VoxelShape fullCube() { return VoxelShapes.fullCube(); } + public static VoxelShape blockCuboid(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { + return VoxelShapes.cuboid(minX / 16.0, minY / 16.0, minZ / 16.0, maxX / 16.0, maxY / 16.0, maxZ / 16.0); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index ef8de434b..2182fc8f8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -219,4 +219,8 @@ public static boolean removeBlock(World world, BlockPos pos, boolean move) { public static void addParticle(World world, ParticleEffect parameters, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { world.addParticle(parameters, x, y, z, velocityX, velocityY, velocityZ); } + + public static boolean canSetBlock(World world, BlockPos pos) { + return world.canSetBlock(pos); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java new file mode 100644 index 000000000..2454910ab --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java @@ -0,0 +1,29 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemEntityUtil { + public static ItemEntity create(World world, double x, double y, double z, ItemStack stack) { + return new ItemEntity(world, x, y, z, stack); + } + + public static ItemEntity create(World world, double x, double y, double z, ItemStack stack, double velocityX, double velocityY, double velocityZ) { + ItemEntity itemEntity = create(world, x, y, z, stack); + setVelocity(itemEntity, velocityX, velocityY, velocityZ); + return itemEntity; + } + + public static void setVelocity(ItemEntity itemEntity, double velocityX, double velocityY, double velocityZ) { + itemEntity.setVelocity(velocityX, velocityY, velocityZ); + } + + public static void setPickupDelay(ItemEntity itemEntity, int pickupDelay) { + itemEntity.setPickupDelay(pickupDelay); + } + + public static void setToDefaultPickupDelay(ItemEntity itemEntity) { + itemEntity.setToDefaultPickupDelay(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/CustomNameUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/CustomNameUtil.java new file mode 100644 index 000000000..c0e0ebbdc --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/CustomNameUtil.java @@ -0,0 +1,49 @@ +package net.pitan76.mcpitanlib.api.util.v2; + +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.text.TextComponent; +import net.pitan76.mcpitanlib.api.util.TextUtil; + +public class CustomNameUtil { + + public static void setCustomName(ItemStack stack, Text name) { + stack.setCustomName(name); + } + + public static void setCustomName(ItemStack stack, String name) { + setCustomNameFromString(stack, name); + } + + public static void setCustomNameFromString(ItemStack stack, String name) { + setCustomName(stack, TextUtil.literal(name)); + } + + public static void setCustomNameFromTranslatable(ItemStack stack, String key) { + setCustomName(stack, TextUtil.translatable(key)); + } + + public static void setCustomName(ItemStack stack, TextComponent name) { + setCustomName(stack, name.getText()); + } + + public static Text getCustomName(ItemStack stack) { + return stack.getName(); + } + + public static String getCustomNameAsString(ItemStack stack) { + return getCustomName(stack).getString(); + } + + public static TextComponent getCustomNameAsTextComponent(ItemStack stack) { + return new TextComponent(getCustomName(stack)); + } + + public static boolean hasCustomName(ItemStack stack) { + return stack.hasCustomName(); + } + + public static void removeCustomName(ItemStack stack) { + stack.removeCustomName(); + } +} diff --git a/info.properties b/info.properties index a07d156e3..36230804b 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.8 +mod_version=2.3.9 maven_group=net.pitan76 \ No newline at end of file From a468aee94ab012132a263f4f2f8fc392dc0907fc Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 6 Sep 2024 22:18:13 +0900 Subject: [PATCH 357/617] 1182 --- .../api/entity/effect/CompatStatusEffectInstance.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffectInstance.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffectInstance.java index c96a95554..92a2abec7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffectInstance.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/effect/CompatStatusEffectInstance.java @@ -44,7 +44,7 @@ public CompatStatusEffectInstance(CompatStatusEffect effect, int duration, int a public CompatStatusEffectInstance(CompatStatusEffect effect, int duration, int amplifier, boolean ambient, boolean showParticles, boolean showIcon, @Nullable StatusEffectInstance hiddenEffect) { StatusEffect statusEffect = effect.getStatusEffect(null); - this.instance = new StatusEffectInstance(statusEffect, duration, amplifier, ambient, showParticles, showIcon, hiddenEffect, statusEffect.getFactorCalculationDataSupplier()); + this.instance = new StatusEffectInstance(statusEffect, duration, amplifier, ambient, showParticles, showIcon, hiddenEffect); } public int getDuration() { From a5faa671d7a43ee5db640c1c3649b019c7d39141 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:20:10 +0900 Subject: [PATCH 358/617] add API --- .../pitan76/mcpitanlib/api/entity/Player.java | 16 ++ .../api/event/block/BlockBreakEvent.java | 6 + .../api/event/block/BlockBreakStartEvent.java | 5 + .../api/event/block/BlockPlacedEvent.java | 6 + .../event/block/BlockScheduledTickEvent.java | 6 + .../api/event/block/EntityCollisionEvent.java | 5 + .../api/event/block/ItemScattererUtil.java | 38 +++ .../api/event/block/PlacementStateArgs.java | 6 + .../api/event/block/StateReplacedEvent.java | 16 +- .../mcpitanlib/api/helper/SimpleRegister.java | 69 +++++ .../api/item/CompatibleItemSettings.java | 5 + .../api/util/BlockEntityTypeUtil.java | 16 ++ .../mcpitanlib/api/util/BlockUtil.java | 27 ++ .../mcpitanlib/api/util/CompatIdentifier.java | 4 + .../mcpitanlib/api/util/EntityTypeUtil.java | 16 ++ .../mcpitanlib/api/util/IngredientUtil.java | 18 ++ .../pitan76/mcpitanlib/api/util/ItemUtil.java | 27 ++ .../pitan76/mcpitanlib/api/util/NbtUtil.java | 241 ++++++++++++++++++ .../mcpitanlib/api/util/WorldUtil.java | 28 +- info.properties | 2 +- 20 files changed, 547 insertions(+), 10 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/helper/SimpleRegister.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index cd897e020..fd4c111c5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -264,10 +264,26 @@ public float getPitch() { } public void playSound(SoundEvent event, SoundCategory category, float volume, float pitch) { + if (isServerPlayerEntity()) { + Optional player = getServerPlayer(); + if (player.isPresent()) { + player.get().playSoundToPlayer(event, category, volume, pitch); + return; + } + } + playSound(event, volume, pitch); } public void playSound(SoundEvent event, float volume, float pitch) { + if (isServerPlayerEntity()) { + Optional player = getServerPlayer(); + if (player.isPresent()) { + player.get().playSound(event, volume, pitch); + return; + } + } + getEntity().playSound(event, volume, pitch); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java index 25e353458..47c330fb5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java @@ -1,11 +1,13 @@ package net.pitan76.mcpitanlib.api.event.block; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; public class BlockBreakEvent extends BaseEvent { public World world; @@ -43,4 +45,8 @@ public World getWorld() { public boolean isClient() { return world.isClient(); } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(getWorld(), getPos()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakStartEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakStartEvent.java index a98b2db09..c50170a81 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakStartEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakStartEvent.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.event.block; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -53,4 +54,8 @@ public ItemStack getPlayerMainHandStack() { public ItemStack getPlayerOffHandStack() { return player.getOffHandStack(); } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(getWorld(), getPos()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java index 940958701..639d95761 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java @@ -1,11 +1,13 @@ package net.pitan76.mcpitanlib.api.event.block; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; public class BlockPlacedEvent extends BaseEvent { @@ -46,4 +48,8 @@ public LivingEntity getPlacer() { public boolean isClient() { return world.isClient(); } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(getWorld(), getPos()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java index ef9adc67b..4c091e0a7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java @@ -1,9 +1,11 @@ package net.pitan76.mcpitanlib.api.event.block; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; import java.util.Random; @@ -36,4 +38,8 @@ public ServerWorld getWorld() { public Random getRandom() { return random; } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(getWorld(), getPos()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/EntityCollisionEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/EntityCollisionEvent.java index 298685fa1..41abb7dcf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/EntityCollisionEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/EntityCollisionEvent.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.event.block; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.sound.SoundCategory; @@ -80,4 +81,8 @@ public Optional getPlayerEntity() { if (!hasPlayerEntity()) return Optional.empty(); return Optional.of((PlayerEntity) entity); } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(getWorld(), getBlockPos()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java new file mode 100644 index 000000000..4abcf5823 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java @@ -0,0 +1,38 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ItemScatterer; +import net.minecraft.util.collection.DefaultedList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemScattererUtil { + public static void spawn(World world, BlockPos pos, BlockEntity blockEntity) { + if (blockEntity instanceof Inventory) { + spawn(world, pos, (Inventory) blockEntity); + } + } + + public static void spawn(World world, BlockPos pos, Inventory inventory) { + ItemScatterer.spawn(world, pos, inventory); + } + + public static void spawn(World world, BlockPos pos, ItemStack stack) { + ItemScatterer.spawn(world, pos.getX(), pos.getY(), pos.getZ(), stack); + } + + public static void spawn(World world, BlockPos pos, DefaultedList stacks) { + ItemScatterer.spawn(world, pos, stacks); + } + + public static void onStateReplaced(StateReplacedEvent e) { + onStateReplaced(e.getState(), e.getNewState(), e.getWorld(), e.getPos()); + } + + public static void onStateReplaced(BlockState state, BlockState newState, World world, BlockPos pos) { + ItemScatterer.onStateReplaced(state, newState, world, pos); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java index de6f38cb0..381572a0a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java @@ -2,6 +2,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.property.Property; import net.minecraft.util.Hand; @@ -14,6 +15,7 @@ import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; import net.pitan76.mcpitanlib.api.util.BlockStateUtil; +import net.pitan76.mcpitanlib.api.util.WorldUtil; import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import org.jetbrains.annotations.Nullable; @@ -103,4 +105,8 @@ public , V extends T> BlockState withBlockState(Property return BlockStateUtil.with(BlockStateUtil.getDefaultState(block), property, value); } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(getWorld(), getPos()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java index 3e08d355c..a314e2526 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java @@ -3,7 +3,6 @@ import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.inventory.Inventory; -import net.minecraft.util.ItemScatterer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; @@ -77,17 +76,20 @@ public BlockEntity getBlockEntity() { * spawn the drops in the container */ public void spawnDropsInContainer() { - BlockEntity blockEntity = getBlockEntity(); - if (blockEntity instanceof Inventory) { - Inventory inventory = (Inventory) blockEntity; - ItemScatterer.spawn(world, pos, inventory); - } + if (isSameState() || !hasInventory()) return; + + ItemScattererUtil.spawn(getWorld(), getPos(), getBlockEntity()); + updateComparators(); + } + + public boolean hasInventory() { + return getBlockEntity() instanceof Inventory; } /** * update the comparators */ public void updateComparators() { - world.updateComparators(pos, state.getBlock()); + WorldUtil.updateComparators(getWorld(), getPos(), getState().getBlock()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/helper/SimpleRegister.java b/common/src/main/java/net/pitan76/mcpitanlib/api/helper/SimpleRegister.java new file mode 100644 index 000000000..763444f86 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/helper/SimpleRegister.java @@ -0,0 +1,69 @@ +package net.pitan76.mcpitanlib.api.helper; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemConvertible; +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; +import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; +import net.pitan76.mcpitanlib.api.util.ItemUtil; +import net.pitan76.mcpitanlib.core.datafixer.Pair; + +import java.util.function.Supplier; + +public class SimpleRegister { + public static Supplier createItem(CompatRegistryV2 registry, CompatIdentifier id, CompatibleItemSettings settings) { + return registry.registerExtendItem(id, () -> new ExtendItem(settings)); + } + + public static Supplier createSimpleItem(CompatRegistryV2 registry, CompatIdentifier id) { + return createItem(registry, id, new CompatibleItemSettings()); + } + + public static Supplier createFoodItem(CompatRegistryV2 registry, CompatIdentifier id, CompatFoodComponent component) { + return createItem(registry, id, new CompatibleItemSettings().food(component)); + } + + public static Supplier createSimpleFoodItem(CompatRegistryV2 registry, CompatIdentifier id, int hunger, float saturation, boolean meat, boolean snack) { + CompatFoodComponent component = new CompatFoodComponent().setHunger(hunger).setSaturation(saturation); + if (meat) component.setMeat(); + if (snack) component.setSnack(); + return createFoodItem(registry, id, component); + } + + public static Supplier createSimpleFoodItem(CompatRegistryV2 registry, CompatIdentifier id, int hunger, float saturation) { + return createSimpleFoodItem(registry, id, hunger, saturation, false, false); + } + + public static Pair, Supplier> createBlock(CompatRegistryV2 registry, CompatIdentifier id, CompatibleBlockSettings blockSettings, CompatibleItemSettings itemSettings) { + Supplier blockSupplier = registry.registerExtendBlock(id, () -> new ExtendBlock(blockSettings)); + RegistryResult itemRegistryResult = registry.registerItem(id, () -> ItemUtil.ofBlock(blockSupplier.get(), itemSettings)); + Supplier itemSupplier = itemRegistryResult::getOrNull; + return new Pair<>(blockSupplier, itemSupplier); + } + + public static Pair, Supplier> createSimpleBlock(CompatRegistryV2 registry, CompatIdentifier id, CompatibleItemSettings itemSettings) { + return createBlock(registry, id, new CompatibleBlockSettings(), itemSettings); + } + + public static Pair, Supplier> createSimpleBlock(CompatRegistryV2 registry, CompatIdentifier id) { + return createBlock(registry, id, new CompatibleBlockSettings(), new CompatibleItemSettings()); + } + + public static CreativeTabBuilder createCreativeTab(CompatRegistryV2 registry, CompatIdentifier id, Supplier icon) { + CreativeTabBuilder builder = CreativeTabBuilder.create(id).setIcon(icon); + registry.registerItemGroup(builder); + return builder; + } + + public static CreativeTabBuilder createCreativeTabByItem(CompatRegistryV2 registry, CompatIdentifier id, Supplier item) { + return createCreativeTab(registry, id, () -> ItemStackUtil.create(item.get())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index adcc3bfbd..6263593e5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -56,6 +56,7 @@ public CompatibleItemSettings maxDamageIfAbsent(int maxDamage) { return this; } + @Deprecated public CompatibleItemSettings food(FoodComponent foodComponent) { settings.food(foodComponent); return this; @@ -91,4 +92,8 @@ public CompatibleItemSettings addGroup(ItemGroup itemGroup, CompatIdentifier ide public CompatibleItemSettings addGroup(Supplier itemGroup, CompatIdentifier identifier) { return addGroup(itemGroup, identifier.toMinecraft()); } + + public CompatibleItemSettings food(CompatFoodComponent foodComponent) { + return food(foodComponent.build()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java index b5e48b6e4..304125bcc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java @@ -13,6 +13,22 @@ public static BlockEntityType fromId(Identifier identifier) { return Registry.BLOCK_ENTITY_TYPE.get(identifier); } + public static boolean isExist(Identifier identifier) { + return Registries.BLOCK_ENTITY_TYPE.containsId(identifier); + } + + public static CompatIdentifier toCompatID(BlockEntityType entityType) { + return CompatIdentifier.fromMinecraft(toID(entityType)); + } + + public static BlockEntityType fromId(CompatIdentifier identifier) { + return fromId(identifier.toMinecraft()); + } + + public static boolean isExist(CompatIdentifier identifier) { + return isExist(identifier.toMinecraft()); + } + public static int getRawId(BlockEntityType type) { return Registry.BLOCK_ENTITY_TYPE.getRawId(type); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java index 35d230b53..ef53d5544 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java @@ -96,6 +96,33 @@ public static Block fromId(Identifier identifier) { return BlockUtilV1.fromId(identifier); } + /** + * Get CompatIdentifier from block. + * @param block Block to get CompatIdentifier. + * @return CompatIdentifier of the block. + */ + public static CompatIdentifier toCompatID(Block block) { + return CompatIdentifier.fromMinecraft(toID(block)); + } + + /** + * Get block from CompatIdentifier. + * @param identifier CompatIdentifier of the block. + * @return Block of the CompatIdentifier. + */ + public static Block fromId(CompatIdentifier identifier) { + return fromId(identifier.toMinecraft()); + } + + /** + * Check if the block is existed. + * @param identifier CompatIdentifier of the block. + * @return If the block is existed. + */ + public static boolean isExist(CompatIdentifier identifier) { + return isExist(identifier.toMinecraft()); + } + /** * Get all blocks. * @return List of all blocks. diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java index 5a21546e9..1d786c02e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java @@ -84,6 +84,10 @@ public boolean equals(Object obj) { } else if (obj != null && this.getClass() == obj.getClass()) { CompatIdentifier identifier = (CompatIdentifier)obj; return this.namespace.equals(identifier.namespace) && this.path.equals(identifier.path); + } else if (obj instanceof Identifier) { + return this.toString().equals(obj.toString()); + } else if (obj instanceof String) { + return this.toString().equals(obj); } else { return false; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java index eeac60409..1ab5019dc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java @@ -13,6 +13,22 @@ public static EntityType fromId(Identifier identifier) { return Registry.ENTITY_TYPE.get(identifier); } + public static boolean isExist(Identifier identifier) { + return Registries.ENTITY_TYPE.containsId(identifier); + } + + public static CompatIdentifier toCompatID(EntityType entityType) { + return CompatIdentifier.fromMinecraft(toID(entityType)); + } + + public static EntityType fromId(CompatIdentifier identifier) { + return fromId(identifier.toMinecraft()); + } + + public static boolean isExist(CompatIdentifier identifier) { + return isExist(identifier.toMinecraft()); + } + public static int getRawId(EntityType type) { return Registry.ENTITY_TYPE.getRawId(type); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java index 2f9e22b3b..7ce79aab7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java @@ -1,10 +1,14 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.item.Item; import net.minecraft.recipe.Ingredient; import net.minecraft.tag.TagKey; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import java.util.ArrayList; +import java.util.List; + public class IngredientUtil { public static Ingredient fromTagByIdentifier(Identifier id) { return Ingredient.fromTag(TagKey.of(Registry.ITEM_KEY, id)); @@ -13,4 +17,18 @@ public static Ingredient fromTagByIdentifier(Identifier id) { public static Ingredient fromTagByString(String id) { return fromTagByIdentifier(new Identifier(id)); } + + public static Ingredient fromTagByIdentifier(CompatIdentifier id) { + return fromTagByIdentifier(id.toMinecraft()); + } + + public static List getItems(Ingredient ingredient) { + List items = new ArrayList<>(); + for (int rawId : ingredient.getMatchingItemIds()) { + try { + items.add(ItemUtil.fromIndex(rawId)); + } catch (Exception ignored) {} + } + return items; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java index d584e1e18..9d0ebc80a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java @@ -90,6 +90,33 @@ public static Item fromId(Identifier identifier) { return ItemUtilV1.fromId(identifier); } + /** + * Get CompatIdentifier from Item. + * @param item Item to get CompatIdentifier. + * @return CompatIdentifier of the Item. + */ + public static CompatIdentifier toCompatID(Item item) { + return CompatIdentifier.fromMinecraft(toID(item)); + } + + /** + * Get item from CompatIdentifier. + * @param identifier CompatIdentifier of the item. + * @return Item of the CompatIdentifier. + */ + public static Item fromId(CompatIdentifier identifier) { + return fromId(identifier.toMinecraft()); + } + + /** + * Check if the item is existed. + * @param identifier CompatIdentifier of the item. + * @return If the item is existed. + */ + public static boolean isExist(CompatIdentifier identifier) { + return isExist(identifier.toMinecraft()); + } + /** * Create BlockItem from Block and Item.Settings. * @param block Block to create BlockItem. diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java index d20b2dc16..5f77f9127 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java @@ -1,9 +1,21 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.util.math.PosUtil; +import net.pitan76.mcpitanlib.api.util.math.Vec3dUtil; +import net.pitan76.mcpitanlib.api.util.math.Vec3iUtil; +import java.util.Optional; import java.util.Set; +import java.util.UUID; public class NbtUtil { @@ -25,6 +37,16 @@ public static void put(NbtCompound nbt, String key, NbtCompound value) { nbt.put(key, value); } + /** + * 値を設定する。 + * @param nbt NbtCompound + * @param key キー + * @param value 値 + */ + public static void put(NbtCompound nbt, String key, NbtElement value) { + nbt.put(key, value); + } + /** * 値を取得する。 * @param nbt NbtCompound @@ -92,6 +114,9 @@ public static T get(NbtCompound nbt, String key, Class clazz) { if (clazz == Short.class) { return (T) Short.valueOf(nbt.getShort(key)); } + if (clazz == UUID.class) { + return (T) nbt.getUuid(key); + } return null; } @@ -142,6 +167,10 @@ public static void set(NbtCompound nbt, String key, T value) { nbt.putShort(key, (Short) value); return; } + if (value instanceof UUID) { + nbt.putUuid(key, (UUID) value); + return; + } } /** @@ -152,4 +181,216 @@ public static void set(NbtCompound nbt, String key, T value) { public static Set getKeys(NbtCompound nbt) { return nbt.getKeys(); } + + /** + * NbtListを取得する。 + * @return NbtList + */ + public static NbtList getList(NbtCompound nbt, String key) { + return nbt.getList(key, 9); + } + + /** + * NbtCompoundをコピーする。 + * @return NbtCompound + */ + public static NbtCompound copy(NbtCompound nbt) { + return nbt.copy(); + } + + // Helper methods + + public static void putInt(NbtCompound nbt, String key, int value) { + set(nbt, key, value); + } + + public static int getInt(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, Integer.class); + return 0; + } + + public static void putString(NbtCompound nbt, String key, String value) { + set(nbt, key, value); + } + + public static String getString(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, String.class); + return ""; + } + + public static void putBoolean(NbtCompound nbt, String key, boolean value) { + set(nbt, key, value); + } + + public static boolean getBoolean(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, Boolean.class); + return false; + } + + public static void putFloat(NbtCompound nbt, String key, float value) { + set(nbt, key, value); + } + + public static float getFloat(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, Float.class); + return 0; + } + + public static void putDouble(NbtCompound nbt, String key, double value) { + set(nbt, key, value); + } + + public static double getDouble(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, Double.class); + return 0; + } + + public static void putLong(NbtCompound nbt, String key, long value) { + set(nbt, key, value); + } + + public static long getLong(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, Long.class); + return 0; + } + + public static void putByte(NbtCompound nbt, String key, byte value) { + set(nbt, key, value); + } + + public static byte getByte(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, Byte.class); + return 0; + } + + public static void putShort(NbtCompound nbt, String key, short value) { + set(nbt, key, value); + } + + public static short getShort(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, Short.class); + return 0; + } + + public static void putUuid(NbtCompound nbt, String key, UUID value) { + set(nbt, key, value); + } + + public static UUID getUuid(NbtCompound nbt, String key) { + if (has(nbt, key)) + return get(nbt, key, UUID.class); + return null; + } + + /** + * BlockPosを設定する。 + * key: { + * "x": pos.getX(), + * "y": pos.getY(), + * "z": pos.getZ() + * } + * + * @param nbt NbtCompound + * @param key キー + * @param pos BlockPos + */ + public static void setBlockPos(NbtCompound nbt, String key, BlockPos pos) { + NbtCompound posNbt = create(); + putInt(posNbt, "x", pos.getX()); + putInt(posNbt, "y", pos.getY()); + putInt(posNbt, "z", pos.getZ()); + put(nbt, key, posNbt); + } + + /** + * BlockPosを取得する。 + * + * @param nbt NbtCompound + * @param key キー + * @return BlockPos + */ + public static BlockPos getBlockPos(NbtCompound nbt, String key) { + NbtCompound posNbt = get(nbt, key); + return PosUtil.flooredBlockPos(getInt(posNbt, "x"), getInt(posNbt, "y"), getInt(posNbt, "z")); + } + + public static void putVec3i(NbtCompound nbt, String key, Vec3i vec3i) { + NbtCompound vec3iNbt = create(); + putInt(vec3iNbt, "x", vec3i.getX()); + putInt(vec3iNbt, "y", vec3i.getY()); + putInt(vec3iNbt, "z", vec3i.getZ()); + put(nbt, key, vec3iNbt); + } + + public static Vec3i getVec3i(NbtCompound nbt, String key) { + NbtCompound vec3iNbt = get(nbt, key); + return Vec3iUtil.create(getInt(vec3iNbt, "x"), getInt(vec3iNbt, "y"), getInt(vec3iNbt, "z")); + } + + public static void putVec3d(NbtCompound nbt, String key, Vec3d vec3d) { + NbtCompound vec3dNbt = create(); + putDouble(vec3dNbt, "x", vec3d.getX()); + putDouble(vec3dNbt, "y", vec3d.getY()); + putDouble(vec3dNbt, "z", vec3d.getZ()); + put(nbt, key, vec3dNbt); + } + + public static Vec3d getVec3d(NbtCompound nbt, String key) { + NbtCompound vec3dNbt = get(nbt, key); + return Vec3dUtil.create(getDouble(vec3dNbt, "x"), getDouble(vec3dNbt, "y"), getDouble(vec3dNbt, "z")); + } + + public static void putItemStack(NbtCompound nbt, String key, ItemStack stack, CompatRegistryLookup registryLookup) { + NbtElement stackNbt = stack.encode(registryLookup.getRegistryLookup()); + put(nbt, key, stackNbt); + } + + public static Optional getItemStack(NbtCompound nbt, String key, CompatRegistryLookup registryLookup) { + NbtElement stackNbt = get(nbt, key); + return ItemStack.fromNbt(registryLookup.getRegistryLookup(), stackNbt); + } + + public static void putSimpleItemStack(NbtCompound nbt, String key, ItemStack stack) { + NbtCompound stackNbt = create(); + putString(stackNbt, "id", ItemUtil.toID(stack.getItem()).toString()); + putByte(stackNbt, "Count", (byte) ItemStackUtil.getCount(stack)); + + NbtCompound tagNbt = create(); + NbtCompound componentsNbt = create(); + put(componentsNbt, "minecraft:custom_data", CustomDataUtil.getOrCreateNbt(stack)); + put(tagNbt, "components", componentsNbt); + put(stackNbt, "tag", tagNbt); + put(nbt, key, stackNbt); + } + + public static Optional getSimpleItemStack(NbtCompound nbt, String key) { + if (!has(nbt, key)) return Optional.empty(); + NbtCompound stackNbt = get(nbt, key); + + if (!has(stackNbt, "id") || !has(stackNbt, "Count")) return Optional.empty(); + Item item = ItemUtil.fromId(CompatIdentifier.of(getString(stackNbt, "id"))); + int count = getByte(stackNbt, "Count"); + + ItemStack stack = ItemStackUtil.create(item, count); + + if (has(stackNbt, "tag")) { + NbtCompound tagNbt = get(stackNbt, "tag"); + if (has(tagNbt, "components")) { + NbtCompound componentsNbt = get(tagNbt, "components"); + if (has(componentsNbt, "minecraft:custom_data")) { + CustomDataUtil.setNbt(stack, get(componentsNbt, "minecraft:custom_data")); + } + } + } + + return Optional.of(stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 2182fc8f8..60ab2164a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Objects; +import java.util.Optional; public class WorldUtil { public static boolean hasSkyLight(World world) { @@ -99,9 +100,20 @@ public static BlockPos getSpawnPos(World world) { return new BlockPos(world.getLevelProperties().getSpawnX(), world.getLevelProperties().getSpawnY(), world.getLevelProperties().getSpawnZ()); } + public static Optional getServer(World world) { + if (isClient(world)) return Optional.empty(); + return Optional.ofNullable(world.getServer()); + } + public static World getWorld(World world, Identifier worldId) { - if (isClient(world)) return null; - return getWorld(world.getServer(), worldId); + Optional server = getServer(world); + if (!server.isPresent()) return null; + + return getWorld(server.get(), worldId); + } + + public static Optional getWorld(World world, CompatIdentifier worldId) { + return Optional.ofNullable(getWorld(world, worldId.toMinecraft())); } public static World getOverworld(MinecraftServer server) { @@ -120,10 +132,18 @@ public static World getWorld(MinecraftServer server, Identifier worldId) { return server.getWorld(RegistryKey.of(Registry.WORLD_KEY, worldId)); } + public static World getWorld(MinecraftServer server, CompatIdentifier worldId) { + return getWorld(server, worldId.toMinecraft()); + } + public static Identifier getWorldId(World world) { return world.getRegistryKey().getValue(); } + public static CompatIdentifier getCompatWorldId(World world) { + return CompatIdentifier.fromMinecraft(getWorldId(world)); + } + public static boolean equals(World world, World world2) { return Objects.equals(getWorldId(world), getWorldId(world2)); } @@ -223,4 +243,8 @@ public static void addParticle(World world, ParticleEffect parameters, double x, public static boolean canSetBlock(World world, BlockPos pos) { return world.canSetBlock(pos); } + + public static void updateComparators(World world, BlockPos pos, Block block) { + world.updateComparators(pos, block); + } } diff --git a/info.properties b/info.properties index 36230804b..65cab9385 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.3.9 +mod_version=2.4.0 maven_group=net.pitan76 \ No newline at end of file From d7d7649b29680c42fe992d0e6cb2b50f9ed590cd Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:24:24 +0900 Subject: [PATCH 359/617] fix API 1204 --- .../java/net/pitan76/mcpitanlib/api/entity/Player.java | 2 +- .../pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java | 1 + .../main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java | 7 ++++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index fd4c111c5..634bd2aa2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -267,7 +267,7 @@ public void playSound(SoundEvent event, SoundCategory category, float volume, fl if (isServerPlayerEntity()) { Optional player = getServerPlayer(); if (player.isPresent()) { - player.get().playSoundToPlayer(event, category, volume, pitch); + player.get().playSound(event, category, volume, pitch); return; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java index 17e1d9961..0d4c05d85 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityDataUtil.java @@ -32,6 +32,7 @@ public static void readCompatBlockEntityNbtFromStack(ItemStack stack, CompatBloc public static void writeCompatBlockEntityNbtToStack(ItemStack stack, CompatBlockEntity blockEntity) { NbtCompound nbt = getBlockEntityNbt(stack); blockEntity.writeNbt(new WriteNbtArgs(nbt)); + NbtUtil.set(nbt, "id", BlockEntityTypeUtil.toID(blockEntity.getType()).toString()); setBlockEntityNbt(stack, nbt); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java index 5f77f9127..52ccdc30b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java @@ -349,13 +349,14 @@ public static Vec3d getVec3d(NbtCompound nbt, String key) { } public static void putItemStack(NbtCompound nbt, String key, ItemStack stack, CompatRegistryLookup registryLookup) { - NbtElement stackNbt = stack.encode(registryLookup.getRegistryLookup()); + NbtCompound stackNbt = create(); + stack.writeNbt(stackNbt); put(nbt, key, stackNbt); } public static Optional getItemStack(NbtCompound nbt, String key, CompatRegistryLookup registryLookup) { - NbtElement stackNbt = get(nbt, key); - return ItemStack.fromNbt(registryLookup.getRegistryLookup(), stackNbt); + NbtCompound stackNbt = get(nbt, key); + return Optional.ofNullable(ItemStack.fromNbt(stackNbt)); } public static void putSimpleItemStack(NbtCompound nbt, String key, ItemStack stack) { From 08e21d4dee7ae7f4c3e03127ed878da3e2ad62f0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:29:48 +0900 Subject: [PATCH 360/617] fix API 1201 --- .../mcpitanlib/api/event/block/ItemScattererUtil.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java index 4abcf5823..597be5645 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java @@ -8,6 +8,7 @@ import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.WorldUtil; public class ItemScattererUtil { public static void spawn(World world, BlockPos pos, BlockEntity blockEntity) { @@ -33,6 +34,11 @@ public static void onStateReplaced(StateReplacedEvent e) { } public static void onStateReplaced(BlockState state, BlockState newState, World world, BlockPos pos) { - ItemScatterer.onStateReplaced(state, newState, world, pos); + if (state.isOf(newState.getBlock())) return; + BlockEntity blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof Inventory) { + spawn(world, pos, (Inventory) blockEntity); + WorldUtil.updateComparators(world, pos, state.getBlock()); + } } } From 87cfde02dfb4149f5fe4e8fbe42a999a6fc5524a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:32:48 +0900 Subject: [PATCH 361/617] fix API 1192 --- .../net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java | 2 +- .../java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java index 304125bcc..91cd60570 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityTypeUtil.java @@ -14,7 +14,7 @@ public static BlockEntityType fromId(Identifier identifier) { } public static boolean isExist(Identifier identifier) { - return Registries.BLOCK_ENTITY_TYPE.containsId(identifier); + return Registry.BLOCK_ENTITY_TYPE.containsId(identifier); } public static CompatIdentifier toCompatID(BlockEntityType entityType) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java index 1ab5019dc..71f795558 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java @@ -14,7 +14,7 @@ public static EntityType fromId(Identifier identifier) { } public static boolean isExist(Identifier identifier) { - return Registries.ENTITY_TYPE.containsId(identifier); + return Registry.ENTITY_TYPE.containsId(identifier); } public static CompatIdentifier toCompatID(EntityType entityType) { From 27cdf57a9a4c95010797ebd27d545db2da617fc5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:29:33 +0900 Subject: [PATCH 362/617] add API --- .../api/block/CompatPillarBlock.java | 12 + .../mcpitanlib/api/block/CompatSlabBlock.java | 82 + .../api/block/CompatStairsBlock.java | 34 +- .../mcpitanlib/api/block/ExtendBlock.java | 23 + .../api/client/event/WorldRenderRegistry.java | 15 + .../listener/BeforeBlockOutlineEvent.java | 108 ++ .../listener/BeforeBlockOutlineListener.java | 11 + .../event/listener/WorldRenderContext.java | 63 + .../pitan76/mcpitanlib/api/entity/Player.java | 47 + .../api/item/v2/CompatArmorMaterial.java | 24 + .../api/sound/CompatSoundEvent.java | 38 + .../api/sound/CompatSoundEvents.java | 1619 +++++++++++++++++ .../pitan76/mcpitanlib/api/util/NbtUtil.java | 4 + .../api/util/PersistentStateUtil.java | 4 + .../mcpitanlib/api/util/VoxelShapeUtil.java | 5 + .../mcpitanlib/api/util/WorldUtil.java | 12 + .../api/util/client/ClientUtil.java | 48 +- .../core/serialization/CompatMapCodec.java | 54 + .../event/fabric/WorldRenderRegistryImpl.java | 89 + info.properties | 2 +- .../neoforge/WorldRenderRegistryImpl.java | 105 ++ 21 files changed, 2392 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/event/WorldRenderRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineListener.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java create mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java index 4be321670..7f358ac91 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.block; +import com.mojang.serialization.MapCodec; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.PillarBlock; @@ -7,6 +8,7 @@ import net.minecraft.state.StateManager; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; +import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; public class CompatPillarBlock extends PillarBlock implements ExtendBlockProvider { public CompatPillarBlock(Settings settings) { @@ -49,4 +51,14 @@ public void appendProperties(AppendPropertiesArgs args, Options options) { public BlockState getPlacementState(PlacementStateArgs args, Options options) { return ExtendBlockProvider.super.getPlacementState(args, options); } + + @Deprecated + @Override + public MapCodec getCodec() { + return getCompatCodec().getCodec(); + } + + public CompatMapCodec getCompatCodec() { + return CompatMapCodec.of(super.getCodec()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java new file mode 100644 index 000000000..251dcda7f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java @@ -0,0 +1,82 @@ +package net.pitan76.mcpitanlib.api.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.SlabBlock; +import net.minecraft.block.StairsBlock; +import net.minecraft.entity.ai.pathing.NavigationType; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.state.StateManager; +import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; +import net.pitan76.mcpitanlib.api.event.block.CanPathfindThroughArgs; +import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; +import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; + +public class CompatSlabBlock extends SlabBlock implements ExtendBlockProvider { + public CompatSlabBlock(Settings settings) { + super(settings); + } + + public CompatSlabBlock(CompatibleBlockSettings settings) { + this(settings.build()); + } + + public void appendProperties(AppendPropertiesArgs args) { + super.appendProperties(args.builder); + } + + public BlockState getPlacementState(PlacementStateArgs args) { + return super.getPlacementState(args.ctx); + } + + @Deprecated + @Override + public void appendProperties(StateManager.Builder builder) { + appendProperties(new AppendPropertiesArgs(builder)); + } + + @Deprecated + @Override + public BlockState getPlacementState(ItemPlacementContext ctx) { + return getPlacementState(new PlacementStateArgs(ctx)); + } + + // ExtendBlockProvider + @Deprecated + @Override + public void appendProperties(AppendPropertiesArgs args, Options options) { + ExtendBlockProvider.super.appendProperties(args, options); + } + + @Deprecated + @Override + public BlockState getPlacementState(PlacementStateArgs args, Options options) { + return ExtendBlockProvider.super.getPlacementState(args, options); + } + + @Deprecated + @Override + public MapCodec getCodec() { + return getCompatCodec().getCodec(); + } + + public CompatMapCodec getCompatCodec() { + return CompatMapCodec.of(super.getCodec()); + } + + @Deprecated + @Override + public boolean canPathfindThrough(BlockState state, NavigationType type) { + return canPathfindThrough(new CanPathfindThroughArgs(state, type)); + } + + public boolean canPathfindThrough(CanPathfindThroughArgs args) { + return super.canPathfindThrough(args.state, args.type); + } + + @Override + public Boolean canPathfindThrough(CanPathfindThroughArgs args, Options options) { + return ExtendBlockProvider.super.canPathfindThrough(args, options); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java index ecd6d9a89..937a7ec9a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java @@ -1,17 +1,18 @@ package net.pitan76.mcpitanlib.api.block; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.ShapeContext; -import net.minecraft.block.StairsBlock; +import com.mojang.serialization.MapCodec; +import net.minecraft.block.*; +import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; +import net.pitan76.mcpitanlib.api.event.block.CanPathfindThroughArgs; import net.pitan76.mcpitanlib.api.event.block.OutlineShapeEvent; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; +import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; public class CompatStairsBlock extends StairsBlock implements ExtendBlockProvider { public CompatStairsBlock(BlockState baseBlockState, Settings settings) { @@ -70,4 +71,29 @@ public BlockState getPlacementState(PlacementStateArgs args, Options options) { public VoxelShape getOutlineShape(OutlineShapeEvent event, Options options) { return ExtendBlockProvider.super.getOutlineShape(event, options); } + + @Deprecated + @Override + public MapCodec getCodec() { + return getCompatCodec().getCodec(); + } + + public CompatMapCodec getCompatCodec() { + return CompatMapCodec.of(super.getCodec()); + } + + @Deprecated + @Override + public boolean canPathfindThrough(BlockState state, NavigationType type) { + return canPathfindThrough(new CanPathfindThroughArgs(state, type)); + } + + public boolean canPathfindThrough(CanPathfindThroughArgs args) { + return super.canPathfindThrough(args.state, args.type); + } + + @Override + public Boolean canPathfindThrough(CanPathfindThroughArgs args, Options options) { + return ExtendBlockProvider.super.canPathfindThrough(args, options); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 8a6c6090f..6f27ac85f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.block; +import com.mojang.serialization.MapCodec; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; @@ -30,18 +31,30 @@ import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.util.TextUtil; +import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Random; public class ExtendBlock extends Block { + public CompatibleBlockSettings compatSettings; + public ExtendBlock(Settings settings) { super(settings); } public ExtendBlock(CompatibleBlockSettings settings) { super(settings.build()); + this.compatSettings = settings; + } + + /** + * get compatible block settings + * @return CompatibleBlockSettings + */ + public CompatibleBlockSettings getCompatSettings() { + return compatSettings; } /** @@ -308,4 +321,14 @@ public void onBlockBreakStart(BlockState state, World world, BlockPos pos, Playe public void onBlockBreakStart(BlockBreakStartEvent e) { super.onBlockBreakStart(e.state, e.world, e.pos, e.player.getPlayerEntity()); } + + @Deprecated + @Override + protected MapCodec getCodec() { + return getCompatCodec().getCodec(); + } + + public CompatMapCodec getCompatCodec() { + return CompatMapCodec.of(super.getCodec()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/WorldRenderRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/WorldRenderRegistry.java new file mode 100644 index 000000000..5d0d0695c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/WorldRenderRegistry.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.client.event; + +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; + +public class WorldRenderRegistry { + public WorldRenderRegistry() { + + } + + @ExpectPlatform + public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { + throw new AssertionError(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java new file mode 100644 index 000000000..9cf86627b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java @@ -0,0 +1,108 @@ +package net.pitan76.mcpitanlib.api.client.event.listener; + +import net.minecraft.block.BlockState; +import net.minecraft.client.render.Camera; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.WorldRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.VoxelShapeUtil; + +import java.util.Objects; +import java.util.Optional; + +public class BeforeBlockOutlineEvent { + public WorldRenderContext context; + public HitResult hitResult; + + public BeforeBlockOutlineEvent(WorldRenderContext context, HitResult hitResult) { + this.context = context; + this.hitResult = hitResult; + } + + public HitResult getHitResult() { + return hitResult; + } + + public WorldRenderContext getContext() { + return context; + } + + public WorldRenderer getWorldRenderer() { + return context.worldRenderer(); + } + + public Optional getBlockState() { + return Optional.ofNullable(getWorld().getBlockState(getBlockPos().orElse(null))); + } + + public World getWorld() { + return context.world(); + } + + public Optional getBlockPos() { + return Optional.ofNullable(((BlockHitResult) hitResult).getBlockPos()); + } + + public boolean isBlockType() { + return getHitResultType() == HitResult.Type.BLOCK; + } + + public HitResult.Type getHitResultType() { + return hitResult.getType(); + } + + public Camera getCamera() { + return context.camera(); + } + + public Optional getOutlineShape() { + return getBlockState().map(blockState -> blockState.getOutlineShape(getWorld(), + getBlockPos().orElse(null))); + } + + public MatrixStack getMatrixStack() { + return context.matrixStack(); + } + + public void push() { + getMatrixStack().push(); + } + + public void translate(double x, double y, double z) { + getMatrixStack().translate(x, y, z); + } + + public void pop() { + getMatrixStack().pop(); + } + + public Optional getVertexConsumer() { + if (context.consumers() == null) + return Optional.empty(); + + return Optional.of(Objects.requireNonNull(context.consumers()).getBuffer(RenderLayer.getLines())); + } + + public void drawBox(float red, float green, float blue, float alpha) { + Optional outlineShape = getOutlineShape(); + if (!outlineShape.isPresent()) return; + + drawBox(VoxelShapeUtil.getBoundingBox(outlineShape.get()), red, green, blue, alpha); + } + + public void drawBox(Box box, float red, float green, float blue, float alpha) { + Optional vertexConsumer = getVertexConsumer(); + + if (!vertexConsumer.isPresent()) + return; + + WorldRenderer.drawBox(getMatrixStack(), vertexConsumer.get(), box, red, green, blue, alpha); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineListener.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineListener.java new file mode 100644 index 000000000..881ee7b11 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineListener.java @@ -0,0 +1,11 @@ +package net.pitan76.mcpitanlib.api.client.event.listener; + + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +@Environment(EnvType.CLIENT) +@FunctionalInterface +public interface BeforeBlockOutlineListener { + boolean beforeBlockOutline(BeforeBlockOutlineEvent event); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java new file mode 100644 index 000000000..70532c7f4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java @@ -0,0 +1,63 @@ +package net.pitan76.mcpitanlib.api.client.event.listener; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.block.BlockState; +import net.minecraft.client.render.*; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.profiler.Profiler; +import org.jetbrains.annotations.Nullable; +import org.joml.Matrix4f; + +public interface WorldRenderContext { + + WorldRenderer worldRenderer(); + + MatrixStack matrixStack(); + + float tickDelta(); + + long limitTime(); + + boolean blockOutlines(); + + Camera camera(); + + GameRenderer gameRenderer(); + + LightmapTextureManager lightmapTextureManager(); + + @Deprecated + Matrix4f projectionMatrix(); + + ClientWorld world(); + + Profiler profiler(); + + @Deprecated + boolean advancedTranslucency(); + + @Nullable VertexConsumerProvider consumers(); + @Nullable Frustum frustum(); + + @Environment(EnvType.CLIENT) + interface BlockOutlineContext { + @Deprecated + VertexConsumer vertexConsumer(); + + Entity entity(); + + double cameraX(); + + double cameraY(); + + double cameraZ(); + + BlockPos blockPos(); + + BlockState blockState(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 634bd2aa2..326cba651 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -1,7 +1,10 @@ package net.pitan76.mcpitanlib.api.entity; import dev.architectury.registry.menu.ExtendedMenuProvider; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.block.BlockState; +import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.ItemCooldownManager; import net.minecraft.entity.player.PlayerAbilities; @@ -12,6 +15,7 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandler; +import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; @@ -27,6 +31,7 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.gui.ExtendedNamedScreenHandlerFactory; import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; import net.pitan76.mcpitanlib.core.player.ItemCooldown; @@ -287,6 +292,14 @@ public void playSound(SoundEvent event, float volume, float pitch) { getEntity().playSound(event, volume, pitch); } + public void playSound(CompatSoundEvent event, SoundCategory category, float volume, float pitch) { + playSound(event.getSoundEvent(), category, volume, pitch); + } + + public void playSound(CompatSoundEvent event, float volume, float pitch) { + playSound(event.getSoundEvent(), volume, pitch); + } + public ItemCooldown itemCooldown = new ItemCooldown(this); public ItemCooldown getItemCooldown() { @@ -355,4 +368,38 @@ public Optional getServerPlayer() { return Optional.empty(); } + + @Environment(EnvType.CLIENT) + public Optional getClientPlayer() { + if (getEntity() instanceof ClientPlayerEntity) + return Optional.of((ClientPlayerEntity) getEntity()); + + return Optional.empty(); + } + + public void setVelocity(double x, double y, double z) { + getEntity().setVelocity(x, y, z); + } + + public void setVelocity(Vec3d velocity) { + getEntity().setVelocity(velocity); + } + + public Vec3d getVelocity() { + return getEntity().getVelocity(); + } + + public Optional getNetworkHandler() { + Optional player = getServerPlayer(); + return player.map(sp -> sp.networkHandler); + } + + public boolean hasNetworkHandler() { + return getNetworkHandler().isPresent(); + } + + public boolean isSpectator() { + return getEntity().isSpectator(); + } + } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java new file mode 100644 index 000000000..ef5dd87f6 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java @@ -0,0 +1,24 @@ +package net.pitan76.mcpitanlib.api.item.v2; + +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public interface CompatArmorMaterial extends CompatibleArmorMaterial { + + @Override + default SoundEvent getEquipSound() { + return getEquipCompatSound().getSoundEvent(); + } + + CompatSoundEvent getEquipCompatSound(); + + @Override + default Identifier getId() { + return getCompatId().toMinecraft(); + } + + CompatIdentifier getCompatId(); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java new file mode 100644 index 000000000..df84214d5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java @@ -0,0 +1,38 @@ +package net.pitan76.mcpitanlib.api.sound; + +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.sound.SoundEvent; + +public class CompatSoundEvent { + public SoundEvent soundEvent; + public RegistryEntry.Reference reference; + public RegistryEntry entry; + + public CompatSoundEvent(SoundEvent soundEvent) { + this.soundEvent = soundEvent; + } + + public CompatSoundEvent(RegistryEntry.Reference reference) { + this.reference = reference; + } + + public CompatSoundEvent(RegistryEntry entry) { + this.entry = entry; + } + + public static CompatSoundEvent of(SoundEvent soundEvent) { + return new CompatSoundEvent(soundEvent); + } + + public SoundEvent getSoundEvent() { + if (soundEvent == null) { + if (reference != null) { + soundEvent = reference.value(); + } else if (entry != null) { + soundEvent = entry.value(); + } + } + + return soundEvent; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java new file mode 100644 index 000000000..22b271ead --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java @@ -0,0 +1,1619 @@ +package net.pitan76.mcpitanlib.api.sound; + +import com.google.common.collect.ImmutableList; +import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; + +import java.util.stream.Collectors; + +public class CompatSoundEvents { + public static final CompatSoundEvent ENTITY_ALLAY_AMBIENT_WITH_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_AMBIENT_WITH_ITEM); + public static final CompatSoundEvent ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM); + public static final CompatSoundEvent ENTITY_ALLAY_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_DEATH); + public static final CompatSoundEvent ENTITY_ALLAY_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_HURT); + public static final CompatSoundEvent ENTITY_ALLAY_ITEM_GIVEN = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_ITEM_GIVEN); + public static final CompatSoundEvent ENTITY_ALLAY_ITEM_TAKEN = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_ITEM_TAKEN); + public static final CompatSoundEvent ENTITY_ALLAY_ITEM_THROWN = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_ITEM_THROWN); + public static final CompatSoundEvent AMBIENT_CAVE = new CompatSoundEvent(SoundEvents.AMBIENT_CAVE); + public static final CompatSoundEvent AMBIENT_BASALT_DELTAS_ADDITIONS = new CompatSoundEvent(SoundEvents.AMBIENT_BASALT_DELTAS_ADDITIONS); + public static final CompatSoundEvent AMBIENT_BASALT_DELTAS_LOOP = new CompatSoundEvent(SoundEvents.AMBIENT_BASALT_DELTAS_LOOP); + public static final CompatSoundEvent AMBIENT_BASALT_DELTAS_MOOD = new CompatSoundEvent(SoundEvents.AMBIENT_BASALT_DELTAS_MOOD); + public static final CompatSoundEvent AMBIENT_CRIMSON_FOREST_ADDITIONS = new CompatSoundEvent(SoundEvents.AMBIENT_CRIMSON_FOREST_ADDITIONS); + public static final CompatSoundEvent AMBIENT_CRIMSON_FOREST_LOOP = new CompatSoundEvent(SoundEvents.AMBIENT_CRIMSON_FOREST_LOOP); + public static final CompatSoundEvent AMBIENT_CRIMSON_FOREST_MOOD = new CompatSoundEvent(SoundEvents.AMBIENT_CRIMSON_FOREST_MOOD); + public static final CompatSoundEvent AMBIENT_NETHER_WASTES_ADDITIONS = new CompatSoundEvent(SoundEvents.AMBIENT_NETHER_WASTES_ADDITIONS); + public static final CompatSoundEvent AMBIENT_NETHER_WASTES_LOOP = new CompatSoundEvent(SoundEvents.AMBIENT_NETHER_WASTES_LOOP); + public static final CompatSoundEvent AMBIENT_NETHER_WASTES_MOOD = new CompatSoundEvent(SoundEvents.AMBIENT_NETHER_WASTES_MOOD); + public static final CompatSoundEvent AMBIENT_SOUL_SAND_VALLEY_ADDITIONS = new CompatSoundEvent(SoundEvents.AMBIENT_SOUL_SAND_VALLEY_ADDITIONS); + public static final CompatSoundEvent AMBIENT_SOUL_SAND_VALLEY_LOOP = new CompatSoundEvent(SoundEvents.AMBIENT_SOUL_SAND_VALLEY_LOOP); + public static final CompatSoundEvent AMBIENT_SOUL_SAND_VALLEY_MOOD = new CompatSoundEvent(SoundEvents.AMBIENT_SOUL_SAND_VALLEY_MOOD); + public static final CompatSoundEvent AMBIENT_WARPED_FOREST_ADDITIONS = new CompatSoundEvent(SoundEvents.AMBIENT_WARPED_FOREST_ADDITIONS); + public static final CompatSoundEvent AMBIENT_WARPED_FOREST_LOOP = new CompatSoundEvent(SoundEvents.AMBIENT_WARPED_FOREST_LOOP); + public static final CompatSoundEvent AMBIENT_WARPED_FOREST_MOOD = new CompatSoundEvent(SoundEvents.AMBIENT_WARPED_FOREST_MOOD); + public static final CompatSoundEvent AMBIENT_UNDERWATER_ENTER = new CompatSoundEvent(SoundEvents.AMBIENT_UNDERWATER_ENTER); + public static final CompatSoundEvent AMBIENT_UNDERWATER_EXIT = new CompatSoundEvent(SoundEvents.AMBIENT_UNDERWATER_EXIT); + public static final CompatSoundEvent AMBIENT_UNDERWATER_LOOP = new CompatSoundEvent(SoundEvents.AMBIENT_UNDERWATER_LOOP); + public static final CompatSoundEvent AMBIENT_UNDERWATER_LOOP_ADDITIONS = new CompatSoundEvent(SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS); + public static final CompatSoundEvent AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE = new CompatSoundEvent(SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE); + public static final CompatSoundEvent AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE = new CompatSoundEvent(SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE); + public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_BREAK); + public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_CHIME = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_CHIME); + public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_FALL); + public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_HIT); + public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_PLACE); + public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_RESONATE = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_RESONATE); + public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_STEP); + public static final CompatSoundEvent BLOCK_AMETHYST_CLUSTER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_CLUSTER_BREAK); + public static final CompatSoundEvent BLOCK_AMETHYST_CLUSTER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_CLUSTER_FALL); + public static final CompatSoundEvent BLOCK_AMETHYST_CLUSTER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_CLUSTER_HIT); + public static final CompatSoundEvent BLOCK_AMETHYST_CLUSTER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_CLUSTER_PLACE); + public static final CompatSoundEvent BLOCK_AMETHYST_CLUSTER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_CLUSTER_STEP); + public static final CompatSoundEvent BLOCK_ANCIENT_DEBRIS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_ANCIENT_DEBRIS_BREAK); + public static final CompatSoundEvent BLOCK_ANCIENT_DEBRIS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_ANCIENT_DEBRIS_STEP); + public static final CompatSoundEvent BLOCK_ANCIENT_DEBRIS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_ANCIENT_DEBRIS_PLACE); + public static final CompatSoundEvent BLOCK_ANCIENT_DEBRIS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_ANCIENT_DEBRIS_HIT); + public static final CompatSoundEvent BLOCK_ANCIENT_DEBRIS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_ANCIENT_DEBRIS_FALL); + public static final CompatSoundEvent BLOCK_ANVIL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_BREAK); + public static final CompatSoundEvent BLOCK_ANVIL_DESTROY = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_DESTROY); + public static final CompatSoundEvent BLOCK_ANVIL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_FALL); + public static final CompatSoundEvent BLOCK_ANVIL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_HIT); + public static final CompatSoundEvent BLOCK_ANVIL_LAND = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_LAND); + public static final CompatSoundEvent BLOCK_ANVIL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_PLACE); + public static final CompatSoundEvent BLOCK_ANVIL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_STEP); + public static final CompatSoundEvent BLOCK_ANVIL_USE = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_USE); + public static final CompatSoundEvent ENTITY_ARMADILLO_EAT = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_EAT); + public static final CompatSoundEvent ENTITY_ARMADILLO_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_HURT); + public static final CompatSoundEvent ENTITY_ARMADILLO_HURT_REDUCED = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_HURT_REDUCED); + public static final CompatSoundEvent ENTITY_ARMADILLO_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_AMBIENT); + public static final CompatSoundEvent ENTITY_ARMADILLO_STEP = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_STEP); + public static final CompatSoundEvent ENTITY_ARMADILLO_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_DEATH); + public static final CompatSoundEvent ENTITY_ARMADILLO_ROLL = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_ROLL); + public static final CompatSoundEvent ENTITY_ARMADILLO_LAND = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_LAND); + public static final CompatSoundEvent ENTITY_ARMADILLO_SCUTE_DROP = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_SCUTE_DROP); + public static final CompatSoundEvent ENTITY_ARMADILLO_UNROLL_FINISH = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_UNROLL_FINISH); + public static final CompatSoundEvent ENTITY_ARMADILLO_PEEK = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_PEEK); + public static final CompatSoundEvent ENTITY_ARMADILLO_UNROLL_START = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_UNROLL_START); + public static final CompatSoundEvent ENTITY_ARMADILLO_BRUSH = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_BRUSH); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_CHAIN = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_CHAIN); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_DIAMOND = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_ELYTRA = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_ELYTRA); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_GENERIC = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_GOLD = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_GOLD); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_IRON = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_IRON); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_LEATHER = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_LEATHER); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_NETHERITE = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_NETHERITE); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_TURTLE = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_TURTLE); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_WOLF = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_WOLF); + public static final CompatSoundEvent ITEM_ARMOR_UNEQUIP_WOLF = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_UNEQUIP_WOLF); + public static final CompatSoundEvent ENTITY_ARMOR_STAND_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_ARMOR_STAND_BREAK); + public static final CompatSoundEvent ENTITY_ARMOR_STAND_FALL = new CompatSoundEvent(SoundEvents.ENTITY_ARMOR_STAND_FALL); + public static final CompatSoundEvent ENTITY_ARMOR_STAND_HIT = new CompatSoundEvent(SoundEvents.ENTITY_ARMOR_STAND_HIT); + public static final CompatSoundEvent ENTITY_ARMOR_STAND_PLACE = new CompatSoundEvent(SoundEvents.ENTITY_ARMOR_STAND_PLACE); + public static final CompatSoundEvent ENTITY_ARROW_HIT = new CompatSoundEvent(SoundEvents.ENTITY_ARROW_HIT); + public static final CompatSoundEvent ENTITY_ARROW_HIT_PLAYER = new CompatSoundEvent(SoundEvents.ENTITY_ARROW_HIT_PLAYER); + public static final CompatSoundEvent ENTITY_ARROW_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_ARROW_SHOOT); + public static final CompatSoundEvent ITEM_AXE_STRIP = new CompatSoundEvent(SoundEvents.ITEM_AXE_STRIP); + public static final CompatSoundEvent ITEM_AXE_SCRAPE = new CompatSoundEvent(SoundEvents.ITEM_AXE_SCRAPE); + public static final CompatSoundEvent ITEM_AXE_WAX_OFF = new CompatSoundEvent(SoundEvents.ITEM_AXE_WAX_OFF); + public static final CompatSoundEvent ENTITY_AXOLOTL_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_AXOLOTL_ATTACK); + public static final CompatSoundEvent ENTITY_AXOLOTL_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_AXOLOTL_DEATH); + public static final CompatSoundEvent ENTITY_AXOLOTL_HURT = new CompatSoundEvent(SoundEvents.ENTITY_AXOLOTL_HURT); + public static final CompatSoundEvent ENTITY_AXOLOTL_IDLE_AIR = new CompatSoundEvent(SoundEvents.ENTITY_AXOLOTL_IDLE_AIR); + public static final CompatSoundEvent ENTITY_AXOLOTL_IDLE_WATER = new CompatSoundEvent(SoundEvents.ENTITY_AXOLOTL_IDLE_WATER); + public static final CompatSoundEvent ENTITY_AXOLOTL_SPLASH = new CompatSoundEvent(SoundEvents.ENTITY_AXOLOTL_SPLASH); + public static final CompatSoundEvent ENTITY_AXOLOTL_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_AXOLOTL_SWIM); + public static final CompatSoundEvent BLOCK_AZALEA_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_BREAK); + public static final CompatSoundEvent BLOCK_AZALEA_FALL = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_FALL); + public static final CompatSoundEvent BLOCK_AZALEA_HIT = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_HIT); + public static final CompatSoundEvent BLOCK_AZALEA_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_PLACE); + public static final CompatSoundEvent BLOCK_AZALEA_STEP = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_STEP); + public static final CompatSoundEvent BLOCK_AZALEA_LEAVES_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_LEAVES_BREAK); + public static final CompatSoundEvent BLOCK_AZALEA_LEAVES_FALL = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_LEAVES_FALL); + public static final CompatSoundEvent BLOCK_AZALEA_LEAVES_HIT = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_LEAVES_HIT); + public static final CompatSoundEvent BLOCK_AZALEA_LEAVES_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_LEAVES_PLACE); + public static final CompatSoundEvent BLOCK_AZALEA_LEAVES_STEP = new CompatSoundEvent(SoundEvents.BLOCK_AZALEA_LEAVES_STEP); + public static final CompatSoundEvent BLOCK_BAMBOO_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_BREAK); + public static final CompatSoundEvent BLOCK_BAMBOO_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_FALL); + public static final CompatSoundEvent BLOCK_BAMBOO_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_HIT); + public static final CompatSoundEvent BLOCK_BAMBOO_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_PLACE); + public static final CompatSoundEvent BLOCK_BAMBOO_STEP = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_STEP); + public static final CompatSoundEvent BLOCK_BAMBOO_SAPLING_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_SAPLING_BREAK); + public static final CompatSoundEvent BLOCK_BAMBOO_SAPLING_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_SAPLING_HIT); + public static final CompatSoundEvent BLOCK_BAMBOO_SAPLING_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_SAPLING_PLACE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_FALL); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HIT); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_STEP); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_DOOR_OPEN); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_BUTTON_CLICK_OFF); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_BUTTON_CLICK_ON); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_FENCE_GATE_CLOSE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_FENCE_GATE_OPEN); + public static final CompatSoundEvent BLOCK_BARREL_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_BARREL_CLOSE); + public static final CompatSoundEvent BLOCK_BARREL_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_BARREL_OPEN); + public static final CompatSoundEvent BLOCK_BASALT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BASALT_BREAK); + public static final CompatSoundEvent BLOCK_BASALT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_BASALT_STEP); + public static final CompatSoundEvent BLOCK_BASALT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BASALT_PLACE); + public static final CompatSoundEvent BLOCK_BASALT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BASALT_HIT); + public static final CompatSoundEvent BLOCK_BASALT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BASALT_FALL); + public static final CompatSoundEvent ENTITY_BAT_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_BAT_AMBIENT); + public static final CompatSoundEvent ENTITY_BAT_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_BAT_DEATH); + public static final CompatSoundEvent ENTITY_BAT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_BAT_HURT); + public static final CompatSoundEvent ENTITY_BAT_LOOP = new CompatSoundEvent(SoundEvents.ENTITY_BAT_LOOP); + public static final CompatSoundEvent ENTITY_BAT_TAKEOFF = new CompatSoundEvent(SoundEvents.ENTITY_BAT_TAKEOFF); + public static final CompatSoundEvent BLOCK_BEACON_ACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_BEACON_ACTIVATE); + public static final CompatSoundEvent BLOCK_BEACON_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_BEACON_AMBIENT); + public static final CompatSoundEvent BLOCK_BEACON_DEACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_BEACON_DEACTIVATE); + public static final CompatSoundEvent BLOCK_BEACON_POWER_SELECT = new CompatSoundEvent(SoundEvents.BLOCK_BEACON_POWER_SELECT); + public static final CompatSoundEvent ENTITY_BEE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_BEE_DEATH); + public static final CompatSoundEvent ENTITY_BEE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_BEE_HURT); + public static final CompatSoundEvent ENTITY_BEE_LOOP_AGGRESSIVE = new CompatSoundEvent(SoundEvents.ENTITY_BEE_LOOP_AGGRESSIVE); + public static final CompatSoundEvent ENTITY_BEE_LOOP = new CompatSoundEvent(SoundEvents.ENTITY_BEE_LOOP); + public static final CompatSoundEvent ENTITY_BEE_STING = new CompatSoundEvent(SoundEvents.ENTITY_BEE_STING); + public static final CompatSoundEvent ENTITY_BEE_POLLINATE = new CompatSoundEvent(SoundEvents.ENTITY_BEE_POLLINATE); + public static final CompatSoundEvent BLOCK_BEEHIVE_DRIP = new CompatSoundEvent(SoundEvents.BLOCK_BEEHIVE_DRIP); + public static final CompatSoundEvent BLOCK_BEEHIVE_ENTER = new CompatSoundEvent(SoundEvents.BLOCK_BEEHIVE_ENTER); + public static final CompatSoundEvent BLOCK_BEEHIVE_EXIT = new CompatSoundEvent(SoundEvents.BLOCK_BEEHIVE_EXIT); + public static final CompatSoundEvent BLOCK_BEEHIVE_SHEAR = new CompatSoundEvent(SoundEvents.BLOCK_BEEHIVE_SHEAR); + public static final CompatSoundEvent BLOCK_BEEHIVE_WORK = new CompatSoundEvent(SoundEvents.BLOCK_BEEHIVE_WORK); + public static final CompatSoundEvent BLOCK_BELL_USE = new CompatSoundEvent(SoundEvents.BLOCK_BELL_USE); + public static final CompatSoundEvent BLOCK_BELL_RESONATE = new CompatSoundEvent(SoundEvents.BLOCK_BELL_RESONATE); + public static final CompatSoundEvent BLOCK_BIG_DRIPLEAF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BIG_DRIPLEAF_BREAK); + public static final CompatSoundEvent BLOCK_BIG_DRIPLEAF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BIG_DRIPLEAF_FALL); + public static final CompatSoundEvent BLOCK_BIG_DRIPLEAF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BIG_DRIPLEAF_HIT); + public static final CompatSoundEvent BLOCK_BIG_DRIPLEAF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BIG_DRIPLEAF_PLACE); + public static final CompatSoundEvent BLOCK_BIG_DRIPLEAF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_BIG_DRIPLEAF_STEP); + public static final CompatSoundEvent ENTITY_BLAZE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_BLAZE_AMBIENT); + public static final CompatSoundEvent ENTITY_BLAZE_BURN = new CompatSoundEvent(SoundEvents.ENTITY_BLAZE_BURN); + public static final CompatSoundEvent ENTITY_BLAZE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_BLAZE_DEATH); + public static final CompatSoundEvent ENTITY_BLAZE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_BLAZE_HURT); + public static final CompatSoundEvent ENTITY_BLAZE_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_BLAZE_SHOOT); + public static final CompatSoundEvent ENTITY_BOAT_PADDLE_LAND = new CompatSoundEvent(SoundEvents.ENTITY_BOAT_PADDLE_LAND); + public static final CompatSoundEvent ENTITY_BOAT_PADDLE_WATER = new CompatSoundEvent(SoundEvents.ENTITY_BOAT_PADDLE_WATER); + public static final CompatSoundEvent ENTITY_BOGGED_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_AMBIENT); + public static final CompatSoundEvent ENTITY_BOGGED_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_DEATH); + public static final CompatSoundEvent ENTITY_BOGGED_HURT = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_HURT); + public static final CompatSoundEvent ENTITY_BOGGED_SHEAR = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_SHEAR); + public static final CompatSoundEvent ENTITY_BOGGED_STEP = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_STEP); + public static final CompatSoundEvent BLOCK_BONE_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BONE_BLOCK_BREAK); + public static final CompatSoundEvent BLOCK_BONE_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BONE_BLOCK_FALL); + public static final CompatSoundEvent BLOCK_BONE_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BONE_BLOCK_HIT); + public static final CompatSoundEvent BLOCK_BONE_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BONE_BLOCK_PLACE); + public static final CompatSoundEvent BLOCK_BONE_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_BONE_BLOCK_STEP); + public static final CompatSoundEvent ITEM_BONE_MEAL_USE = new CompatSoundEvent(SoundEvents.ITEM_BONE_MEAL_USE); + public static final CompatSoundEvent ITEM_BOOK_PAGE_TURN = new CompatSoundEvent(SoundEvents.ITEM_BOOK_PAGE_TURN); + public static final CompatSoundEvent ITEM_BOOK_PUT = new CompatSoundEvent(SoundEvents.ITEM_BOOK_PUT); + public static final CompatSoundEvent BLOCK_BLASTFURNACE_FIRE_CRACKLE = new CompatSoundEvent(SoundEvents.BLOCK_BLASTFURNACE_FIRE_CRACKLE); + public static final CompatSoundEvent ITEM_BOTTLE_EMPTY = new CompatSoundEvent(SoundEvents.ITEM_BOTTLE_EMPTY); + public static final CompatSoundEvent ITEM_BOTTLE_FILL = new CompatSoundEvent(SoundEvents.ITEM_BOTTLE_FILL); + public static final CompatSoundEvent ITEM_BOTTLE_FILL_DRAGONBREATH = new CompatSoundEvent(SoundEvents.ITEM_BOTTLE_FILL_DRAGONBREATH); + public static final CompatSoundEvent ENTITY_BREEZE_CHARGE = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_CHARGE); + public static final CompatSoundEvent ENTITY_BREEZE_DEFLECT = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_DEFLECT); + public static final CompatSoundEvent ENTITY_BREEZE_INHALE = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_INHALE); + public static final CompatSoundEvent ENTITY_BREEZE_IDLE_GROUND = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_IDLE_GROUND); + public static final CompatSoundEvent ENTITY_BREEZE_IDLE_AIR = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_IDLE_AIR); + public static final CompatSoundEvent ENTITY_BREEZE_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_SHOOT); + public static final CompatSoundEvent ENTITY_BREEZE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_JUMP); + public static final CompatSoundEvent ENTITY_BREEZE_LAND = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_LAND); + public static final CompatSoundEvent ENTITY_BREEZE_SLIDE = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_SLIDE); + public static final CompatSoundEvent ENTITY_BREEZE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_DEATH); + public static final CompatSoundEvent ENTITY_BREEZE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_HURT); + public static final CompatSoundEvent ENTITY_BREEZE_WHIRL = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_WHIRL); + public static final CompatSoundEvent ENTITY_BREEZE_WIND_BURST = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_WIND_BURST); + public static final CompatSoundEvent BLOCK_BREWING_STAND_BREW = new CompatSoundEvent(SoundEvents.BLOCK_BREWING_STAND_BREW); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GENERIC = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_GENERIC); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_SAND = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_SAND); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GRAVEL = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_GRAVEL); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_SAND_COMPLETE = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_SAND_COMPLETE); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GRAVEL_COMPLETE = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_GRAVEL_COMPLETE); + public static final CompatSoundEvent BLOCK_BUBBLE_COLUMN_BUBBLE_POP = new CompatSoundEvent(SoundEvents.BLOCK_BUBBLE_COLUMN_BUBBLE_POP); + public static final CompatSoundEvent BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT); + public static final CompatSoundEvent BLOCK_BUBBLE_COLUMN_UPWARDS_INSIDE = new CompatSoundEvent(SoundEvents.BLOCK_BUBBLE_COLUMN_UPWARDS_INSIDE); + public static final CompatSoundEvent BLOCK_BUBBLE_COLUMN_WHIRLPOOL_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_BUBBLE_COLUMN_WHIRLPOOL_AMBIENT); + public static final CompatSoundEvent BLOCK_BUBBLE_COLUMN_WHIRLPOOL_INSIDE = new CompatSoundEvent(SoundEvents.BLOCK_BUBBLE_COLUMN_WHIRLPOOL_INSIDE); + public static final CompatSoundEvent ITEM_BUCKET_EMPTY = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY); + public static final CompatSoundEvent ITEM_BUCKET_EMPTY_AXOLOTL = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_AXOLOTL); + public static final CompatSoundEvent ITEM_BUCKET_EMPTY_FISH = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_FISH); + public static final CompatSoundEvent ITEM_BUCKET_EMPTY_LAVA = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_LAVA); + public static final CompatSoundEvent ITEM_BUCKET_EMPTY_POWDER_SNOW = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_POWDER_SNOW); + public static final CompatSoundEvent ITEM_BUCKET_EMPTY_TADPOLE = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_TADPOLE); + public static final CompatSoundEvent ITEM_BUCKET_FILL = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL); + public static final CompatSoundEvent ITEM_BUCKET_FILL_AXOLOTL = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_AXOLOTL); + public static final CompatSoundEvent ITEM_BUCKET_FILL_FISH = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_FISH); + public static final CompatSoundEvent ITEM_BUCKET_FILL_LAVA = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_LAVA); + public static final CompatSoundEvent ITEM_BUCKET_FILL_POWDER_SNOW = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_POWDER_SNOW); + public static final CompatSoundEvent ITEM_BUCKET_FILL_TADPOLE = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_TADPOLE); + public static final CompatSoundEvent ITEM_BUNDLE_DROP_CONTENTS = new CompatSoundEvent(SoundEvents.ITEM_BUNDLE_DROP_CONTENTS); + public static final CompatSoundEvent ITEM_BUNDLE_INSERT = new CompatSoundEvent(SoundEvents.ITEM_BUNDLE_INSERT); + public static final CompatSoundEvent ITEM_BUNDLE_REMOVE_ONE = new CompatSoundEvent(SoundEvents.ITEM_BUNDLE_REMOVE_ONE); + public static final CompatSoundEvent BLOCK_CAKE_ADD_CANDLE = new CompatSoundEvent(SoundEvents.BLOCK_CAKE_ADD_CANDLE); + public static final CompatSoundEvent BLOCK_CALCITE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CALCITE_BREAK); + public static final CompatSoundEvent BLOCK_CALCITE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CALCITE_STEP); + public static final CompatSoundEvent BLOCK_CALCITE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CALCITE_PLACE); + public static final CompatSoundEvent BLOCK_CALCITE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CALCITE_HIT); + public static final CompatSoundEvent BLOCK_CALCITE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CALCITE_FALL); + public static final CompatSoundEvent ENTITY_CAMEL_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_AMBIENT); + public static final CompatSoundEvent ENTITY_CAMEL_DASH = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_DASH); + public static final CompatSoundEvent ENTITY_CAMEL_DASH_READY = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_DASH_READY); + public static final CompatSoundEvent ENTITY_CAMEL_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_DEATH); + public static final CompatSoundEvent ENTITY_CAMEL_EAT = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_EAT); + public static final CompatSoundEvent ENTITY_CAMEL_HURT = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_HURT); + public static final CompatSoundEvent ENTITY_CAMEL_SADDLE = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_SADDLE); + public static final CompatSoundEvent ENTITY_CAMEL_SIT = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_SIT); + public static final CompatSoundEvent ENTITY_CAMEL_STAND = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_STAND); + public static final CompatSoundEvent ENTITY_CAMEL_STEP = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_STEP); + public static final CompatSoundEvent ENTITY_CAMEL_STEP_SAND = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_STEP_SAND); + public static final CompatSoundEvent BLOCK_CAMPFIRE_CRACKLE = new CompatSoundEvent(SoundEvents.BLOCK_CAMPFIRE_CRACKLE); + public static final CompatSoundEvent BLOCK_CANDLE_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_AMBIENT); + public static final CompatSoundEvent BLOCK_CANDLE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_BREAK); + public static final CompatSoundEvent BLOCK_CANDLE_EXTINGUISH = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_EXTINGUISH); + public static final CompatSoundEvent BLOCK_CANDLE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_FALL); + public static final CompatSoundEvent BLOCK_CANDLE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_HIT); + public static final CompatSoundEvent BLOCK_CANDLE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_PLACE); + public static final CompatSoundEvent BLOCK_CANDLE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_STEP); + public static final CompatSoundEvent ENTITY_CAT_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_CAT_AMBIENT); + public static final CompatSoundEvent ENTITY_CAT_STRAY_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_CAT_STRAY_AMBIENT); + public static final CompatSoundEvent ENTITY_CAT_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_CAT_DEATH); + public static final CompatSoundEvent ENTITY_CAT_EAT = new CompatSoundEvent(SoundEvents.ENTITY_CAT_EAT); + public static final CompatSoundEvent ENTITY_CAT_HISS = new CompatSoundEvent(SoundEvents.ENTITY_CAT_HISS); + public static final CompatSoundEvent ENTITY_CAT_BEG_FOR_FOOD = new CompatSoundEvent(SoundEvents.ENTITY_CAT_BEG_FOR_FOOD); + public static final CompatSoundEvent ENTITY_CAT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_CAT_HURT); + public static final CompatSoundEvent ENTITY_CAT_PURR = new CompatSoundEvent(SoundEvents.ENTITY_CAT_PURR); + public static final CompatSoundEvent ENTITY_CAT_PURREOW = new CompatSoundEvent(SoundEvents.ENTITY_CAT_PURREOW); + public static final CompatSoundEvent BLOCK_CAVE_VINES_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CAVE_VINES_BREAK); + public static final CompatSoundEvent BLOCK_CAVE_VINES_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CAVE_VINES_FALL); + public static final CompatSoundEvent BLOCK_CAVE_VINES_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CAVE_VINES_HIT); + public static final CompatSoundEvent BLOCK_CAVE_VINES_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CAVE_VINES_PLACE); + public static final CompatSoundEvent BLOCK_CAVE_VINES_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CAVE_VINES_STEP); + public static final CompatSoundEvent BLOCK_CAVE_VINES_PICK_BERRIES = new CompatSoundEvent(SoundEvents.BLOCK_CAVE_VINES_PICK_BERRIES); + public static final CompatSoundEvent BLOCK_CHAIN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHAIN_BREAK); + public static final CompatSoundEvent BLOCK_CHAIN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHAIN_FALL); + public static final CompatSoundEvent BLOCK_CHAIN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHAIN_HIT); + public static final CompatSoundEvent BLOCK_CHAIN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHAIN_PLACE); + public static final CompatSoundEvent BLOCK_CHAIN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHAIN_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_FALL); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HIT); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_BREAK); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_FALL); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_HIT); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_PLACE); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_BREAK); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_FALL); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_HIT); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_PLACE); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_BREAK); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_FALL); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_HIT); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_PLACE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_DOOR_OPEN); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_BUTTON_CLICK_OFF); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_BUTTON_CLICK_ON); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_FENCE_GATE_CLOSE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_FENCE_GATE_OPEN); + public static final CompatSoundEvent BLOCK_CHEST_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_CHEST_CLOSE); + public static final CompatSoundEvent BLOCK_CHEST_LOCKED = new CompatSoundEvent(SoundEvents.BLOCK_CHEST_LOCKED); + public static final CompatSoundEvent BLOCK_CHEST_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_CHEST_OPEN); + public static final CompatSoundEvent ENTITY_CHICKEN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_AMBIENT); + public static final CompatSoundEvent ENTITY_CHICKEN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_DEATH); + public static final CompatSoundEvent ENTITY_CHICKEN_EGG = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_EGG); + public static final CompatSoundEvent ENTITY_CHICKEN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_HURT); + public static final CompatSoundEvent ENTITY_CHICKEN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_STEP); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_BREAK); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_FALL); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_HIT); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_INSERT = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_INSERT); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_INSERT_ENCHANTED = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_INSERT_ENCHANTED); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_STEP); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PICKUP = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_PICKUP); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PICKUP_ENCHANTED = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_PICKUP_ENCHANTED); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_PLACE); + public static final CompatSoundEvent BLOCK_CHORUS_FLOWER_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_CHORUS_FLOWER_DEATH); + public static final CompatSoundEvent BLOCK_CHORUS_FLOWER_GROW = new CompatSoundEvent(SoundEvents.BLOCK_CHORUS_FLOWER_GROW); + public static final CompatSoundEvent ITEM_CHORUS_FRUIT_TELEPORT = new CompatSoundEvent(SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT); + public static final CompatSoundEvent BLOCK_COBWEB_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_BREAK); + public static final CompatSoundEvent BLOCK_COBWEB_STEP = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_STEP); + public static final CompatSoundEvent BLOCK_COBWEB_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_PLACE); + public static final CompatSoundEvent BLOCK_COBWEB_HIT = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_HIT); + public static final CompatSoundEvent BLOCK_COBWEB_FALL = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_FALL); + public static final CompatSoundEvent ENTITY_COD_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_COD_AMBIENT); + public static final CompatSoundEvent ENTITY_COD_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_COD_DEATH); + public static final CompatSoundEvent ENTITY_COD_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_COD_FLOP); + public static final CompatSoundEvent ENTITY_COD_HURT = new CompatSoundEvent(SoundEvents.ENTITY_COD_HURT); + public static final CompatSoundEvent BLOCK_COMPARATOR_CLICK = new CompatSoundEvent(SoundEvents.BLOCK_COMPARATOR_CLICK); + public static final CompatSoundEvent BLOCK_COMPOSTER_EMPTY = new CompatSoundEvent(SoundEvents.BLOCK_COMPOSTER_EMPTY); + public static final CompatSoundEvent BLOCK_COMPOSTER_FILL = new CompatSoundEvent(SoundEvents.BLOCK_COMPOSTER_FILL); + public static final CompatSoundEvent BLOCK_COMPOSTER_FILL_SUCCESS = new CompatSoundEvent(SoundEvents.BLOCK_COMPOSTER_FILL_SUCCESS); + public static final CompatSoundEvent BLOCK_COMPOSTER_READY = new CompatSoundEvent(SoundEvents.BLOCK_COMPOSTER_READY); + public static final CompatSoundEvent BLOCK_CONDUIT_ACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_CONDUIT_ACTIVATE); + public static final CompatSoundEvent BLOCK_CONDUIT_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_CONDUIT_AMBIENT); + public static final CompatSoundEvent BLOCK_CONDUIT_AMBIENT_SHORT = new CompatSoundEvent(SoundEvents.BLOCK_CONDUIT_AMBIENT_SHORT); + public static final CompatSoundEvent BLOCK_CONDUIT_ATTACK_TARGET = new CompatSoundEvent(SoundEvents.BLOCK_CONDUIT_ATTACK_TARGET); + public static final CompatSoundEvent BLOCK_CONDUIT_DEACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_CONDUIT_DEACTIVATE); + public static final CompatSoundEvent BLOCK_COPPER_BULB_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_BREAK); + public static final CompatSoundEvent BLOCK_COPPER_BULB_STEP = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_STEP); + public static final CompatSoundEvent BLOCK_COPPER_BULB_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_PLACE); + public static final CompatSoundEvent BLOCK_COPPER_BULB_HIT = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_HIT); + public static final CompatSoundEvent BLOCK_COPPER_BULB_FALL = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_FALL); + public static final CompatSoundEvent BLOCK_COPPER_BULB_TURN_ON = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_TURN_ON); + public static final CompatSoundEvent BLOCK_COPPER_BULB_TURN_OFF = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_TURN_OFF); + public static final CompatSoundEvent BLOCK_COPPER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BREAK); + public static final CompatSoundEvent BLOCK_COPPER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_STEP); + public static final CompatSoundEvent BLOCK_COPPER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_PLACE); + public static final CompatSoundEvent BLOCK_COPPER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_HIT); + public static final CompatSoundEvent BLOCK_COPPER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_FALL); + public static final CompatSoundEvent BLOCK_COPPER_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_COPPER_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_DOOR_OPEN); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_BREAK); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_STEP); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_PLACE); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_FALL); + public static final CompatSoundEvent BLOCK_COPPER_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_COPPER_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_CORAL_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CORAL_BLOCK_BREAK); + public static final CompatSoundEvent BLOCK_CORAL_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CORAL_BLOCK_FALL); + public static final CompatSoundEvent BLOCK_CORAL_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CORAL_BLOCK_HIT); + public static final CompatSoundEvent BLOCK_CORAL_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CORAL_BLOCK_PLACE); + public static final CompatSoundEvent BLOCK_CORAL_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CORAL_BLOCK_STEP); + public static final CompatSoundEvent ENTITY_COW_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_COW_AMBIENT); + public static final CompatSoundEvent ENTITY_COW_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_COW_DEATH); + public static final CompatSoundEvent ENTITY_COW_HURT = new CompatSoundEvent(SoundEvents.ENTITY_COW_HURT); + public static final CompatSoundEvent ENTITY_COW_MILK = new CompatSoundEvent(SoundEvents.ENTITY_COW_MILK); + public static final CompatSoundEvent ENTITY_COW_STEP = new CompatSoundEvent(SoundEvents.ENTITY_COW_STEP); + public static final CompatSoundEvent BLOCK_CRAFTER_CRAFT = new CompatSoundEvent(SoundEvents.BLOCK_CRAFTER_CRAFT); + public static final CompatSoundEvent BLOCK_CRAFTER_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_CRAFTER_FAIL); + public static final CompatSoundEvent ENTITY_CREEPER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_CREEPER_DEATH); + public static final CompatSoundEvent ENTITY_CREEPER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_CREEPER_HURT); + public static final CompatSoundEvent ENTITY_CREEPER_PRIMED = new CompatSoundEvent(SoundEvents.ENTITY_CREEPER_PRIMED); + public static final CompatSoundEvent BLOCK_CROP_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CROP_BREAK); + public static final CompatSoundEvent ITEM_CROP_PLANT = new CompatSoundEvent(SoundEvents.ITEM_CROP_PLANT); + public static final CompatSoundEvent ITEM_CROSSBOW_HIT = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_HIT); + public static final CompatSoundEvent ITEM_CROSSBOW_LOADING_END = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_LOADING_END); + public static final CompatSoundEvent ITEM_CROSSBOW_LOADING_MIDDLE = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_LOADING_MIDDLE); + public static final CompatSoundEvent ITEM_CROSSBOW_LOADING_START = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_LOADING_START); + public static final CompatSoundEvent ITEM_CROSSBOW_QUICK_CHARGE_1 = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_QUICK_CHARGE_1); + public static final CompatSoundEvent ITEM_CROSSBOW_QUICK_CHARGE_2 = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_QUICK_CHARGE_2); + public static final CompatSoundEvent ITEM_CROSSBOW_QUICK_CHARGE_3 = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_QUICK_CHARGE_3); + public static final CompatSoundEvent ITEM_CROSSBOW_SHOOT = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_SHOOT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_BREAK); + public static final CompatSoundEvent BLOCK_DECORATED_POT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_FALL); + public static final CompatSoundEvent BLOCK_DECORATED_POT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_HIT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_INSERT = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_INSERT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_INSERT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_INSERT_FAIL); + public static final CompatSoundEvent BLOCK_DECORATED_POT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_STEP); + public static final CompatSoundEvent BLOCK_DECORATED_POT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_PLACE); + public static final CompatSoundEvent BLOCK_DECORATED_POT_SHATTER = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_SHATTER); + public static final CompatSoundEvent BLOCK_DEEPSLATE_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_BREAK); + public static final CompatSoundEvent BLOCK_DEEPSLATE_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_FALL); + public static final CompatSoundEvent BLOCK_DEEPSLATE_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_HIT); + public static final CompatSoundEvent BLOCK_DEEPSLATE_BRICKS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_PLACE); + public static final CompatSoundEvent BLOCK_DEEPSLATE_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_STEP); + public static final CompatSoundEvent BLOCK_DEEPSLATE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BREAK); + public static final CompatSoundEvent BLOCK_DEEPSLATE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_FALL); + public static final CompatSoundEvent BLOCK_DEEPSLATE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_HIT); + public static final CompatSoundEvent BLOCK_DEEPSLATE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_PLACE); + public static final CompatSoundEvent BLOCK_DEEPSLATE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_STEP); + public static final CompatSoundEvent BLOCK_DEEPSLATE_TILES_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_TILES_BREAK); + public static final CompatSoundEvent BLOCK_DEEPSLATE_TILES_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_TILES_FALL); + public static final CompatSoundEvent BLOCK_DEEPSLATE_TILES_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_TILES_HIT); + public static final CompatSoundEvent BLOCK_DEEPSLATE_TILES_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_TILES_PLACE); + public static final CompatSoundEvent BLOCK_DEEPSLATE_TILES_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_TILES_STEP); + public static final CompatSoundEvent BLOCK_DISPENSER_DISPENSE = new CompatSoundEvent(SoundEvents.BLOCK_DISPENSER_DISPENSE); + public static final CompatSoundEvent BLOCK_DISPENSER_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_DISPENSER_FAIL); + public static final CompatSoundEvent BLOCK_DISPENSER_LAUNCH = new CompatSoundEvent(SoundEvents.BLOCK_DISPENSER_LAUNCH); + public static final CompatSoundEvent ENTITY_DOLPHIN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_AMBIENT); + public static final CompatSoundEvent ENTITY_DOLPHIN_AMBIENT_WATER = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_AMBIENT_WATER); + public static final CompatSoundEvent ENTITY_DOLPHIN_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_ATTACK); + public static final CompatSoundEvent ENTITY_DOLPHIN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_DEATH); + public static final CompatSoundEvent ENTITY_DOLPHIN_EAT = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_EAT); + public static final CompatSoundEvent ENTITY_DOLPHIN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_HURT); + public static final CompatSoundEvent ENTITY_DOLPHIN_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_JUMP); + public static final CompatSoundEvent ENTITY_DOLPHIN_PLAY = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_PLAY); + public static final CompatSoundEvent ENTITY_DOLPHIN_SPLASH = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_SPLASH); + public static final CompatSoundEvent ENTITY_DOLPHIN_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_DOLPHIN_SWIM); + public static final CompatSoundEvent ENTITY_DONKEY_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_AMBIENT); + public static final CompatSoundEvent ENTITY_DONKEY_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_ANGRY); + public static final CompatSoundEvent ENTITY_DONKEY_CHEST = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_CHEST); + public static final CompatSoundEvent ENTITY_DONKEY_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_DEATH); + public static final CompatSoundEvent ENTITY_DONKEY_EAT = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); + public static final CompatSoundEvent ENTITY_DONKEY_HURT = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_HURT); + public static final CompatSoundEvent ENTITY_DONKEY_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_JUMP); + public static final CompatSoundEvent BLOCK_DRIPSTONE_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DRIPSTONE_BLOCK_BREAK); + public static final CompatSoundEvent BLOCK_DRIPSTONE_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DRIPSTONE_BLOCK_STEP); + public static final CompatSoundEvent BLOCK_DRIPSTONE_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DRIPSTONE_BLOCK_PLACE); + public static final CompatSoundEvent BLOCK_DRIPSTONE_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DRIPSTONE_BLOCK_HIT); + public static final CompatSoundEvent BLOCK_DRIPSTONE_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DRIPSTONE_BLOCK_FALL); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_BREAK); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_STEP); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_PLACE); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_HIT); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_FALL); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_LAND = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_LAND); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_DRIP_LAVA = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_DRIP_LAVA); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_DRIP_WATER = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_DRIP_WATER); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_DRIP_LAVA_INTO_CAULDRON = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_DRIP_LAVA_INTO_CAULDRON); + public static final CompatSoundEvent BLOCK_POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON = new CompatSoundEvent(SoundEvents.BLOCK_POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON); + public static final CompatSoundEvent BLOCK_BIG_DRIPLEAF_TILT_DOWN = new CompatSoundEvent(SoundEvents.BLOCK_BIG_DRIPLEAF_TILT_DOWN); + public static final CompatSoundEvent BLOCK_BIG_DRIPLEAF_TILT_UP = new CompatSoundEvent(SoundEvents.BLOCK_BIG_DRIPLEAF_TILT_UP); + public static final CompatSoundEvent ENTITY_DROWNED_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_AMBIENT); + public static final CompatSoundEvent ENTITY_DROWNED_AMBIENT_WATER = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_AMBIENT_WATER); + public static final CompatSoundEvent ENTITY_DROWNED_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_DEATH); + public static final CompatSoundEvent ENTITY_DROWNED_DEATH_WATER = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_DEATH_WATER); + public static final CompatSoundEvent ENTITY_DROWNED_HURT = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_HURT); + public static final CompatSoundEvent ENTITY_DROWNED_HURT_WATER = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_HURT_WATER); + public static final CompatSoundEvent ENTITY_DROWNED_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_SHOOT); + public static final CompatSoundEvent ENTITY_DROWNED_STEP = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_STEP); + public static final CompatSoundEvent ENTITY_DROWNED_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_DROWNED_SWIM); + public static final CompatSoundEvent ITEM_DYE_USE = new CompatSoundEvent(SoundEvents.ITEM_DYE_USE); + public static final CompatSoundEvent ENTITY_EGG_THROW = new CompatSoundEvent(SoundEvents.ENTITY_EGG_THROW); + public static final CompatSoundEvent ENTITY_ELDER_GUARDIAN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ELDER_GUARDIAN_AMBIENT); + public static final CompatSoundEvent ENTITY_ELDER_GUARDIAN_AMBIENT_LAND = new CompatSoundEvent(SoundEvents.ENTITY_ELDER_GUARDIAN_AMBIENT_LAND); + public static final CompatSoundEvent ENTITY_ELDER_GUARDIAN_CURSE = new CompatSoundEvent(SoundEvents.ENTITY_ELDER_GUARDIAN_CURSE); + public static final CompatSoundEvent ENTITY_ELDER_GUARDIAN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ELDER_GUARDIAN_DEATH); + public static final CompatSoundEvent ENTITY_ELDER_GUARDIAN_DEATH_LAND = new CompatSoundEvent(SoundEvents.ENTITY_ELDER_GUARDIAN_DEATH_LAND); + public static final CompatSoundEvent ENTITY_ELDER_GUARDIAN_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_ELDER_GUARDIAN_FLOP); + public static final CompatSoundEvent ENTITY_ELDER_GUARDIAN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ELDER_GUARDIAN_HURT); + public static final CompatSoundEvent ENTITY_ELDER_GUARDIAN_HURT_LAND = new CompatSoundEvent(SoundEvents.ENTITY_ELDER_GUARDIAN_HURT_LAND); + public static final CompatSoundEvent ITEM_ELYTRA_FLYING = new CompatSoundEvent(SoundEvents.ITEM_ELYTRA_FLYING); + public static final CompatSoundEvent BLOCK_ENCHANTMENT_TABLE_USE = new CompatSoundEvent(SoundEvents.BLOCK_ENCHANTMENT_TABLE_USE); + public static final CompatSoundEvent BLOCK_ENDER_CHEST_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_ENDER_CHEST_CLOSE); + public static final CompatSoundEvent BLOCK_ENDER_CHEST_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_ENDER_CHEST_OPEN); + public static final CompatSoundEvent ENTITY_ENDER_DRAGON_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_DRAGON_AMBIENT); + public static final CompatSoundEvent ENTITY_ENDER_DRAGON_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_DRAGON_DEATH); + public static final CompatSoundEvent ENTITY_DRAGON_FIREBALL_EXPLODE = new CompatSoundEvent(SoundEvents.ENTITY_DRAGON_FIREBALL_EXPLODE); + public static final CompatSoundEvent ENTITY_ENDER_DRAGON_FLAP = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_DRAGON_FLAP); + public static final CompatSoundEvent ENTITY_ENDER_DRAGON_GROWL = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_DRAGON_GROWL); + public static final CompatSoundEvent ENTITY_ENDER_DRAGON_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_DRAGON_HURT); + public static final CompatSoundEvent ENTITY_ENDER_DRAGON_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_DRAGON_SHOOT); + public static final CompatSoundEvent ENTITY_ENDER_EYE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_EYE_DEATH); + public static final CompatSoundEvent ENTITY_ENDER_EYE_LAUNCH = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_EYE_LAUNCH); + public static final CompatSoundEvent ENTITY_ENDERMAN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMAN_AMBIENT); + public static final CompatSoundEvent ENTITY_ENDERMAN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMAN_DEATH); + public static final CompatSoundEvent ENTITY_ENDERMAN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMAN_HURT); + public static final CompatSoundEvent ENTITY_ENDERMAN_SCREAM = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMAN_SCREAM); + public static final CompatSoundEvent ENTITY_ENDERMAN_STARE = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMAN_STARE); + public static final CompatSoundEvent ENTITY_ENDERMAN_TELEPORT = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMAN_TELEPORT); + public static final CompatSoundEvent ENTITY_ENDERMITE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMITE_AMBIENT); + public static final CompatSoundEvent ENTITY_ENDERMITE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMITE_DEATH); + public static final CompatSoundEvent ENTITY_ENDERMITE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMITE_HURT); + public static final CompatSoundEvent ENTITY_ENDERMITE_STEP = new CompatSoundEvent(SoundEvents.ENTITY_ENDERMITE_STEP); + public static final CompatSoundEvent ENTITY_ENDER_PEARL_THROW = new CompatSoundEvent(SoundEvents.ENTITY_ENDER_PEARL_THROW); + public static final CompatSoundEvent BLOCK_END_GATEWAY_SPAWN = new CompatSoundEvent(SoundEvents.BLOCK_END_GATEWAY_SPAWN); + public static final CompatSoundEvent BLOCK_END_PORTAL_FRAME_FILL = new CompatSoundEvent(SoundEvents.BLOCK_END_PORTAL_FRAME_FILL); + public static final CompatSoundEvent BLOCK_END_PORTAL_SPAWN = new CompatSoundEvent(SoundEvents.BLOCK_END_PORTAL_SPAWN); + public static final CompatSoundEvent ENTITY_EVOKER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_AMBIENT); + public static final CompatSoundEvent ENTITY_EVOKER_CAST_SPELL = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_CAST_SPELL); + public static final CompatSoundEvent ENTITY_EVOKER_CELEBRATE = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_CELEBRATE); + public static final CompatSoundEvent ENTITY_EVOKER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_DEATH); + public static final CompatSoundEvent ENTITY_EVOKER_FANGS_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_FANGS_ATTACK); + public static final CompatSoundEvent ENTITY_EVOKER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_HURT); + public static final CompatSoundEvent ENTITY_EVOKER_PREPARE_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_PREPARE_ATTACK); + public static final CompatSoundEvent ENTITY_EVOKER_PREPARE_SUMMON = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_PREPARE_SUMMON); + public static final CompatSoundEvent ENTITY_EVOKER_PREPARE_WOLOLO = new CompatSoundEvent(SoundEvents.ENTITY_EVOKER_PREPARE_WOLOLO); + public static final CompatSoundEvent ENTITY_EXPERIENCE_BOTTLE_THROW = new CompatSoundEvent(SoundEvents.ENTITY_EXPERIENCE_BOTTLE_THROW); + public static final CompatSoundEvent ENTITY_EXPERIENCE_ORB_PICKUP = new CompatSoundEvent(SoundEvents.ENTITY_EXPERIENCE_ORB_PICKUP); + public static final CompatSoundEvent BLOCK_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_CLOSE); + public static final CompatSoundEvent BLOCK_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_OPEN); + public static final CompatSoundEvent ITEM_FIRECHARGE_USE = new CompatSoundEvent(SoundEvents.ITEM_FIRECHARGE_USE); + public static final CompatSoundEvent ENTITY_FIREWORK_ROCKET_BLAST = new CompatSoundEvent(SoundEvents.ENTITY_FIREWORK_ROCKET_BLAST); + public static final CompatSoundEvent ENTITY_FIREWORK_ROCKET_BLAST_FAR = new CompatSoundEvent(SoundEvents.ENTITY_FIREWORK_ROCKET_BLAST_FAR); + public static final CompatSoundEvent ENTITY_FIREWORK_ROCKET_LARGE_BLAST = new CompatSoundEvent(SoundEvents.ENTITY_FIREWORK_ROCKET_LARGE_BLAST); + public static final CompatSoundEvent ENTITY_FIREWORK_ROCKET_LARGE_BLAST_FAR = new CompatSoundEvent(SoundEvents.ENTITY_FIREWORK_ROCKET_LARGE_BLAST_FAR); + public static final CompatSoundEvent ENTITY_FIREWORK_ROCKET_LAUNCH = new CompatSoundEvent(SoundEvents.ENTITY_FIREWORK_ROCKET_LAUNCH); + public static final CompatSoundEvent ENTITY_FIREWORK_ROCKET_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_FIREWORK_ROCKET_SHOOT); + public static final CompatSoundEvent ENTITY_FIREWORK_ROCKET_TWINKLE = new CompatSoundEvent(SoundEvents.ENTITY_FIREWORK_ROCKET_TWINKLE); + public static final CompatSoundEvent ENTITY_FIREWORK_ROCKET_TWINKLE_FAR = new CompatSoundEvent(SoundEvents.ENTITY_FIREWORK_ROCKET_TWINKLE_FAR); + public static final CompatSoundEvent BLOCK_FIRE_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_FIRE_AMBIENT); + public static final CompatSoundEvent BLOCK_FIRE_EXTINGUISH = new CompatSoundEvent(SoundEvents.BLOCK_FIRE_EXTINGUISH); + public static final CompatSoundEvent ENTITY_FISH_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_FISH_SWIM); + public static final CompatSoundEvent ENTITY_FISHING_BOBBER_RETRIEVE = new CompatSoundEvent(SoundEvents.ENTITY_FISHING_BOBBER_RETRIEVE); + public static final CompatSoundEvent ENTITY_FISHING_BOBBER_SPLASH = new CompatSoundEvent(SoundEvents.ENTITY_FISHING_BOBBER_SPLASH); + public static final CompatSoundEvent ENTITY_FISHING_BOBBER_THROW = new CompatSoundEvent(SoundEvents.ENTITY_FISHING_BOBBER_THROW); + public static final CompatSoundEvent ITEM_FLINTANDSTEEL_USE = new CompatSoundEvent(SoundEvents.ITEM_FLINTANDSTEEL_USE); + public static final CompatSoundEvent BLOCK_FLOWERING_AZALEA_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_FLOWERING_AZALEA_BREAK); + public static final CompatSoundEvent BLOCK_FLOWERING_AZALEA_FALL = new CompatSoundEvent(SoundEvents.BLOCK_FLOWERING_AZALEA_FALL); + public static final CompatSoundEvent BLOCK_FLOWERING_AZALEA_HIT = new CompatSoundEvent(SoundEvents.BLOCK_FLOWERING_AZALEA_HIT); + public static final CompatSoundEvent BLOCK_FLOWERING_AZALEA_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_FLOWERING_AZALEA_PLACE); + public static final CompatSoundEvent BLOCK_FLOWERING_AZALEA_STEP = new CompatSoundEvent(SoundEvents.BLOCK_FLOWERING_AZALEA_STEP); + public static final CompatSoundEvent ENTITY_FOX_AGGRO = new CompatSoundEvent(SoundEvents.ENTITY_FOX_AGGRO); + public static final CompatSoundEvent ENTITY_FOX_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_FOX_AMBIENT); + public static final CompatSoundEvent ENTITY_FOX_BITE = new CompatSoundEvent(SoundEvents.ENTITY_FOX_BITE); + public static final CompatSoundEvent ENTITY_FOX_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_FOX_DEATH); + public static final CompatSoundEvent ENTITY_FOX_EAT = new CompatSoundEvent(SoundEvents.ENTITY_FOX_EAT); + public static final CompatSoundEvent ENTITY_FOX_HURT = new CompatSoundEvent(SoundEvents.ENTITY_FOX_HURT); + public static final CompatSoundEvent ENTITY_FOX_SCREECH = new CompatSoundEvent(SoundEvents.ENTITY_FOX_SCREECH); + public static final CompatSoundEvent ENTITY_FOX_SLEEP = new CompatSoundEvent(SoundEvents.ENTITY_FOX_SLEEP); + public static final CompatSoundEvent ENTITY_FOX_SNIFF = new CompatSoundEvent(SoundEvents.ENTITY_FOX_SNIFF); + public static final CompatSoundEvent ENTITY_FOX_SPIT = new CompatSoundEvent(SoundEvents.ENTITY_FOX_SPIT); + public static final CompatSoundEvent ENTITY_FOX_TELEPORT = new CompatSoundEvent(SoundEvents.ENTITY_FOX_TELEPORT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_BREAK); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_STEP); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_PLACE); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_FALL); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_BREAK); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_STEP); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_PLACE); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_FALL); + public static final CompatSoundEvent BLOCK_FROGLIGHT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_BREAK); + public static final CompatSoundEvent BLOCK_FROGLIGHT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_FALL); + public static final CompatSoundEvent BLOCK_FROGLIGHT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_HIT); + public static final CompatSoundEvent BLOCK_FROGLIGHT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_PLACE); + public static final CompatSoundEvent BLOCK_FROGLIGHT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_STEP); + public static final CompatSoundEvent BLOCK_FROGSPAWN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_STEP); + public static final CompatSoundEvent BLOCK_FROGSPAWN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_BREAK); + public static final CompatSoundEvent BLOCK_FROGSPAWN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_FALL); + public static final CompatSoundEvent BLOCK_FROGSPAWN_HATCH = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_HATCH); + public static final CompatSoundEvent BLOCK_FROGSPAWN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_HIT); + public static final CompatSoundEvent BLOCK_FROGSPAWN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_PLACE); + public static final CompatSoundEvent ENTITY_FROG_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_FROG_AMBIENT); + public static final CompatSoundEvent ENTITY_FROG_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_FROG_DEATH); + public static final CompatSoundEvent ENTITY_FROG_EAT = new CompatSoundEvent(SoundEvents.ENTITY_FROG_EAT); + public static final CompatSoundEvent ENTITY_FROG_HURT = new CompatSoundEvent(SoundEvents.ENTITY_FROG_HURT); + public static final CompatSoundEvent ENTITY_FROG_LAY_SPAWN = new CompatSoundEvent(SoundEvents.ENTITY_FROG_LAY_SPAWN); + public static final CompatSoundEvent ENTITY_FROG_LONG_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_FROG_LONG_JUMP); + public static final CompatSoundEvent ENTITY_FROG_STEP = new CompatSoundEvent(SoundEvents.ENTITY_FROG_STEP); + public static final CompatSoundEvent ENTITY_FROG_TONGUE = new CompatSoundEvent(SoundEvents.ENTITY_FROG_TONGUE); + public static final CompatSoundEvent BLOCK_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_ROOTS_BREAK); + public static final CompatSoundEvent BLOCK_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_ROOTS_STEP); + public static final CompatSoundEvent BLOCK_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_ROOTS_PLACE); + public static final CompatSoundEvent BLOCK_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_ROOTS_HIT); + public static final CompatSoundEvent BLOCK_ROOTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_ROOTS_FALL); + public static final CompatSoundEvent BLOCK_FURNACE_FIRE_CRACKLE = new CompatSoundEvent(SoundEvents.BLOCK_FURNACE_FIRE_CRACKLE); + public static final CompatSoundEvent ENTITY_GENERIC_BIG_FALL = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_BIG_FALL); + public static final CompatSoundEvent ENTITY_GENERIC_BURN = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_BURN); + public static final CompatSoundEvent ENTITY_GENERIC_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_DEATH); + public static final CompatSoundEvent ENTITY_GENERIC_DRINK = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_DRINK); + public static final CompatSoundEvent ENTITY_GENERIC_EAT = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_EAT); + public static final CompatSoundEvent ENTITY_GENERIC_EXPLODE = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_EXPLODE); + public static final CompatSoundEvent ENTITY_GENERIC_EXTINGUISH_FIRE = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE); + public static final CompatSoundEvent ENTITY_GENERIC_HURT = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_HURT); + public static final CompatSoundEvent ENTITY_GENERIC_SMALL_FALL = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_SMALL_FALL); + public static final CompatSoundEvent ENTITY_GENERIC_SPLASH = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_SPLASH); + public static final CompatSoundEvent ENTITY_GENERIC_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_GENERIC_SWIM); + public static final CompatSoundEvent ENTITY_GHAST_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_AMBIENT); + public static final CompatSoundEvent ENTITY_GHAST_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_DEATH); + public static final CompatSoundEvent ENTITY_GHAST_HURT = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_HURT); + public static final CompatSoundEvent ENTITY_GHAST_SCREAM = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_SCREAM); + public static final CompatSoundEvent ENTITY_GHAST_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_SHOOT); + public static final CompatSoundEvent ENTITY_GHAST_WARN = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_WARN); + public static final CompatSoundEvent BLOCK_GILDED_BLACKSTONE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_GILDED_BLACKSTONE_BREAK); + public static final CompatSoundEvent BLOCK_GILDED_BLACKSTONE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_GILDED_BLACKSTONE_FALL); + public static final CompatSoundEvent BLOCK_GILDED_BLACKSTONE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_GILDED_BLACKSTONE_HIT); + public static final CompatSoundEvent BLOCK_GILDED_BLACKSTONE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_GILDED_BLACKSTONE_PLACE); + public static final CompatSoundEvent BLOCK_GILDED_BLACKSTONE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_GILDED_BLACKSTONE_STEP); + public static final CompatSoundEvent BLOCK_GLASS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_GLASS_BREAK); + public static final CompatSoundEvent BLOCK_GLASS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_GLASS_FALL); + public static final CompatSoundEvent BLOCK_GLASS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_GLASS_HIT); + public static final CompatSoundEvent BLOCK_GLASS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_GLASS_PLACE); + public static final CompatSoundEvent BLOCK_GLASS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_GLASS_STEP); + public static final CompatSoundEvent ITEM_GLOW_INK_SAC_USE = new CompatSoundEvent(SoundEvents.ITEM_GLOW_INK_SAC_USE); + public static final CompatSoundEvent ENTITY_GLOW_ITEM_FRAME_ADD_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_ITEM_FRAME_ADD_ITEM); + public static final CompatSoundEvent ENTITY_GLOW_ITEM_FRAME_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_ITEM_FRAME_BREAK); + public static final CompatSoundEvent ENTITY_GLOW_ITEM_FRAME_PLACE = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_ITEM_FRAME_PLACE); + public static final CompatSoundEvent ENTITY_GLOW_ITEM_FRAME_REMOVE_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_ITEM_FRAME_REMOVE_ITEM); + public static final CompatSoundEvent ENTITY_GLOW_ITEM_FRAME_ROTATE_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_ITEM_FRAME_ROTATE_ITEM); + public static final CompatSoundEvent ENTITY_GLOW_SQUID_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_SQUID_AMBIENT); + public static final CompatSoundEvent ENTITY_GLOW_SQUID_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_SQUID_DEATH); + public static final CompatSoundEvent ENTITY_GLOW_SQUID_HURT = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_SQUID_HURT); + public static final CompatSoundEvent ENTITY_GLOW_SQUID_SQUIRT = new CompatSoundEvent(SoundEvents.ENTITY_GLOW_SQUID_SQUIRT); + public static final CompatSoundEvent ENTITY_GOAT_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_AMBIENT); + public static final CompatSoundEvent ENTITY_GOAT_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_DEATH); + public static final CompatSoundEvent ENTITY_GOAT_EAT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_EAT); + public static final CompatSoundEvent ENTITY_GOAT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_HURT); + public static final CompatSoundEvent ENTITY_GOAT_LONG_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_LONG_JUMP); + public static final CompatSoundEvent ENTITY_GOAT_MILK = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_MILK); + public static final CompatSoundEvent ENTITY_GOAT_PREPARE_RAM = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_PREPARE_RAM); + public static final CompatSoundEvent ENTITY_GOAT_RAM_IMPACT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_RAM_IMPACT); + public static final CompatSoundEvent ENTITY_GOAT_HORN_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_HORN_BREAK); + public static final CompatSoundEvent ITEM_GOAT_HORN_PLAY = new CompatSoundEvent(SoundEvents.ITEM_GOAT_HORN_PLAY); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_AMBIENT); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_DEATH); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_EAT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_EAT); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_HURT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_HURT); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_LONG_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_LONG_JUMP); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_MILK = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_MILK); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_PREPARE_RAM = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_PREPARE_RAM); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_RAM_IMPACT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_RAM_IMPACT); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_HORN_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_HORN_BREAK); + public static final CompatSoundEvent ENTITY_GOAT_STEP = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_STEP); + public static final CompatSoundEvent BLOCK_GRASS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_BREAK); + public static final CompatSoundEvent BLOCK_GRASS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_FALL); + public static final CompatSoundEvent BLOCK_GRASS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent BLOCK_GRASS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_PLACE); + public static final CompatSoundEvent BLOCK_GRASS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_STEP); + public static final CompatSoundEvent BLOCK_GRAVEL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_GRAVEL_BREAK); + public static final CompatSoundEvent BLOCK_GRAVEL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_GRAVEL_FALL); + public static final CompatSoundEvent BLOCK_GRAVEL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_GRAVEL_HIT); + public static final CompatSoundEvent BLOCK_GRAVEL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_GRAVEL_PLACE); + public static final CompatSoundEvent BLOCK_GRAVEL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_GRAVEL_STEP); + public static final CompatSoundEvent BLOCK_GRINDSTONE_USE = new CompatSoundEvent(SoundEvents.BLOCK_GRINDSTONE_USE); + public static final CompatSoundEvent BLOCK_GROWING_PLANT_CROP = new CompatSoundEvent(SoundEvents.BLOCK_GROWING_PLANT_CROP); + public static final CompatSoundEvent ENTITY_GUARDIAN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_GUARDIAN_AMBIENT); + public static final CompatSoundEvent ENTITY_GUARDIAN_AMBIENT_LAND = new CompatSoundEvent(SoundEvents.ENTITY_GUARDIAN_AMBIENT_LAND); + public static final CompatSoundEvent ENTITY_GUARDIAN_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_GUARDIAN_ATTACK); + public static final CompatSoundEvent ENTITY_GUARDIAN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_GUARDIAN_DEATH); + public static final CompatSoundEvent ENTITY_GUARDIAN_DEATH_LAND = new CompatSoundEvent(SoundEvents.ENTITY_GUARDIAN_DEATH_LAND); + public static final CompatSoundEvent ENTITY_GUARDIAN_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_GUARDIAN_FLOP); + public static final CompatSoundEvent ENTITY_GUARDIAN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_GUARDIAN_HURT); + public static final CompatSoundEvent ENTITY_GUARDIAN_HURT_LAND = new CompatSoundEvent(SoundEvents.ENTITY_GUARDIAN_HURT_LAND); + public static final CompatSoundEvent BLOCK_HANGING_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_ROOTS_BREAK); + public static final CompatSoundEvent BLOCK_HANGING_ROOTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_ROOTS_FALL); + public static final CompatSoundEvent BLOCK_HANGING_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_ROOTS_HIT); + public static final CompatSoundEvent BLOCK_HANGING_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_ROOTS_PLACE); + public static final CompatSoundEvent BLOCK_HANGING_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_ROOTS_STEP); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_STEP); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_BREAK); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_FALL); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_HIT); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_PLACE); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_BREAK); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_FALL); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_HIT); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_PLACE); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_STEP); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_STEP); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_FALL); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_HIT); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_PLACE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_STEP); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_BREAK); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_BREAK); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_STEP); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_PLACE); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_FALL); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_MOB = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_SPAWN_MOB); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_ABOUT_TO_SPAWN_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_ABOUT_TO_SPAWN_ITEM); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_SPAWN_ITEM); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_ITEM_BEGIN = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_SPAWN_ITEM_BEGIN); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_DETECT_PLAYER = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_DETECT_PLAYER); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_OMINOUS_ACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_OMINOUS_ACTIVATE); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_AMBIENT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_AMBIENT_OMINOUS = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_AMBIENT_OMINOUS); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_OPEN_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_OPEN_SHUTTER); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_CLOSE_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_CLOSE_SHUTTER); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_EJECT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_EJECT_ITEM); + public static final CompatSoundEvent ITEM_HOE_TILL = new CompatSoundEvent(SoundEvents.ITEM_HOE_TILL); + public static final CompatSoundEvent ENTITY_HOGLIN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_AMBIENT); + public static final CompatSoundEvent ENTITY_HOGLIN_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_ANGRY); + public static final CompatSoundEvent ENTITY_HOGLIN_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_ATTACK); + public static final CompatSoundEvent ENTITY_HOGLIN_CONVERTED_TO_ZOMBIFIED = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_CONVERTED_TO_ZOMBIFIED); + public static final CompatSoundEvent ENTITY_HOGLIN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_DEATH); + public static final CompatSoundEvent ENTITY_HOGLIN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_HURT); + public static final CompatSoundEvent ENTITY_HOGLIN_RETREAT = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_RETREAT); + public static final CompatSoundEvent ENTITY_HOGLIN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_STEP); + public static final CompatSoundEvent BLOCK_HONEY_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_HONEY_BLOCK_BREAK); + public static final CompatSoundEvent BLOCK_HONEY_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_HONEY_BLOCK_FALL); + public static final CompatSoundEvent BLOCK_HONEY_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_HONEY_BLOCK_HIT); + public static final CompatSoundEvent BLOCK_HONEY_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_HONEY_BLOCK_PLACE); + public static final CompatSoundEvent BLOCK_HONEY_BLOCK_SLIDE = new CompatSoundEvent(SoundEvents.BLOCK_HONEY_BLOCK_SLIDE); + public static final CompatSoundEvent BLOCK_HONEY_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_HONEY_BLOCK_STEP); + public static final CompatSoundEvent ITEM_HONEYCOMB_WAX_ON = new CompatSoundEvent(SoundEvents.ITEM_HONEYCOMB_WAX_ON); + public static final CompatSoundEvent ITEM_HONEY_BOTTLE_DRINK = new CompatSoundEvent(SoundEvents.ITEM_HONEY_BOTTLE_DRINK); + public static final int GOAT_HORN_SOUNDS_COUNT = SoundEvents.GOAT_HORN_SOUND_COUNT; + public static final ImmutableList GOAT_HORN_SOUNDS; + public static final CompatSoundEvent ENTITY_HORSE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_AMBIENT); + public static final CompatSoundEvent ENTITY_HORSE_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_ANGRY); + public static final CompatSoundEvent ENTITY_HORSE_ARMOR = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_ARMOR); + public static final CompatSoundEvent ENTITY_HORSE_BREATHE = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_BREATHE); + public static final CompatSoundEvent ENTITY_HORSE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_DEATH); + public static final CompatSoundEvent ENTITY_HORSE_EAT = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_EAT); + public static final CompatSoundEvent ENTITY_HORSE_GALLOP = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_GALLOP); + public static final CompatSoundEvent ENTITY_HORSE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_HURT); + public static final CompatSoundEvent ENTITY_HORSE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_JUMP); + public static final CompatSoundEvent ENTITY_HORSE_LAND = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_LAND); + public static final CompatSoundEvent ENTITY_HORSE_SADDLE = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_SADDLE); + public static final CompatSoundEvent ENTITY_HORSE_STEP = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_STEP); + public static final CompatSoundEvent ENTITY_HORSE_STEP_WOOD = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_STEP_WOOD); + public static final CompatSoundEvent ENTITY_HOSTILE_BIG_FALL = new CompatSoundEvent(SoundEvents.ENTITY_HOSTILE_BIG_FALL); + public static final CompatSoundEvent ENTITY_HOSTILE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_HOSTILE_DEATH); + public static final CompatSoundEvent ENTITY_HOSTILE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_HOSTILE_HURT); + public static final CompatSoundEvent ENTITY_HOSTILE_SMALL_FALL = new CompatSoundEvent(SoundEvents.ENTITY_HOSTILE_SMALL_FALL); + public static final CompatSoundEvent ENTITY_HOSTILE_SPLASH = new CompatSoundEvent(SoundEvents.ENTITY_HOSTILE_SPLASH); + public static final CompatSoundEvent ENTITY_HOSTILE_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_HOSTILE_SWIM); + public static final CompatSoundEvent ENTITY_HUSK_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_HUSK_AMBIENT); + public static final CompatSoundEvent ENTITY_HUSK_CONVERTED_TO_ZOMBIE = new CompatSoundEvent(SoundEvents.ENTITY_HUSK_CONVERTED_TO_ZOMBIE); + public static final CompatSoundEvent ENTITY_HUSK_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_HUSK_DEATH); + public static final CompatSoundEvent ENTITY_HUSK_HURT = new CompatSoundEvent(SoundEvents.ENTITY_HUSK_HURT); + public static final CompatSoundEvent ENTITY_HUSK_STEP = new CompatSoundEvent(SoundEvents.ENTITY_HUSK_STEP); + public static final CompatSoundEvent ENTITY_ILLUSIONER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ILLUSIONER_AMBIENT); + public static final CompatSoundEvent ENTITY_ILLUSIONER_CAST_SPELL = new CompatSoundEvent(SoundEvents.ENTITY_ILLUSIONER_CAST_SPELL); + public static final CompatSoundEvent ENTITY_ILLUSIONER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ILLUSIONER_DEATH); + public static final CompatSoundEvent ENTITY_ILLUSIONER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ILLUSIONER_HURT); + public static final CompatSoundEvent ENTITY_ILLUSIONER_MIRROR_MOVE = new CompatSoundEvent(SoundEvents.ENTITY_ILLUSIONER_MIRROR_MOVE); + public static final CompatSoundEvent ENTITY_ILLUSIONER_PREPARE_BLINDNESS = new CompatSoundEvent(SoundEvents.ENTITY_ILLUSIONER_PREPARE_BLINDNESS); + public static final CompatSoundEvent ENTITY_ILLUSIONER_PREPARE_MIRROR = new CompatSoundEvent(SoundEvents.ENTITY_ILLUSIONER_PREPARE_MIRROR); + public static final CompatSoundEvent ITEM_INK_SAC_USE = new CompatSoundEvent(SoundEvents.ITEM_INK_SAC_USE); + public static final CompatSoundEvent BLOCK_IRON_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_IRON_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_IRON_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_IRON_DOOR_OPEN); + public static final CompatSoundEvent ENTITY_IRON_GOLEM_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_IRON_GOLEM_ATTACK); + public static final CompatSoundEvent ENTITY_IRON_GOLEM_DAMAGE = new CompatSoundEvent(SoundEvents.ENTITY_IRON_GOLEM_DAMAGE); + public static final CompatSoundEvent ENTITY_IRON_GOLEM_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_IRON_GOLEM_DEATH); + public static final CompatSoundEvent ENTITY_IRON_GOLEM_HURT = new CompatSoundEvent(SoundEvents.ENTITY_IRON_GOLEM_HURT); + public static final CompatSoundEvent ENTITY_IRON_GOLEM_REPAIR = new CompatSoundEvent(SoundEvents.ENTITY_IRON_GOLEM_REPAIR); + public static final CompatSoundEvent ENTITY_IRON_GOLEM_STEP = new CompatSoundEvent(SoundEvents.ENTITY_IRON_GOLEM_STEP); + public static final CompatSoundEvent BLOCK_IRON_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_IRON_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_IRON_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_IRON_TRAPDOOR_OPEN); + public static final CompatSoundEvent ENTITY_ITEM_FRAME_ADD_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM); + public static final CompatSoundEvent ENTITY_ITEM_FRAME_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_FRAME_BREAK); + public static final CompatSoundEvent ENTITY_ITEM_FRAME_PLACE = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_FRAME_PLACE); + public static final CompatSoundEvent ENTITY_ITEM_FRAME_REMOVE_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_FRAME_REMOVE_ITEM); + public static final CompatSoundEvent ENTITY_ITEM_FRAME_ROTATE_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_FRAME_ROTATE_ITEM); + public static final CompatSoundEvent ENTITY_ITEM_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_BREAK); + public static final CompatSoundEvent ENTITY_ITEM_PICKUP = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_PICKUP); + public static final CompatSoundEvent BLOCK_LADDER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_LADDER_BREAK); + public static final CompatSoundEvent BLOCK_LADDER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_LADDER_FALL); + public static final CompatSoundEvent BLOCK_LADDER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_LADDER_HIT); + public static final CompatSoundEvent BLOCK_LADDER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_LADDER_PLACE); + public static final CompatSoundEvent BLOCK_LADDER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_LADDER_STEP); + public static final CompatSoundEvent BLOCK_LANTERN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_LANTERN_BREAK); + public static final CompatSoundEvent BLOCK_LANTERN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_LANTERN_FALL); + public static final CompatSoundEvent BLOCK_LANTERN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_LANTERN_HIT); + public static final CompatSoundEvent BLOCK_LANTERN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_LANTERN_PLACE); + public static final CompatSoundEvent BLOCK_LANTERN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_LANTERN_STEP); + public static final CompatSoundEvent BLOCK_LARGE_AMETHYST_BUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_LARGE_AMETHYST_BUD_BREAK); + public static final CompatSoundEvent BLOCK_LARGE_AMETHYST_BUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_LARGE_AMETHYST_BUD_PLACE); + public static final CompatSoundEvent BLOCK_LAVA_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_LAVA_AMBIENT); + public static final CompatSoundEvent BLOCK_LAVA_EXTINGUISH = new CompatSoundEvent(SoundEvents.BLOCK_LAVA_EXTINGUISH); + public static final CompatSoundEvent BLOCK_LAVA_POP = new CompatSoundEvent(SoundEvents.BLOCK_LAVA_POP); + public static final CompatSoundEvent ENTITY_LEASH_KNOT_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_LEASH_KNOT_BREAK); + public static final CompatSoundEvent ENTITY_LEASH_KNOT_PLACE = new CompatSoundEvent(SoundEvents.ENTITY_LEASH_KNOT_PLACE); + public static final CompatSoundEvent BLOCK_LEVER_CLICK = new CompatSoundEvent(SoundEvents.BLOCK_LEVER_CLICK); + public static final CompatSoundEvent ENTITY_LIGHTNING_BOLT_IMPACT = new CompatSoundEvent(SoundEvents.ENTITY_LIGHTNING_BOLT_IMPACT); + public static final CompatSoundEvent ENTITY_LIGHTNING_BOLT_THUNDER = new CompatSoundEvent(SoundEvents.ENTITY_LIGHTNING_BOLT_THUNDER); + public static final CompatSoundEvent ENTITY_LINGERING_POTION_THROW = new CompatSoundEvent(SoundEvents.ENTITY_LINGERING_POTION_THROW); + public static final CompatSoundEvent ENTITY_LLAMA_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_AMBIENT); + public static final CompatSoundEvent ENTITY_LLAMA_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_ANGRY); + public static final CompatSoundEvent ENTITY_LLAMA_CHEST = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_CHEST); + public static final CompatSoundEvent ENTITY_LLAMA_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_DEATH); + public static final CompatSoundEvent ENTITY_LLAMA_EAT = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_EAT); + public static final CompatSoundEvent ENTITY_LLAMA_HURT = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_HURT); + public static final CompatSoundEvent ENTITY_LLAMA_SPIT = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_SPIT); + public static final CompatSoundEvent ENTITY_LLAMA_STEP = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_STEP); + public static final CompatSoundEvent ENTITY_LLAMA_SWAG = new CompatSoundEvent(SoundEvents.ENTITY_LLAMA_SWAG); + public static final CompatSoundEvent ENTITY_MAGMA_CUBE_DEATH_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_DEATH_SMALL); + public static final CompatSoundEvent BLOCK_LODESTONE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_LODESTONE_BREAK); + public static final CompatSoundEvent BLOCK_LODESTONE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_LODESTONE_STEP); + public static final CompatSoundEvent BLOCK_LODESTONE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_LODESTONE_PLACE); + public static final CompatSoundEvent BLOCK_LODESTONE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_LODESTONE_HIT); + public static final CompatSoundEvent BLOCK_LODESTONE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_LODESTONE_FALL); + public static final CompatSoundEvent ITEM_LODESTONE_COMPASS_LOCK = new CompatSoundEvent(SoundEvents.ITEM_LODESTONE_COMPASS_LOCK); + public static final CompatSoundEvent ITEM_MACE_SMASH_AIR = new CompatSoundEvent(SoundEvents.ITEM_MACE_SMASH_AIR); + public static final CompatSoundEvent ITEM_MACE_SMASH_GROUND = new CompatSoundEvent(SoundEvents.ITEM_MACE_SMASH_GROUND); + public static final CompatSoundEvent ITEM_MACE_SMASH_GROUND_HEAVY = new CompatSoundEvent(SoundEvents.ITEM_MACE_SMASH_GROUND_HEAVY); + public static final CompatSoundEvent ENTITY_MAGMA_CUBE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_DEATH); + public static final CompatSoundEvent ENTITY_MAGMA_CUBE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_HURT); + public static final CompatSoundEvent ENTITY_MAGMA_CUBE_HURT_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_HURT_SMALL); + public static final CompatSoundEvent ENTITY_MAGMA_CUBE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_JUMP); + public static final CompatSoundEvent ENTITY_MAGMA_CUBE_SQUISH = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_SQUISH); + public static final CompatSoundEvent ENTITY_MAGMA_CUBE_SQUISH_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_SQUISH_SMALL); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_BREAK); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_FALL); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_HIT); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_PLACE); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_STEP); + public static final CompatSoundEvent BLOCK_MEDIUM_AMETHYST_BUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MEDIUM_AMETHYST_BUD_BREAK); + public static final CompatSoundEvent BLOCK_MEDIUM_AMETHYST_BUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MEDIUM_AMETHYST_BUD_PLACE); + public static final CompatSoundEvent BLOCK_METAL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_METAL_BREAK); + public static final CompatSoundEvent BLOCK_METAL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_METAL_FALL); + public static final CompatSoundEvent BLOCK_METAL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_METAL_HIT); + public static final CompatSoundEvent BLOCK_METAL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_METAL_PLACE); + public static final CompatSoundEvent BLOCK_METAL_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_METAL_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_METAL_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_METAL_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_METAL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_METAL_STEP); + public static final CompatSoundEvent ENTITY_MINECART_INSIDE_UNDERWATER = new CompatSoundEvent(SoundEvents.ENTITY_MINECART_INSIDE_UNDERWATER); + public static final CompatSoundEvent ENTITY_MINECART_INSIDE = new CompatSoundEvent(SoundEvents.ENTITY_MINECART_INSIDE); + public static final CompatSoundEvent ENTITY_MINECART_RIDING = new CompatSoundEvent(SoundEvents.ENTITY_MINECART_RIDING); + public static final CompatSoundEvent ENTITY_MOOSHROOM_CONVERT = new CompatSoundEvent(SoundEvents.ENTITY_MOOSHROOM_CONVERT); + public static final CompatSoundEvent ENTITY_MOOSHROOM_EAT = new CompatSoundEvent(SoundEvents.ENTITY_MOOSHROOM_EAT); + public static final CompatSoundEvent ENTITY_MOOSHROOM_MILK = new CompatSoundEvent(SoundEvents.ENTITY_MOOSHROOM_MILK); + public static final CompatSoundEvent ENTITY_MOOSHROOM_SUSPICIOUS_MILK = new CompatSoundEvent(SoundEvents.ENTITY_MOOSHROOM_SUSPICIOUS_MILK); + public static final CompatSoundEvent ENTITY_MOOSHROOM_SHEAR = new CompatSoundEvent(SoundEvents.ENTITY_MOOSHROOM_SHEAR); + public static final CompatSoundEvent BLOCK_MOSS_CARPET_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_CARPET_BREAK); + public static final CompatSoundEvent BLOCK_MOSS_CARPET_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_CARPET_FALL); + public static final CompatSoundEvent BLOCK_MOSS_CARPET_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_CARPET_HIT); + public static final CompatSoundEvent BLOCK_MOSS_CARPET_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_CARPET_PLACE); + public static final CompatSoundEvent BLOCK_MOSS_CARPET_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_CARPET_STEP); + public static final CompatSoundEvent BLOCK_PINK_PETALS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_BREAK); + public static final CompatSoundEvent BLOCK_PINK_PETALS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_FALL); + public static final CompatSoundEvent BLOCK_PINK_PETALS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_HIT); + public static final CompatSoundEvent BLOCK_PINK_PETALS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_PLACE); + public static final CompatSoundEvent BLOCK_PINK_PETALS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_STEP); + public static final CompatSoundEvent BLOCK_MOSS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_BREAK); + public static final CompatSoundEvent BLOCK_MOSS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_FALL); + public static final CompatSoundEvent BLOCK_MOSS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_HIT); + public static final CompatSoundEvent BLOCK_MOSS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_PLACE); + public static final CompatSoundEvent BLOCK_MOSS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_STEP); + public static final CompatSoundEvent BLOCK_MUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BREAK); + public static final CompatSoundEvent BLOCK_MUD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MUD_FALL); + public static final CompatSoundEvent BLOCK_MUD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MUD_HIT); + public static final CompatSoundEvent BLOCK_MUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MUD_PLACE); + public static final CompatSoundEvent BLOCK_MUD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MUD_STEP); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_BREAK); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_FALL); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_HIT); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_PLACE); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_STEP); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_BREAK); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_FALL); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_HIT); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_PLACE); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_STEP); + public static final CompatSoundEvent ENTITY_MULE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_MULE_AMBIENT); + public static final CompatSoundEvent ENTITY_MULE_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_MULE_ANGRY); + public static final CompatSoundEvent ENTITY_MULE_CHEST = new CompatSoundEvent(SoundEvents.ENTITY_MULE_CHEST); + public static final CompatSoundEvent ENTITY_MULE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_MULE_DEATH); + public static final CompatSoundEvent ENTITY_MULE_EAT = new CompatSoundEvent(SoundEvents.ENTITY_MULE_EAT); + public static final CompatSoundEvent ENTITY_MULE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_MULE_HURT); + public static final CompatSoundEvent ENTITY_MULE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_MULE_JUMP); + public static final CompatSoundEvent MUSIC_CREATIVE = new CompatSoundEvent(SoundEvents.MUSIC_CREATIVE); + public static final CompatSoundEvent MUSIC_CREDITS = new CompatSoundEvent(SoundEvents.MUSIC_CREDITS); + public static final CompatSoundEvent MUSIC_DISC_5 = new CompatSoundEvent(SoundEvents.MUSIC_DISC_5); + public static final CompatSoundEvent MUSIC_DISC_11 = new CompatSoundEvent(SoundEvents.MUSIC_DISC_11); + public static final CompatSoundEvent MUSIC_DISC_13 = new CompatSoundEvent(SoundEvents.MUSIC_DISC_13); + public static final CompatSoundEvent MUSIC_DISC_BLOCKS = new CompatSoundEvent(SoundEvents.MUSIC_DISC_BLOCKS); + public static final CompatSoundEvent MUSIC_DISC_CAT = new CompatSoundEvent(SoundEvents.MUSIC_DISC_CAT); + public static final CompatSoundEvent MUSIC_DISC_CHIRP = new CompatSoundEvent(SoundEvents.MUSIC_DISC_CHIRP); + public static final CompatSoundEvent MUSIC_DISC_FAR = new CompatSoundEvent(SoundEvents.MUSIC_DISC_FAR); + public static final CompatSoundEvent MUSIC_DISC_MALL = new CompatSoundEvent(SoundEvents.MUSIC_DISC_MALL); + public static final CompatSoundEvent MUSIC_DISC_MELLOHI = new CompatSoundEvent(SoundEvents.MUSIC_DISC_MELLOHI); + public static final CompatSoundEvent MUSIC_DISC_PIGSTEP = new CompatSoundEvent(SoundEvents.MUSIC_DISC_PIGSTEP); + public static final CompatSoundEvent MUSIC_DISC_STAL = new CompatSoundEvent(SoundEvents.MUSIC_DISC_STAL); + public static final CompatSoundEvent MUSIC_DISC_STRAD = new CompatSoundEvent(SoundEvents.MUSIC_DISC_STRAD); + public static final CompatSoundEvent MUSIC_DISC_WAIT = new CompatSoundEvent(SoundEvents.MUSIC_DISC_WAIT); + public static final CompatSoundEvent MUSIC_DISC_WARD = new CompatSoundEvent(SoundEvents.MUSIC_DISC_WARD); + public static final CompatSoundEvent MUSIC_DISC_OTHERSIDE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_OTHERSIDE); + public static final CompatSoundEvent MUSIC_DISC_RELIC = new CompatSoundEvent(SoundEvents.MUSIC_DISC_RELIC); + public static final CompatSoundEvent MUSIC_DISC_CREATOR = new CompatSoundEvent(SoundEvents.MUSIC_DISC_CREATOR); + public static final CompatSoundEvent MUSIC_DISC_CREATOR_MUSIC_BOX = new CompatSoundEvent(SoundEvents.MUSIC_DISC_CREATOR_MUSIC_BOX); + public static final CompatSoundEvent MUSIC_DISC_PRECIPICE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_PRECIPICE); + public static final CompatSoundEvent MUSIC_DRAGON = new CompatSoundEvent(SoundEvents.MUSIC_DRAGON); + public static final CompatSoundEvent MUSIC_END = new CompatSoundEvent(SoundEvents.MUSIC_END); + public static final CompatSoundEvent MUSIC_GAME = new CompatSoundEvent(SoundEvents.MUSIC_GAME); + public static final CompatSoundEvent MUSIC_MENU = new CompatSoundEvent(SoundEvents.MUSIC_MENU); + public static final CompatSoundEvent MUSIC_NETHER_BASALT_DELTAS = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_BASALT_DELTAS); + public static final CompatSoundEvent MUSIC_NETHER_CRIMSON_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_CRIMSON_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_DEEP_DARK = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_DEEP_DARK); + public static final CompatSoundEvent MUSIC_OVERWORLD_DRIPSTONE_CAVES = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_DRIPSTONE_CAVES); + public static final CompatSoundEvent MUSIC_OVERWORLD_GROVE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_GROVE); + public static final CompatSoundEvent MUSIC_OVERWORLD_JAGGED_PEAKS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_JAGGED_PEAKS); + public static final CompatSoundEvent MUSIC_OVERWORLD_LUSH_CAVES = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_LUSH_CAVES); + public static final CompatSoundEvent MUSIC_OVERWORLD_SWAMP = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SWAMP); + public static final CompatSoundEvent MUSIC_OVERWORLD_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_OLD_GROWTH_TAIGA = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_OLD_GROWTH_TAIGA); + public static final CompatSoundEvent MUSIC_OVERWORLD_MEADOW = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_MEADOW); + public static final CompatSoundEvent MUSIC_OVERWORLD_CHERRY_GROVE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_CHERRY_GROVE); + public static final CompatSoundEvent MUSIC_NETHER_NETHER_WASTES = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_NETHER_WASTES); + public static final CompatSoundEvent MUSIC_OVERWORLD_FROZEN_PEAKS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_FROZEN_PEAKS); + public static final CompatSoundEvent MUSIC_OVERWORLD_SNOWY_SLOPES = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SNOWY_SLOPES); + public static final CompatSoundEvent MUSIC_NETHER_SOUL_SAND_VALLEY = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_SOUL_SAND_VALLEY); + public static final CompatSoundEvent MUSIC_OVERWORLD_STONY_PEAKS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_STONY_PEAKS); + public static final CompatSoundEvent MUSIC_NETHER_WARPED_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_WARPED_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_FLOWER_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_FLOWER_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_DESERT = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_DESERT); + public static final CompatSoundEvent MUSIC_OVERWORLD_BADLANDS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_BADLANDS); + public static final CompatSoundEvent MUSIC_OVERWORLD_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_JUNGLE); + public static final CompatSoundEvent MUSIC_OVERWORLD_SPARSE_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SPARSE_JUNGLE); + public static final CompatSoundEvent MUSIC_OVERWORLD_BAMBOO_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_BAMBOO_JUNGLE); + public static final CompatSoundEvent MUSIC_UNDER_WATER = new CompatSoundEvent(SoundEvents.MUSIC_UNDER_WATER); + public static final CompatSoundEvent BLOCK_NETHER_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_BRICKS_BREAK); + public static final CompatSoundEvent BLOCK_NETHER_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_BRICKS_STEP); + public static final CompatSoundEvent BLOCK_NETHER_BRICKS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_BRICKS_PLACE); + public static final CompatSoundEvent BLOCK_NETHER_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_BRICKS_HIT); + public static final CompatSoundEvent BLOCK_NETHER_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_BRICKS_FALL); + public static final CompatSoundEvent BLOCK_NETHER_WART_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WART_BREAK); + public static final CompatSoundEvent ITEM_NETHER_WART_PLANT = new CompatSoundEvent(SoundEvents.ITEM_NETHER_WART_PLANT); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_FALL); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HIT); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_STEP); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_DOOR_OPEN); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_BUTTON_CLICK_OFF); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_BUTTON_CLICK_ON); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_FENCE_GATE_CLOSE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_FENCE_GATE_OPEN); + public static final CompatSoundEvent INTENTIONALLY_EMPTY = new CompatSoundEvent(SoundEvents.INTENTIONALLY_EMPTY); + public static final CompatSoundEvent BLOCK_PACKED_MUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_BREAK); + public static final CompatSoundEvent BLOCK_PACKED_MUD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_FALL); + public static final CompatSoundEvent BLOCK_PACKED_MUD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_HIT); + public static final CompatSoundEvent BLOCK_PACKED_MUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_PLACE); + public static final CompatSoundEvent BLOCK_PACKED_MUD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_STEP); + public static final CompatSoundEvent BLOCK_STEM_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STEM_BREAK); + public static final CompatSoundEvent BLOCK_STEM_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STEM_STEP); + public static final CompatSoundEvent BLOCK_STEM_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STEM_PLACE); + public static final CompatSoundEvent BLOCK_STEM_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STEM_HIT); + public static final CompatSoundEvent BLOCK_STEM_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STEM_FALL); + public static final CompatSoundEvent BLOCK_NYLIUM_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NYLIUM_BREAK); + public static final CompatSoundEvent BLOCK_NYLIUM_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NYLIUM_STEP); + public static final CompatSoundEvent BLOCK_NYLIUM_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NYLIUM_PLACE); + public static final CompatSoundEvent BLOCK_NYLIUM_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NYLIUM_HIT); + public static final CompatSoundEvent BLOCK_NYLIUM_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NYLIUM_FALL); + public static final CompatSoundEvent BLOCK_NETHER_SPROUTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_SPROUTS_BREAK); + public static final CompatSoundEvent BLOCK_NETHER_SPROUTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_SPROUTS_STEP); + public static final CompatSoundEvent BLOCK_NETHER_SPROUTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_SPROUTS_PLACE); + public static final CompatSoundEvent BLOCK_NETHER_SPROUTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_SPROUTS_HIT); + public static final CompatSoundEvent BLOCK_NETHER_SPROUTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_SPROUTS_FALL); + public static final CompatSoundEvent BLOCK_FUNGUS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_FUNGUS_BREAK); + public static final CompatSoundEvent BLOCK_FUNGUS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_FUNGUS_STEP); + public static final CompatSoundEvent BLOCK_FUNGUS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_FUNGUS_PLACE); + public static final CompatSoundEvent BLOCK_FUNGUS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_FUNGUS_HIT); + public static final CompatSoundEvent BLOCK_FUNGUS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_FUNGUS_FALL); + public static final CompatSoundEvent BLOCK_WEEPING_VINES_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WEEPING_VINES_BREAK); + public static final CompatSoundEvent BLOCK_WEEPING_VINES_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WEEPING_VINES_STEP); + public static final CompatSoundEvent BLOCK_WEEPING_VINES_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WEEPING_VINES_PLACE); + public static final CompatSoundEvent BLOCK_WEEPING_VINES_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WEEPING_VINES_HIT); + public static final CompatSoundEvent BLOCK_WEEPING_VINES_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WEEPING_VINES_FALL); + public static final CompatSoundEvent BLOCK_WART_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WART_BLOCK_BREAK); + public static final CompatSoundEvent BLOCK_WART_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WART_BLOCK_STEP); + public static final CompatSoundEvent BLOCK_WART_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WART_BLOCK_PLACE); + public static final CompatSoundEvent BLOCK_WART_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WART_BLOCK_HIT); + public static final CompatSoundEvent BLOCK_WART_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WART_BLOCK_FALL); + public static final CompatSoundEvent BLOCK_NETHERITE_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHERITE_BLOCK_BREAK); + public static final CompatSoundEvent BLOCK_NETHERITE_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHERITE_BLOCK_STEP); + public static final CompatSoundEvent BLOCK_NETHERITE_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHERITE_BLOCK_PLACE); + public static final CompatSoundEvent BLOCK_NETHERITE_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHERITE_BLOCK_HIT); + public static final CompatSoundEvent BLOCK_NETHERITE_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHERITE_BLOCK_FALL); + public static final CompatSoundEvent BLOCK_NETHERRACK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHERRACK_BREAK); + public static final CompatSoundEvent BLOCK_NETHERRACK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHERRACK_STEP); + public static final CompatSoundEvent BLOCK_NETHERRACK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHERRACK_PLACE); + public static final CompatSoundEvent BLOCK_NETHERRACK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHERRACK_HIT); + public static final CompatSoundEvent BLOCK_NETHERRACK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHERRACK_FALL); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_BASEDRUM = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_BASEDRUM); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_BASS = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_BASS); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_BELL = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_BELL); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_CHIME = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_CHIME); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_FLUTE = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_FLUTE); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_GUITAR = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_GUITAR); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_HARP = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_HARP); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_HAT = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_HAT); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_PLING = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_PLING); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_SNARE = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_SNARE); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_XYLOPHONE = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_XYLOPHONE); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IRON_XYLOPHONE = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IRON_XYLOPHONE); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_COW_BELL = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_COW_BELL); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_DIDGERIDOO = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_DIDGERIDOO); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_BIT = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_BIT); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_BANJO = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_BANJO); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_ZOMBIE = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_ZOMBIE); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_SKELETON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_SKELETON); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_CREEPER = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_CREEPER); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_ENDER_DRAGON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_ENDER_DRAGON); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_WITHER_SKELETON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_WITHER_SKELETON); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_PIGLIN = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_PIGLIN); + public static final CompatSoundEvent ENTITY_OCELOT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_HURT); + public static final CompatSoundEvent ENTITY_OCELOT_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_AMBIENT); + public static final CompatSoundEvent ENTITY_OCELOT_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_DEATH); + public static final CompatSoundEvent ITEM_OMINOUS_BOTTLE_DISPOSE = new CompatSoundEvent(SoundEvents.ITEM_OMINOUS_BOTTLE_DISPOSE); + public static final CompatSoundEvent ENTITY_PAINTING_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_PAINTING_BREAK); + public static final CompatSoundEvent ENTITY_PAINTING_PLACE = new CompatSoundEvent(SoundEvents.ENTITY_PAINTING_PLACE); + public static final CompatSoundEvent ENTITY_PANDA_PRE_SNEEZE = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_PRE_SNEEZE); + public static final CompatSoundEvent ENTITY_PANDA_SNEEZE = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_SNEEZE); + public static final CompatSoundEvent ENTITY_PANDA_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_AMBIENT); + public static final CompatSoundEvent ENTITY_PANDA_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_DEATH); + public static final CompatSoundEvent ENTITY_PANDA_EAT = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_EAT); + public static final CompatSoundEvent ENTITY_PANDA_STEP = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_STEP); + public static final CompatSoundEvent ENTITY_PANDA_CANT_BREED = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_CANT_BREED); + public static final CompatSoundEvent ENTITY_PANDA_AGGRESSIVE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_AGGRESSIVE_AMBIENT); + public static final CompatSoundEvent ENTITY_PANDA_WORRIED_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_WORRIED_AMBIENT); + public static final CompatSoundEvent ENTITY_PANDA_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_HURT); + public static final CompatSoundEvent ENTITY_PANDA_BITE = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_BITE); + public static final CompatSoundEvent ENTITY_PARROT_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_AMBIENT); + public static final CompatSoundEvent ENTITY_PARROT_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_DEATH); + public static final CompatSoundEvent ENTITY_PARROT_EAT = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_EAT); + public static final CompatSoundEvent ENTITY_PARROT_FLY = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_FLY); + public static final CompatSoundEvent ENTITY_PARROT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_HURT); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_BLAZE = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_BLAZE); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_BOGGED = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_BOGGED); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_BREEZE = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_BREEZE); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_CREEPER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_CREEPER); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_DROWNED = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_DROWNED); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_ELDER_GUARDIAN = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_ELDER_GUARDIAN); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_ENDER_DRAGON = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_ENDER_DRAGON); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_ENDERMITE = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_ENDERMITE); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_EVOKER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_EVOKER); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_GHAST = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_GHAST); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_GUARDIAN = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_GUARDIAN); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_HOGLIN = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_HOGLIN); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_HUSK = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_HUSK); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_ILLUSIONER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_ILLUSIONER); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_MAGMA_CUBE = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_MAGMA_CUBE); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_PHANTOM = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_PHANTOM); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_PIGLIN = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_PIGLIN); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_PIGLIN_BRUTE = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_PIGLIN_BRUTE); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_PILLAGER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_PILLAGER); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_RAVAGER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_RAVAGER); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_SHULKER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_SHULKER); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_SILVERFISH = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_SILVERFISH); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_SKELETON = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_SKELETON); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_SLIME = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_SLIME); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_SPIDER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_SPIDER); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_STRAY = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_STRAY); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_VEX = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_VEX); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_VINDICATOR = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_VINDICATOR); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WARDEN = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_WARDEN); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WITCH = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_WITCH); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WITHER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_WITHER); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WITHER_SKELETON = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_WITHER_SKELETON); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_ZOGLIN = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_ZOGLIN); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_ZOMBIE = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_ZOMBIE); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_ZOMBIE_VILLAGER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_ZOMBIE_VILLAGER); + public static final CompatSoundEvent ENTITY_PARROT_STEP = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_STEP); + public static final CompatSoundEvent ENTITY_PHANTOM_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PHANTOM_AMBIENT); + public static final CompatSoundEvent ENTITY_PHANTOM_BITE = new CompatSoundEvent(SoundEvents.ENTITY_PHANTOM_BITE); + public static final CompatSoundEvent ENTITY_PHANTOM_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PHANTOM_DEATH); + public static final CompatSoundEvent ENTITY_PHANTOM_FLAP = new CompatSoundEvent(SoundEvents.ENTITY_PHANTOM_FLAP); + public static final CompatSoundEvent ENTITY_PHANTOM_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PHANTOM_HURT); + public static final CompatSoundEvent ENTITY_PHANTOM_SWOOP = new CompatSoundEvent(SoundEvents.ENTITY_PHANTOM_SWOOP); + public static final CompatSoundEvent ENTITY_PIG_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PIG_AMBIENT); + public static final CompatSoundEvent ENTITY_PIG_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PIG_DEATH); + public static final CompatSoundEvent ENTITY_PIG_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PIG_HURT); + public static final CompatSoundEvent ENTITY_PIG_SADDLE = new CompatSoundEvent(SoundEvents.ENTITY_PIG_SADDLE); + public static final CompatSoundEvent ENTITY_PIG_STEP = new CompatSoundEvent(SoundEvents.ENTITY_PIG_STEP); + public static final CompatSoundEvent ENTITY_PIGLIN_ADMIRING_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_ADMIRING_ITEM); + public static final CompatSoundEvent ENTITY_PIGLIN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_AMBIENT); + public static final CompatSoundEvent ENTITY_PIGLIN_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_ANGRY); + public static final CompatSoundEvent ENTITY_PIGLIN_CELEBRATE = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_CELEBRATE); + public static final CompatSoundEvent ENTITY_PIGLIN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_DEATH); + public static final CompatSoundEvent ENTITY_PIGLIN_JEALOUS = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_JEALOUS); + public static final CompatSoundEvent ENTITY_PIGLIN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_HURT); + public static final CompatSoundEvent ENTITY_PIGLIN_RETREAT = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_RETREAT); + public static final CompatSoundEvent ENTITY_PIGLIN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_STEP); + public static final CompatSoundEvent ENTITY_PIGLIN_CONVERTED_TO_ZOMBIFIED = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_CONVERTED_TO_ZOMBIFIED); + public static final CompatSoundEvent ENTITY_PIGLIN_BRUTE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_BRUTE_AMBIENT); + public static final CompatSoundEvent ENTITY_PIGLIN_BRUTE_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_BRUTE_ANGRY); + public static final CompatSoundEvent ENTITY_PIGLIN_BRUTE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_BRUTE_DEATH); + public static final CompatSoundEvent ENTITY_PIGLIN_BRUTE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_BRUTE_HURT); + public static final CompatSoundEvent ENTITY_PIGLIN_BRUTE_STEP = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_BRUTE_STEP); + public static final CompatSoundEvent ENTITY_PIGLIN_BRUTE_CONVERTED_TO_ZOMBIFIED = new CompatSoundEvent(SoundEvents.ENTITY_PIGLIN_BRUTE_CONVERTED_TO_ZOMBIFIED); + public static final CompatSoundEvent ENTITY_PILLAGER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PILLAGER_AMBIENT); + public static final CompatSoundEvent ENTITY_PILLAGER_CELEBRATE = new CompatSoundEvent(SoundEvents.ENTITY_PILLAGER_CELEBRATE); + public static final CompatSoundEvent ENTITY_PILLAGER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PILLAGER_DEATH); + public static final CompatSoundEvent ENTITY_PILLAGER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PILLAGER_HURT); + public static final CompatSoundEvent BLOCK_PISTON_CONTRACT = new CompatSoundEvent(SoundEvents.BLOCK_PISTON_CONTRACT); + public static final CompatSoundEvent BLOCK_PISTON_EXTEND = new CompatSoundEvent(SoundEvents.BLOCK_PISTON_EXTEND); + public static final CompatSoundEvent ENTITY_PLAYER_ATTACK_CRIT = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_ATTACK_CRIT); + public static final CompatSoundEvent ENTITY_PLAYER_ATTACK_KNOCKBACK = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_ATTACK_KNOCKBACK); + public static final CompatSoundEvent ENTITY_PLAYER_ATTACK_NODAMAGE = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_ATTACK_NODAMAGE); + public static final CompatSoundEvent ENTITY_PLAYER_ATTACK_STRONG = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_ATTACK_STRONG); + public static final CompatSoundEvent ENTITY_PLAYER_ATTACK_SWEEP = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_ATTACK_SWEEP); + public static final CompatSoundEvent ENTITY_PLAYER_ATTACK_WEAK = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_ATTACK_WEAK); + public static final CompatSoundEvent ENTITY_PLAYER_BIG_FALL = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_BIG_FALL); + public static final CompatSoundEvent ENTITY_PLAYER_BREATH = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_BREATH); + public static final CompatSoundEvent ENTITY_PLAYER_BURP = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_BURP); + public static final CompatSoundEvent ENTITY_PLAYER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_DEATH); + public static final CompatSoundEvent ENTITY_PLAYER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_HURT); + public static final CompatSoundEvent ENTITY_PLAYER_HURT_DROWN = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_HURT_DROWN); + public static final CompatSoundEvent ENTITY_PLAYER_HURT_FREEZE = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_HURT_FREEZE); + public static final CompatSoundEvent ENTITY_PLAYER_HURT_ON_FIRE = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_HURT_ON_FIRE); + public static final CompatSoundEvent ENTITY_PLAYER_HURT_SWEET_BERRY_BUSH = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_HURT_SWEET_BERRY_BUSH); + public static final CompatSoundEvent ENTITY_PLAYER_LEVELUP = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_LEVELUP); + public static final CompatSoundEvent ENTITY_PLAYER_SMALL_FALL = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_SMALL_FALL); + public static final CompatSoundEvent ENTITY_PLAYER_SPLASH = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_SPLASH); + public static final CompatSoundEvent ENTITY_PLAYER_SPLASH_HIGH_SPEED = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_SPLASH_HIGH_SPEED); + public static final CompatSoundEvent ENTITY_PLAYER_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_SWIM); + public static final CompatSoundEvent ENTITY_PLAYER_TELEPORT = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_TELEPORT); + public static final CompatSoundEvent ENTITY_POLAR_BEAR_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_AMBIENT); + public static final CompatSoundEvent ENTITY_POLAR_BEAR_AMBIENT_BABY = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_AMBIENT_BABY); + public static final CompatSoundEvent ENTITY_POLAR_BEAR_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_DEATH); + public static final CompatSoundEvent ENTITY_POLAR_BEAR_HURT = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_HURT); + public static final CompatSoundEvent ENTITY_POLAR_BEAR_STEP = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_STEP); + public static final CompatSoundEvent ENTITY_POLAR_BEAR_WARNING = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_WARNING); + public static final CompatSoundEvent BLOCK_POLISHED_DEEPSLATE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_DEEPSLATE_BREAK); + public static final CompatSoundEvent BLOCK_POLISHED_DEEPSLATE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_DEEPSLATE_FALL); + public static final CompatSoundEvent BLOCK_POLISHED_DEEPSLATE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_DEEPSLATE_HIT); + public static final CompatSoundEvent BLOCK_POLISHED_DEEPSLATE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_DEEPSLATE_PLACE); + public static final CompatSoundEvent BLOCK_POLISHED_DEEPSLATE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_DEEPSLATE_STEP); + public static final CompatSoundEvent BLOCK_PORTAL_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_PORTAL_AMBIENT); + public static final CompatSoundEvent BLOCK_PORTAL_TRAVEL = new CompatSoundEvent(SoundEvents.BLOCK_PORTAL_TRAVEL); + public static final CompatSoundEvent BLOCK_PORTAL_TRIGGER = new CompatSoundEvent(SoundEvents.BLOCK_PORTAL_TRIGGER); + public static final CompatSoundEvent BLOCK_POWDER_SNOW_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_POWDER_SNOW_BREAK); + public static final CompatSoundEvent BLOCK_POWDER_SNOW_FALL = new CompatSoundEvent(SoundEvents.BLOCK_POWDER_SNOW_FALL); + public static final CompatSoundEvent BLOCK_POWDER_SNOW_HIT = new CompatSoundEvent(SoundEvents.BLOCK_POWDER_SNOW_HIT); + public static final CompatSoundEvent BLOCK_POWDER_SNOW_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_POWDER_SNOW_PLACE); + public static final CompatSoundEvent BLOCK_POWDER_SNOW_STEP = new CompatSoundEvent(SoundEvents.BLOCK_POWDER_SNOW_STEP); + public static final CompatSoundEvent ENTITY_PUFFER_FISH_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_PUFFER_FISH_AMBIENT); + public static final CompatSoundEvent ENTITY_PUFFER_FISH_BLOW_OUT = new CompatSoundEvent(SoundEvents.ENTITY_PUFFER_FISH_BLOW_OUT); + public static final CompatSoundEvent ENTITY_PUFFER_FISH_BLOW_UP = new CompatSoundEvent(SoundEvents.ENTITY_PUFFER_FISH_BLOW_UP); + public static final CompatSoundEvent ENTITY_PUFFER_FISH_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_PUFFER_FISH_DEATH); + public static final CompatSoundEvent ENTITY_PUFFER_FISH_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_PUFFER_FISH_FLOP); + public static final CompatSoundEvent ENTITY_PUFFER_FISH_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PUFFER_FISH_HURT); + public static final CompatSoundEvent ENTITY_PUFFER_FISH_STING = new CompatSoundEvent(SoundEvents.ENTITY_PUFFER_FISH_STING); + public static final CompatSoundEvent BLOCK_PUMPKIN_CARVE = new CompatSoundEvent(SoundEvents.BLOCK_PUMPKIN_CARVE); + public static final CompatSoundEvent ENTITY_RABBIT_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_RABBIT_AMBIENT); + public static final CompatSoundEvent ENTITY_RABBIT_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_RABBIT_ATTACK); + public static final CompatSoundEvent ENTITY_RABBIT_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_RABBIT_DEATH); + public static final CompatSoundEvent ENTITY_RABBIT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_RABBIT_HURT); + public static final CompatSoundEvent ENTITY_RABBIT_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_RABBIT_JUMP); + public static final CompatSoundEvent EVENT_RAID_HORN = new CompatSoundEvent(SoundEvents.EVENT_RAID_HORN); + public static final CompatSoundEvent ENTITY_RAVAGER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_RAVAGER_AMBIENT); + public static final CompatSoundEvent ENTITY_RAVAGER_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_RAVAGER_ATTACK); + public static final CompatSoundEvent ENTITY_RAVAGER_CELEBRATE = new CompatSoundEvent(SoundEvents.ENTITY_RAVAGER_CELEBRATE); + public static final CompatSoundEvent ENTITY_RAVAGER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_RAVAGER_DEATH); + public static final CompatSoundEvent ENTITY_RAVAGER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_RAVAGER_HURT); + public static final CompatSoundEvent ENTITY_RAVAGER_STEP = new CompatSoundEvent(SoundEvents.ENTITY_RAVAGER_STEP); + public static final CompatSoundEvent ENTITY_RAVAGER_STUNNED = new CompatSoundEvent(SoundEvents.ENTITY_RAVAGER_STUNNED); + public static final CompatSoundEvent ENTITY_RAVAGER_ROAR = new CompatSoundEvent(SoundEvents.ENTITY_RAVAGER_ROAR); + public static final CompatSoundEvent BLOCK_NETHER_GOLD_ORE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_GOLD_ORE_BREAK); + public static final CompatSoundEvent BLOCK_NETHER_GOLD_ORE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_GOLD_ORE_FALL); + public static final CompatSoundEvent BLOCK_NETHER_GOLD_ORE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_GOLD_ORE_HIT); + public static final CompatSoundEvent BLOCK_NETHER_GOLD_ORE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_GOLD_ORE_PLACE); + public static final CompatSoundEvent BLOCK_NETHER_GOLD_ORE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_GOLD_ORE_STEP); + public static final CompatSoundEvent BLOCK_NETHER_ORE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_ORE_BREAK); + public static final CompatSoundEvent BLOCK_NETHER_ORE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_ORE_FALL); + public static final CompatSoundEvent BLOCK_NETHER_ORE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_ORE_HIT); + public static final CompatSoundEvent BLOCK_NETHER_ORE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_ORE_PLACE); + public static final CompatSoundEvent BLOCK_NETHER_ORE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_ORE_STEP); + public static final CompatSoundEvent BLOCK_REDSTONE_TORCH_BURNOUT = new CompatSoundEvent(SoundEvents.BLOCK_REDSTONE_TORCH_BURNOUT); + public static final CompatSoundEvent BLOCK_RESPAWN_ANCHOR_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_RESPAWN_ANCHOR_AMBIENT); + public static final CompatSoundEvent BLOCK_RESPAWN_ANCHOR_CHARGE = new CompatSoundEvent(SoundEvents.BLOCK_RESPAWN_ANCHOR_CHARGE); + public static final CompatSoundEvent BLOCK_RESPAWN_ANCHOR_DEPLETE = new CompatSoundEvent(SoundEvents.BLOCK_RESPAWN_ANCHOR_DEPLETE); + public static final CompatSoundEvent BLOCK_RESPAWN_ANCHOR_SET_SPAWN = new CompatSoundEvent(SoundEvents.BLOCK_RESPAWN_ANCHOR_SET_SPAWN); + public static final CompatSoundEvent BLOCK_ROOTED_DIRT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_ROOTED_DIRT_BREAK); + public static final CompatSoundEvent BLOCK_ROOTED_DIRT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_ROOTED_DIRT_FALL); + public static final CompatSoundEvent BLOCK_ROOTED_DIRT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_ROOTED_DIRT_HIT); + public static final CompatSoundEvent BLOCK_ROOTED_DIRT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_ROOTED_DIRT_PLACE); + public static final CompatSoundEvent BLOCK_ROOTED_DIRT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_ROOTED_DIRT_STEP); + public static final CompatSoundEvent ENTITY_SALMON_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SALMON_AMBIENT); + public static final CompatSoundEvent ENTITY_SALMON_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SALMON_DEATH); + public static final CompatSoundEvent ENTITY_SALMON_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_SALMON_FLOP); + public static final CompatSoundEvent ENTITY_SALMON_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SALMON_HURT); + public static final CompatSoundEvent BLOCK_SAND_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SAND_BREAK); + public static final CompatSoundEvent BLOCK_SAND_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SAND_FALL); + public static final CompatSoundEvent BLOCK_SAND_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SAND_HIT); + public static final CompatSoundEvent BLOCK_SAND_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SAND_PLACE); + public static final CompatSoundEvent BLOCK_SAND_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SAND_STEP); + public static final CompatSoundEvent BLOCK_SCAFFOLDING_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCAFFOLDING_BREAK); + public static final CompatSoundEvent BLOCK_SCAFFOLDING_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCAFFOLDING_FALL); + public static final CompatSoundEvent BLOCK_SCAFFOLDING_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCAFFOLDING_HIT); + public static final CompatSoundEvent BLOCK_SCAFFOLDING_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCAFFOLDING_PLACE); + public static final CompatSoundEvent BLOCK_SCAFFOLDING_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCAFFOLDING_STEP); + public static final CompatSoundEvent BLOCK_SCULK_SPREAD = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SPREAD); + public static final CompatSoundEvent BLOCK_SCULK_CHARGE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CHARGE); + public static final CompatSoundEvent BLOCK_SCULK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_FALL); + public static final CompatSoundEvent BLOCK_SCULK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_HIT); + public static final CompatSoundEvent BLOCK_SCULK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_STEP); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_BLOOM = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_BLOOM); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_FALL); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_HIT); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_STEP); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_CLICKING = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_CLICKING); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_CLICKING_STOP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_CLICKING_STOP); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_FALL); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_HIT); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_STEP); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_FALL); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_HIT); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_SHRIEK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_SHRIEK); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_STEP); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_FALL); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_HIT); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_STEP); + public static final CompatSoundEvent ENTITY_SHEEP_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_AMBIENT); + public static final CompatSoundEvent ENTITY_SHEEP_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_DEATH); + public static final CompatSoundEvent ENTITY_SHEEP_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_HURT); + public static final CompatSoundEvent ENTITY_SHEEP_SHEAR = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_SHEAR); + public static final CompatSoundEvent ENTITY_SHEEP_STEP = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_STEP); + public static final CompatSoundEvent ITEM_SHIELD_BLOCK = new CompatSoundEvent(SoundEvents.ITEM_SHIELD_BLOCK); + public static final CompatSoundEvent ITEM_SHIELD_BREAK = new CompatSoundEvent(SoundEvents.ITEM_SHIELD_BREAK); + public static final CompatSoundEvent BLOCK_SHROOMLIGHT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SHROOMLIGHT_BREAK); + public static final CompatSoundEvent BLOCK_SHROOMLIGHT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SHROOMLIGHT_STEP); + public static final CompatSoundEvent BLOCK_SHROOMLIGHT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SHROOMLIGHT_PLACE); + public static final CompatSoundEvent BLOCK_SHROOMLIGHT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SHROOMLIGHT_HIT); + public static final CompatSoundEvent BLOCK_SHROOMLIGHT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SHROOMLIGHT_FALL); + public static final CompatSoundEvent ITEM_SHOVEL_FLATTEN = new CompatSoundEvent(SoundEvents.ITEM_SHOVEL_FLATTEN); + public static final CompatSoundEvent ENTITY_SHULKER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_AMBIENT); + public static final CompatSoundEvent BLOCK_SHULKER_BOX_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_SHULKER_BOX_CLOSE); + public static final CompatSoundEvent BLOCK_SHULKER_BOX_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_SHULKER_BOX_OPEN); + public static final CompatSoundEvent ENTITY_SHULKER_BULLET_HIT = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_BULLET_HIT); + public static final CompatSoundEvent ENTITY_SHULKER_BULLET_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_BULLET_HURT); + public static final CompatSoundEvent ENTITY_SHULKER_CLOSE = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_CLOSE); + public static final CompatSoundEvent ENTITY_SHULKER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_DEATH); + public static final CompatSoundEvent ENTITY_SHULKER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_HURT); + public static final CompatSoundEvent ENTITY_SHULKER_HURT_CLOSED = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_HURT_CLOSED); + public static final CompatSoundEvent ENTITY_SHULKER_OPEN = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_OPEN); + public static final CompatSoundEvent ENTITY_SHULKER_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_SHOOT); + public static final CompatSoundEvent ENTITY_SHULKER_TELEPORT = new CompatSoundEvent(SoundEvents.ENTITY_SHULKER_TELEPORT); + public static final CompatSoundEvent ENTITY_SILVERFISH_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SILVERFISH_AMBIENT); + public static final CompatSoundEvent ENTITY_SILVERFISH_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SILVERFISH_DEATH); + public static final CompatSoundEvent ENTITY_SILVERFISH_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SILVERFISH_HURT); + public static final CompatSoundEvent ENTITY_SILVERFISH_STEP = new CompatSoundEvent(SoundEvents.ENTITY_SILVERFISH_STEP); + public static final CompatSoundEvent ENTITY_SKELETON_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_AMBIENT); + public static final CompatSoundEvent ENTITY_SKELETON_CONVERTED_TO_STRAY = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_CONVERTED_TO_STRAY); + public static final CompatSoundEvent ENTITY_SKELETON_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_DEATH); + public static final CompatSoundEvent ENTITY_SKELETON_HORSE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HORSE_AMBIENT); + public static final CompatSoundEvent ENTITY_SKELETON_HORSE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HORSE_DEATH); + public static final CompatSoundEvent ENTITY_SKELETON_HORSE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HORSE_HURT); + public static final CompatSoundEvent ENTITY_SKELETON_HORSE_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HORSE_SWIM); + public static final CompatSoundEvent ENTITY_SKELETON_HORSE_AMBIENT_WATER = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HORSE_AMBIENT_WATER); + public static final CompatSoundEvent ENTITY_SKELETON_HORSE_GALLOP_WATER = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HORSE_GALLOP_WATER); + public static final CompatSoundEvent ENTITY_SKELETON_HORSE_JUMP_WATER = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HORSE_JUMP_WATER); + public static final CompatSoundEvent ENTITY_SKELETON_HORSE_STEP_WATER = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HORSE_STEP_WATER); + public static final CompatSoundEvent ENTITY_SKELETON_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HURT); + public static final CompatSoundEvent ENTITY_SKELETON_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_SHOOT); + public static final CompatSoundEvent ENTITY_SKELETON_STEP = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_STEP); + public static final CompatSoundEvent ENTITY_SLIME_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_ATTACK); + public static final CompatSoundEvent ENTITY_SLIME_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_DEATH); + public static final CompatSoundEvent ENTITY_SLIME_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_HURT); + public static final CompatSoundEvent ENTITY_SLIME_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_JUMP); + public static final CompatSoundEvent ENTITY_SLIME_SQUISH = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_SQUISH); + public static final CompatSoundEvent BLOCK_SLIME_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SLIME_BLOCK_BREAK); + public static final CompatSoundEvent BLOCK_SLIME_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SLIME_BLOCK_FALL); + public static final CompatSoundEvent BLOCK_SLIME_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SLIME_BLOCK_HIT); + public static final CompatSoundEvent BLOCK_SLIME_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SLIME_BLOCK_PLACE); + public static final CompatSoundEvent BLOCK_SLIME_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SLIME_BLOCK_STEP); + public static final CompatSoundEvent BLOCK_SMALL_AMETHYST_BUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SMALL_AMETHYST_BUD_BREAK); + public static final CompatSoundEvent BLOCK_SMALL_AMETHYST_BUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SMALL_AMETHYST_BUD_PLACE); + public static final CompatSoundEvent BLOCK_SMALL_DRIPLEAF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SMALL_DRIPLEAF_BREAK); + public static final CompatSoundEvent BLOCK_SMALL_DRIPLEAF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SMALL_DRIPLEAF_FALL); + public static final CompatSoundEvent BLOCK_SMALL_DRIPLEAF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SMALL_DRIPLEAF_HIT); + public static final CompatSoundEvent BLOCK_SMALL_DRIPLEAF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SMALL_DRIPLEAF_PLACE); + public static final CompatSoundEvent BLOCK_SMALL_DRIPLEAF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SMALL_DRIPLEAF_STEP); + public static final CompatSoundEvent BLOCK_SOUL_SAND_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SAND_BREAK); + public static final CompatSoundEvent BLOCK_SOUL_SAND_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SAND_STEP); + public static final CompatSoundEvent BLOCK_SOUL_SAND_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SAND_PLACE); + public static final CompatSoundEvent BLOCK_SOUL_SAND_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SAND_HIT); + public static final CompatSoundEvent BLOCK_SOUL_SAND_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SAND_FALL); + public static final CompatSoundEvent BLOCK_SOUL_SOIL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SOIL_BREAK); + public static final CompatSoundEvent BLOCK_SOUL_SOIL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SOIL_STEP); + public static final CompatSoundEvent BLOCK_SOUL_SOIL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SOIL_PLACE); + public static final CompatSoundEvent BLOCK_SOUL_SOIL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SOIL_HIT); + public static final CompatSoundEvent BLOCK_SOUL_SOIL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SOUL_SOIL_FALL); + public static final CompatSoundEvent PARTICLE_SOUL_ESCAPE = new CompatSoundEvent(SoundEvents.PARTICLE_SOUL_ESCAPE); + public static final CompatSoundEvent BLOCK_SPORE_BLOSSOM_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SPORE_BLOSSOM_BREAK); + public static final CompatSoundEvent BLOCK_SPORE_BLOSSOM_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SPORE_BLOSSOM_FALL); + public static final CompatSoundEvent BLOCK_SPORE_BLOSSOM_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SPORE_BLOSSOM_HIT); + public static final CompatSoundEvent BLOCK_SPORE_BLOSSOM_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SPORE_BLOSSOM_PLACE); + public static final CompatSoundEvent BLOCK_SPORE_BLOSSOM_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SPORE_BLOSSOM_STEP); + public static final CompatSoundEvent ENTITY_STRIDER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_AMBIENT); + public static final CompatSoundEvent ENTITY_STRIDER_HAPPY = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_HAPPY); + public static final CompatSoundEvent ENTITY_STRIDER_RETREAT = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_RETREAT); + public static final CompatSoundEvent ENTITY_STRIDER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_DEATH); + public static final CompatSoundEvent ENTITY_STRIDER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_HURT); + public static final CompatSoundEvent ENTITY_STRIDER_STEP = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_STEP); + public static final CompatSoundEvent ENTITY_STRIDER_STEP_LAVA = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_STEP_LAVA); + public static final CompatSoundEvent ENTITY_STRIDER_EAT = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_EAT); + public static final CompatSoundEvent ENTITY_STRIDER_SADDLE = new CompatSoundEvent(SoundEvents.ENTITY_STRIDER_SADDLE); + public static final CompatSoundEvent ENTITY_SLIME_DEATH_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_DEATH_SMALL); + public static final CompatSoundEvent ENTITY_SLIME_HURT_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_HURT_SMALL); + public static final CompatSoundEvent ENTITY_SLIME_JUMP_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_JUMP_SMALL); + public static final CompatSoundEvent ENTITY_SLIME_SQUISH_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_SQUISH_SMALL); + public static final CompatSoundEvent BLOCK_SMITHING_TABLE_USE = new CompatSoundEvent(SoundEvents.BLOCK_SMITHING_TABLE_USE); + public static final CompatSoundEvent BLOCK_SMOKER_SMOKE = new CompatSoundEvent(SoundEvents.BLOCK_SMOKER_SMOKE); + public static final CompatSoundEvent ENTITY_SNIFFER_STEP = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_STEP); + public static final CompatSoundEvent ENTITY_SNIFFER_EAT = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_EAT); + public static final CompatSoundEvent ENTITY_SNIFFER_IDLE = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_IDLE); + public static final CompatSoundEvent ENTITY_SNIFFER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_HURT); + public static final CompatSoundEvent ENTITY_SNIFFER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_DEATH); + public static final CompatSoundEvent ENTITY_SNIFFER_DROP_SEED = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_DROP_SEED); + public static final CompatSoundEvent ENTITY_SNIFFER_SCENTING = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_SCENTING); + public static final CompatSoundEvent ENTITY_SNIFFER_SNIFFING = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_SNIFFING); + public static final CompatSoundEvent ENTITY_SNIFFER_SEARCHING = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_SEARCHING); + public static final CompatSoundEvent ENTITY_SNIFFER_DIGGING = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_DIGGING); + public static final CompatSoundEvent ENTITY_SNIFFER_DIGGING_STOP = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_DIGGING_STOP); + public static final CompatSoundEvent ENTITY_SNIFFER_HAPPY = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_HAPPY); + public static final CompatSoundEvent BLOCK_SNIFFER_EGG_PLOP = new CompatSoundEvent(SoundEvents.BLOCK_SNIFFER_EGG_PLOP); + public static final CompatSoundEvent BLOCK_SNIFFER_EGG_CRACK = new CompatSoundEvent(SoundEvents.BLOCK_SNIFFER_EGG_CRACK); + public static final CompatSoundEvent BLOCK_SNIFFER_EGG_HATCH = new CompatSoundEvent(SoundEvents.BLOCK_SNIFFER_EGG_HATCH); + public static final CompatSoundEvent ENTITY_SNOWBALL_THROW = new CompatSoundEvent(SoundEvents.ENTITY_SNOWBALL_THROW); + public static final CompatSoundEvent BLOCK_SNOW_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SNOW_BREAK); + public static final CompatSoundEvent BLOCK_SNOW_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SNOW_FALL); + public static final CompatSoundEvent ENTITY_SNOW_GOLEM_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SNOW_GOLEM_AMBIENT); + public static final CompatSoundEvent ENTITY_SNOW_GOLEM_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SNOW_GOLEM_DEATH); + public static final CompatSoundEvent ENTITY_SNOW_GOLEM_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SNOW_GOLEM_HURT); + public static final CompatSoundEvent ENTITY_SNOW_GOLEM_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_SNOW_GOLEM_SHOOT); + public static final CompatSoundEvent ENTITY_SNOW_GOLEM_SHEAR = new CompatSoundEvent(SoundEvents.ENTITY_SNOW_GOLEM_SHEAR); + public static final CompatSoundEvent BLOCK_SNOW_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SNOW_HIT); + public static final CompatSoundEvent BLOCK_SNOW_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SNOW_PLACE); + public static final CompatSoundEvent BLOCK_SNOW_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SNOW_STEP); + public static final CompatSoundEvent ENTITY_SPIDER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SPIDER_AMBIENT); + public static final CompatSoundEvent ENTITY_SPIDER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SPIDER_DEATH); + public static final CompatSoundEvent ENTITY_SPIDER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SPIDER_HURT); + public static final CompatSoundEvent ENTITY_SPIDER_STEP = new CompatSoundEvent(SoundEvents.ENTITY_SPIDER_STEP); + public static final CompatSoundEvent ENTITY_SPLASH_POTION_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_SPLASH_POTION_BREAK); + public static final CompatSoundEvent ENTITY_SPLASH_POTION_THROW = new CompatSoundEvent(SoundEvents.ENTITY_SPLASH_POTION_THROW); + public static final CompatSoundEvent BLOCK_SPONGE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_BREAK); + public static final CompatSoundEvent BLOCK_SPONGE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_FALL); + public static final CompatSoundEvent BLOCK_SPONGE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_HIT); + public static final CompatSoundEvent BLOCK_SPONGE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_PLACE); + public static final CompatSoundEvent BLOCK_SPONGE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_STEP); + public static final CompatSoundEvent BLOCK_SPONGE_ABSORB = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_ABSORB); + public static final CompatSoundEvent ITEM_SPYGLASS_USE = new CompatSoundEvent(SoundEvents.ITEM_SPYGLASS_USE); + public static final CompatSoundEvent ITEM_SPYGLASS_STOP_USING = new CompatSoundEvent(SoundEvents.ITEM_SPYGLASS_STOP_USING); + public static final CompatSoundEvent ENTITY_SQUID_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SQUID_AMBIENT); + public static final CompatSoundEvent ENTITY_SQUID_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SQUID_DEATH); + public static final CompatSoundEvent ENTITY_SQUID_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SQUID_HURT); + public static final CompatSoundEvent ENTITY_SQUID_SQUIRT = new CompatSoundEvent(SoundEvents.ENTITY_SQUID_SQUIRT); + public static final CompatSoundEvent BLOCK_STONE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_STONE_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BUTTON_CLICK_OFF); + public static final CompatSoundEvent BLOCK_STONE_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BUTTON_CLICK_ON); + public static final CompatSoundEvent BLOCK_STONE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_STONE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_STONE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_STONE_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_STONE_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_STONE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent ENTITY_STRAY_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_STRAY_AMBIENT); + public static final CompatSoundEvent ENTITY_STRAY_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_STRAY_DEATH); + public static final CompatSoundEvent ENTITY_STRAY_HURT = new CompatSoundEvent(SoundEvents.ENTITY_STRAY_HURT); + public static final CompatSoundEvent ENTITY_STRAY_STEP = new CompatSoundEvent(SoundEvents.ENTITY_STRAY_STEP); + public static final CompatSoundEvent BLOCK_SWEET_BERRY_BUSH_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SWEET_BERRY_BUSH_BREAK); + public static final CompatSoundEvent BLOCK_SWEET_BERRY_BUSH_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SWEET_BERRY_BUSH_PLACE); + public static final CompatSoundEvent BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES = new CompatSoundEvent(SoundEvents.BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES); + public static final CompatSoundEvent ENTITY_TADPOLE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_TADPOLE_DEATH); + public static final CompatSoundEvent ENTITY_TADPOLE_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_TADPOLE_FLOP); + public static final CompatSoundEvent ENTITY_TADPOLE_GROW_UP = new CompatSoundEvent(SoundEvents.ENTITY_TADPOLE_GROW_UP); + public static final CompatSoundEvent ENTITY_TADPOLE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_TADPOLE_HURT); + public static final CompatSoundEvent ENCHANT_THORNS_HIT = new CompatSoundEvent(SoundEvents.ENCHANT_THORNS_HIT); + public static final CompatSoundEvent ENTITY_TNT_PRIMED = new CompatSoundEvent(SoundEvents.ENTITY_TNT_PRIMED); + public static final CompatSoundEvent ITEM_TOTEM_USE = new CompatSoundEvent(SoundEvents.ITEM_TOTEM_USE); + public static final CompatSoundEvent ITEM_TRIDENT_HIT = new CompatSoundEvent(SoundEvents.ITEM_TRIDENT_HIT); + public static final CompatSoundEvent ITEM_TRIDENT_HIT_GROUND = new CompatSoundEvent(SoundEvents.ITEM_TRIDENT_HIT_GROUND); + public static final CompatSoundEvent ITEM_TRIDENT_RETURN = new CompatSoundEvent(SoundEvents.ITEM_TRIDENT_RETURN); + public static final CompatSoundEvent ITEM_TRIDENT_RIPTIDE_1 = new CompatSoundEvent(SoundEvents.ITEM_TRIDENT_RIPTIDE_1); + public static final CompatSoundEvent ITEM_TRIDENT_RIPTIDE_2 = new CompatSoundEvent(SoundEvents.ITEM_TRIDENT_RIPTIDE_2); + public static final CompatSoundEvent ITEM_TRIDENT_RIPTIDE_3 = new CompatSoundEvent(SoundEvents.ITEM_TRIDENT_RIPTIDE_3); + public static final CompatSoundEvent ITEM_TRIDENT_THROW = new CompatSoundEvent(SoundEvents.ITEM_TRIDENT_THROW); + public static final CompatSoundEvent ITEM_TRIDENT_THUNDER = new CompatSoundEvent(SoundEvents.ITEM_TRIDENT_THUNDER); + public static final CompatSoundEvent BLOCK_TRIPWIRE_ATTACH = new CompatSoundEvent(SoundEvents.BLOCK_TRIPWIRE_ATTACH); + public static final CompatSoundEvent BLOCK_TRIPWIRE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_TRIPWIRE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_TRIPWIRE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_TRIPWIRE_CLICK_ON); + public static final CompatSoundEvent BLOCK_TRIPWIRE_DETACH = new CompatSoundEvent(SoundEvents.BLOCK_TRIPWIRE_DETACH); + public static final CompatSoundEvent ENTITY_TROPICAL_FISH_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_TROPICAL_FISH_AMBIENT); + public static final CompatSoundEvent ENTITY_TROPICAL_FISH_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_TROPICAL_FISH_DEATH); + public static final CompatSoundEvent ENTITY_TROPICAL_FISH_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_TROPICAL_FISH_FLOP); + public static final CompatSoundEvent ENTITY_TROPICAL_FISH_HURT = new CompatSoundEvent(SoundEvents.ENTITY_TROPICAL_FISH_HURT); + public static final CompatSoundEvent BLOCK_TUFF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BREAK); + public static final CompatSoundEvent BLOCK_TUFF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_STEP); + public static final CompatSoundEvent BLOCK_TUFF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_PLACE); + public static final CompatSoundEvent BLOCK_TUFF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_HIT); + public static final CompatSoundEvent BLOCK_TUFF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_FALL); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_BREAK); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_FALL); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_HIT); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_PLACE); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_STEP); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_BREAK); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_FALL); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_HIT); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_PLACE); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_STEP); + public static final CompatSoundEvent ENTITY_TURTLE_AMBIENT_LAND = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_AMBIENT_LAND); + public static final CompatSoundEvent ENTITY_TURTLE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_DEATH); + public static final CompatSoundEvent ENTITY_TURTLE_DEATH_BABY = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_DEATH_BABY); + public static final CompatSoundEvent ENTITY_TURTLE_EGG_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_EGG_BREAK); + public static final CompatSoundEvent ENTITY_TURTLE_EGG_CRACK = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_EGG_CRACK); + public static final CompatSoundEvent ENTITY_TURTLE_EGG_HATCH = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_EGG_HATCH); + public static final CompatSoundEvent ENTITY_TURTLE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_HURT); + public static final CompatSoundEvent ENTITY_TURTLE_HURT_BABY = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_HURT_BABY); + public static final CompatSoundEvent ENTITY_TURTLE_LAY_EGG = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_LAY_EGG); + public static final CompatSoundEvent ENTITY_TURTLE_SHAMBLE = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_SHAMBLE); + public static final CompatSoundEvent ENTITY_TURTLE_SHAMBLE_BABY = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_SHAMBLE_BABY); + public static final CompatSoundEvent ENTITY_TURTLE_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_SWIM); + public static final CompatSoundEvent UI_BUTTON_CLICK = new CompatSoundEvent(SoundEvents.UI_BUTTON_CLICK); + public static final CompatSoundEvent UI_LOOM_SELECT_PATTERN = new CompatSoundEvent(SoundEvents.UI_LOOM_SELECT_PATTERN); + public static final CompatSoundEvent UI_LOOM_TAKE_RESULT = new CompatSoundEvent(SoundEvents.UI_LOOM_TAKE_RESULT); + public static final CompatSoundEvent UI_CARTOGRAPHY_TABLE_TAKE_RESULT = new CompatSoundEvent(SoundEvents.UI_CARTOGRAPHY_TABLE_TAKE_RESULT); + public static final CompatSoundEvent UI_STONECUTTER_TAKE_RESULT = new CompatSoundEvent(SoundEvents.UI_STONECUTTER_TAKE_RESULT); + public static final CompatSoundEvent UI_STONECUTTER_SELECT_RECIPE = new CompatSoundEvent(SoundEvents.UI_STONECUTTER_SELECT_RECIPE); + public static final CompatSoundEvent UI_TOAST_CHALLENGE_COMPLETE = new CompatSoundEvent(SoundEvents.UI_TOAST_CHALLENGE_COMPLETE); + public static final CompatSoundEvent UI_TOAST_IN = new CompatSoundEvent(SoundEvents.UI_TOAST_IN); + public static final CompatSoundEvent UI_TOAST_OUT = new CompatSoundEvent(SoundEvents.UI_TOAST_OUT); + public static final CompatSoundEvent BLOCK_VAULT_ACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_ACTIVATE); + public static final CompatSoundEvent BLOCK_VAULT_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_AMBIENT); + public static final CompatSoundEvent BLOCK_VAULT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_BREAK); + public static final CompatSoundEvent BLOCK_VAULT_CLOSE_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_CLOSE_SHUTTER); + public static final CompatSoundEvent BLOCK_VAULT_DEACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_DEACTIVATE); + public static final CompatSoundEvent BLOCK_VAULT_EJECT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_EJECT_ITEM); + public static final CompatSoundEvent BLOCK_VAULT_REJECT_REWARDED_PLAYER = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_REJECT_REWARDED_PLAYER); + public static final CompatSoundEvent BLOCK_VAULT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_FALL); + public static final CompatSoundEvent BLOCK_VAULT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_HIT); + public static final CompatSoundEvent BLOCK_VAULT_INSERT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_INSERT_ITEM); + public static final CompatSoundEvent BLOCK_VAULT_INSERT_ITEM_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_INSERT_ITEM_FAIL); + public static final CompatSoundEvent BLOCK_VAULT_OPEN_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_OPEN_SHUTTER); + public static final CompatSoundEvent BLOCK_VAULT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_PLACE); + public static final CompatSoundEvent BLOCK_VAULT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_STEP); + public static final CompatSoundEvent ENTITY_VEX_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_VEX_AMBIENT); + public static final CompatSoundEvent ENTITY_VEX_CHARGE = new CompatSoundEvent(SoundEvents.ENTITY_VEX_CHARGE); + public static final CompatSoundEvent ENTITY_VEX_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_VEX_DEATH); + public static final CompatSoundEvent ENTITY_VEX_HURT = new CompatSoundEvent(SoundEvents.ENTITY_VEX_HURT); + public static final CompatSoundEvent ENTITY_VILLAGER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_AMBIENT); + public static final CompatSoundEvent ENTITY_VILLAGER_CELEBRATE = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_CELEBRATE); + public static final CompatSoundEvent ENTITY_VILLAGER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_DEATH); + public static final CompatSoundEvent ENTITY_VILLAGER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_HURT); + public static final CompatSoundEvent ENTITY_VILLAGER_NO = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_NO); + public static final CompatSoundEvent ENTITY_VILLAGER_TRADE = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_TRADE); + public static final CompatSoundEvent ENTITY_VILLAGER_YES = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_YES); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_ARMORER = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_ARMORER); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_BUTCHER = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_BUTCHER); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_CARTOGRAPHER = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_CARTOGRAPHER); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_CLERIC = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_CLERIC); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_FARMER = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_FARMER); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_FISHERMAN = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_FISHERMAN); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_FLETCHER = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_FLETCHER); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_LEATHERWORKER = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_LEATHERWORKER); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_LIBRARIAN = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_LIBRARIAN); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_MASON = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_MASON); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_SHEPHERD = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_SHEPHERD); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_TOOLSMITH = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_TOOLSMITH); + public static final CompatSoundEvent ENTITY_VILLAGER_WORK_WEAPONSMITH = new CompatSoundEvent(SoundEvents.ENTITY_VILLAGER_WORK_WEAPONSMITH); + public static final CompatSoundEvent ENTITY_VINDICATOR_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_VINDICATOR_AMBIENT); + public static final CompatSoundEvent ENTITY_VINDICATOR_CELEBRATE = new CompatSoundEvent(SoundEvents.ENTITY_VINDICATOR_CELEBRATE); + public static final CompatSoundEvent ENTITY_VINDICATOR_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_VINDICATOR_DEATH); + public static final CompatSoundEvent ENTITY_VINDICATOR_HURT = new CompatSoundEvent(SoundEvents.ENTITY_VINDICATOR_HURT); + public static final CompatSoundEvent BLOCK_VINE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_VINE_BREAK); + public static final CompatSoundEvent BLOCK_VINE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_VINE_FALL); + public static final CompatSoundEvent BLOCK_VINE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_VINE_HIT); + public static final CompatSoundEvent BLOCK_VINE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_VINE_PLACE); + public static final CompatSoundEvent BLOCK_VINE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_VINE_STEP); + public static final CompatSoundEvent BLOCK_LILY_PAD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_LILY_PAD_PLACE); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_AMBIENT); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_DEATH); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_DISAPPEARED = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_DISAPPEARED); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_DRINK_MILK = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_DRINK_MILK); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_DRINK_POTION = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_DRINK_POTION); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_HURT); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_NO = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_NO); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_REAPPEARED = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_REAPPEARED); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_TRADE = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_TRADE); + public static final CompatSoundEvent ENTITY_WANDERING_TRADER_YES = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_YES); + public static final CompatSoundEvent ENTITY_WARDEN_AGITATED = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_AGITATED); + public static final CompatSoundEvent ENTITY_WARDEN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_AMBIENT); + public static final CompatSoundEvent ENTITY_WARDEN_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_ANGRY); + public static final CompatSoundEvent ENTITY_WARDEN_ATTACK_IMPACT = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_ATTACK_IMPACT); + public static final CompatSoundEvent ENTITY_WARDEN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_DEATH); + public static final CompatSoundEvent ENTITY_WARDEN_DIG = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_DIG); + public static final CompatSoundEvent ENTITY_WARDEN_EMERGE = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_EMERGE); + public static final CompatSoundEvent ENTITY_WARDEN_HEARTBEAT = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_HEARTBEAT); + public static final CompatSoundEvent ENTITY_WARDEN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_HURT); + public static final CompatSoundEvent ENTITY_WARDEN_LISTENING = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_LISTENING); + public static final CompatSoundEvent ENTITY_WARDEN_LISTENING_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_LISTENING_ANGRY); + public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSE = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_NEARBY_CLOSE); + public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSER = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_NEARBY_CLOSER); + public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSEST = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_NEARBY_CLOSEST); + public static final CompatSoundEvent ENTITY_WARDEN_ROAR = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_ROAR); + public static final CompatSoundEvent ENTITY_WARDEN_SNIFF = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_SNIFF); + public static final CompatSoundEvent ENTITY_WARDEN_SONIC_BOOM = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_SONIC_BOOM); + public static final CompatSoundEvent ENTITY_WARDEN_SONIC_CHARGE = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_SONIC_CHARGE); + public static final CompatSoundEvent ENTITY_WARDEN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_STEP); + public static final CompatSoundEvent ENTITY_WARDEN_TENDRIL_CLICKS = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_TENDRIL_CLICKS); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL); + public static final CompatSoundEvent BLOCK_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_SIGN_WAXED_INTERACT_FAIL); + public static final CompatSoundEvent BLOCK_WATER_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_WATER_AMBIENT); + public static final CompatSoundEvent WEATHER_RAIN = new CompatSoundEvent(SoundEvents.WEATHER_RAIN); + public static final CompatSoundEvent WEATHER_RAIN_ABOVE = new CompatSoundEvent(SoundEvents.WEATHER_RAIN_ABOVE); + public static final CompatSoundEvent BLOCK_WET_GRASS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_BREAK); + public static final CompatSoundEvent BLOCK_WET_GRASS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_FALL); + public static final CompatSoundEvent BLOCK_WET_GRASS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_HIT); + public static final CompatSoundEvent BLOCK_WET_GRASS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_PLACE); + public static final CompatSoundEvent BLOCK_WET_GRASS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_STEP); + public static final CompatSoundEvent BLOCK_WET_SPONGE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_BREAK); + public static final CompatSoundEvent BLOCK_WET_SPONGE_DRIES = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_DRIES); + public static final CompatSoundEvent BLOCK_WET_SPONGE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_FALL); + public static final CompatSoundEvent BLOCK_WET_SPONGE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_HIT); + public static final CompatSoundEvent BLOCK_WET_SPONGE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_PLACE); + public static final CompatSoundEvent BLOCK_WET_SPONGE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_STEP); + public static final CompatSoundEvent ENTITY_WIND_CHARGE_WIND_BURST = new CompatSoundEvent(SoundEvents.ENTITY_WIND_CHARGE_WIND_BURST); + public static final CompatSoundEvent ENTITY_WIND_CHARGE_THROW = new CompatSoundEvent(SoundEvents.ENTITY_WIND_CHARGE_THROW); + public static final CompatSoundEvent ENTITY_WITCH_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_AMBIENT); + public static final CompatSoundEvent ENTITY_WITCH_CELEBRATE = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_CELEBRATE); + public static final CompatSoundEvent ENTITY_WITCH_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_DEATH); + public static final CompatSoundEvent ENTITY_WITCH_DRINK = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_DRINK); + public static final CompatSoundEvent ENTITY_WITCH_HURT = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_HURT); + public static final CompatSoundEvent ENTITY_WITCH_THROW = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_THROW); + public static final CompatSoundEvent ENTITY_WITHER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_AMBIENT); + public static final CompatSoundEvent ENTITY_WITHER_BREAK_BLOCK = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_BREAK_BLOCK); + public static final CompatSoundEvent ENTITY_WITHER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_DEATH); + public static final CompatSoundEvent ENTITY_WITHER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_HURT); + public static final CompatSoundEvent ENTITY_WITHER_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SHOOT); + public static final CompatSoundEvent ENTITY_WITHER_SKELETON_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SKELETON_AMBIENT); + public static final CompatSoundEvent ENTITY_WITHER_SKELETON_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SKELETON_DEATH); + public static final CompatSoundEvent ENTITY_WITHER_SKELETON_HURT = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SKELETON_HURT); + public static final CompatSoundEvent ENTITY_WITHER_SKELETON_STEP = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SKELETON_STEP); + public static final CompatSoundEvent ENTITY_WITHER_SPAWN = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SPAWN); + public static final CompatSoundEvent ITEM_WOLF_ARMOR_BREAK = new CompatSoundEvent(SoundEvents.ITEM_WOLF_ARMOR_BREAK); + public static final CompatSoundEvent ITEM_WOLF_ARMOR_CRACK = new CompatSoundEvent(SoundEvents.ITEM_WOLF_ARMOR_CRACK); + public static final CompatSoundEvent ITEM_WOLF_ARMOR_DAMAGE = new CompatSoundEvent(SoundEvents.ITEM_WOLF_ARMOR_DAMAGE); + public static final CompatSoundEvent ITEM_WOLF_ARMOR_REPAIR = new CompatSoundEvent(SoundEvents.ITEM_WOLF_ARMOR_REPAIR); + public static final CompatSoundEvent ENTITY_WOLF_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_AMBIENT); + public static final CompatSoundEvent ENTITY_WOLF_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_DEATH); + public static final CompatSoundEvent ENTITY_WOLF_GROWL = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_GROWL); + public static final CompatSoundEvent ENTITY_WOLF_HOWL = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_HOWL); + public static final CompatSoundEvent ENTITY_WOLF_HURT = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_HURT); + public static final CompatSoundEvent ENTITY_WOLF_PANT = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_PANT); + public static final CompatSoundEvent ENTITY_WOLF_SHAKE = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_SHAKE); + public static final CompatSoundEvent ENTITY_WOLF_STEP = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_STEP); + public static final CompatSoundEvent ENTITY_WOLF_WHINE = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_WHINE); + public static final CompatSoundEvent BLOCK_WOODEN_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_WOODEN_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_DOOR_OPEN); + public static final CompatSoundEvent BLOCK_WOODEN_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_WOODEN_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_WOODEN_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_OFF); + public static final CompatSoundEvent BLOCK_WOODEN_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_ON); + public static final CompatSoundEvent BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_WOOL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOL_BREAK); + public static final CompatSoundEvent BLOCK_WOOL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOL_FALL); + public static final CompatSoundEvent BLOCK_WOOL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOL_HIT); + public static final CompatSoundEvent BLOCK_WOOL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOL_PLACE); + public static final CompatSoundEvent BLOCK_WOOL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOL_STEP); + public static final CompatSoundEvent ENTITY_ZOGLIN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ZOGLIN_AMBIENT); + public static final CompatSoundEvent ENTITY_ZOGLIN_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_ZOGLIN_ANGRY); + public static final CompatSoundEvent ENTITY_ZOGLIN_ATTACK = new CompatSoundEvent(SoundEvents.ENTITY_ZOGLIN_ATTACK); + public static final CompatSoundEvent ENTITY_ZOGLIN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ZOGLIN_DEATH); + public static final CompatSoundEvent ENTITY_ZOGLIN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ZOGLIN_HURT); + public static final CompatSoundEvent ENTITY_ZOGLIN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_ZOGLIN_STEP); + public static final CompatSoundEvent ENTITY_ZOMBIE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_AMBIENT); + public static final CompatSoundEvent ENTITY_ZOMBIE_ATTACK_WOODEN_DOOR = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_ATTACK_WOODEN_DOOR); + public static final CompatSoundEvent ENTITY_ZOMBIE_ATTACK_IRON_DOOR = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_ATTACK_IRON_DOOR); + public static final CompatSoundEvent ENTITY_ZOMBIE_BREAK_WOODEN_DOOR = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_BREAK_WOODEN_DOOR); + public static final CompatSoundEvent ENTITY_ZOMBIE_CONVERTED_TO_DROWNED = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_CONVERTED_TO_DROWNED); + public static final CompatSoundEvent ENTITY_ZOMBIE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_DEATH); + public static final CompatSoundEvent ENTITY_ZOMBIE_DESTROY_EGG = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_DESTROY_EGG); + public static final CompatSoundEvent ENTITY_ZOMBIE_HORSE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_HORSE_AMBIENT); + public static final CompatSoundEvent ENTITY_ZOMBIE_HORSE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_HORSE_DEATH); + public static final CompatSoundEvent ENTITY_ZOMBIE_HORSE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_HORSE_HURT); + public static final CompatSoundEvent ENTITY_ZOMBIE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_HURT); + public static final CompatSoundEvent ENTITY_ZOMBIE_INFECT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_INFECT); + public static final CompatSoundEvent ENTITY_ZOMBIFIED_PIGLIN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIFIED_PIGLIN_AMBIENT); + public static final CompatSoundEvent ENTITY_ZOMBIFIED_PIGLIN_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIFIED_PIGLIN_ANGRY); + public static final CompatSoundEvent ENTITY_ZOMBIFIED_PIGLIN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIFIED_PIGLIN_DEATH); + public static final CompatSoundEvent ENTITY_ZOMBIFIED_PIGLIN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIFIED_PIGLIN_HURT); + public static final CompatSoundEvent ENTITY_ZOMBIE_STEP = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_STEP); + public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_AMBIENT); + public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_CONVERTED = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_CONVERTED); + public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_CURE = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_CURE); + public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_DEATH); + public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_HURT); + public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_STEP = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_STEP); + public static final CompatSoundEvent EVENT_MOB_EFFECT_BAD_OMEN = new CompatSoundEvent(SoundEvents.EVENT_MOB_EFFECT_BAD_OMEN); + public static final CompatSoundEvent EVENT_MOB_EFFECT_TRIAL_OMEN = new CompatSoundEvent(SoundEvents.EVENT_MOB_EFFECT_TRIAL_OMEN); + public static final CompatSoundEvent EVENT_MOB_EFFECT_RAID_OMEN = new CompatSoundEvent(SoundEvents.EVENT_MOB_EFFECT_RAID_OMEN); + + static { + GOAT_HORN_SOUNDS = SoundEvents.GOAT_HORN_SOUNDS.stream().map(CompatSoundEvent::new).collect(ImmutableList.toImmutableList()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java index 52ccdc30b..b22d7129d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java @@ -394,4 +394,8 @@ public static Optional getSimpleItemStack(NbtCompound nbt, String key return Optional.of(stack); } + + public static NbtList createNbtList() { + return new NbtList(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PersistentStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PersistentStateUtil.java index 35c861d15..a3ab6cd94 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PersistentStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PersistentStateUtil.java @@ -22,4 +22,8 @@ public static PersistentStateManager getManagerFromServer(MinecraftServer server public static PersistentStateManager getManagerFromWorld(ServerWorld world) { return world.getPersistentStateManager(); } + + public static void markDirty(PersistentState state) { + state.markDirty(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java index 837bb8b7f..f68dd0bfb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/VoxelShapeUtil.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.util.math.Box; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; @@ -35,4 +36,8 @@ public static VoxelShape fullCube() { public static VoxelShape blockCuboid(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { return VoxelShapes.cuboid(minX / 16.0, minY / 16.0, minZ / 16.0, maxX / 16.0, maxY / 16.0, maxZ / 16.0); } + + public static Box getBoundingBox(VoxelShape shape) { + return shape.getBoundingBox(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 60ab2164a..aa4f2d6e3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -24,6 +24,7 @@ import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import org.jetbrains.annotations.Nullable; import java.util.Objects; @@ -92,6 +93,14 @@ public static void playSound(World world, @Nullable Player player, BlockPos pos, world.playSound(entity, pos, sound, category, volume, pitch); } + public static void playSound(World world, @Nullable Player player, BlockPos pos, CompatSoundEvent sound, SoundCategory category, float volume, float pitch) { + playSound(world, player, pos, sound.getSoundEvent(), category, volume, pitch); + } + + public static void playSound(World world, double x, double y, double z, CompatSoundEvent sound, SoundCategory category, float volume, float pitch, boolean useDistance) { + world.playSound(x, y, z, sound.getSoundEvent(), category, volume, pitch, useDistance); + } + public static void sendEntityStatus(World world, Entity entity, byte status) { world.sendEntityStatus(entity, status); } @@ -221,6 +230,9 @@ public static boolean breakBlock(World world, BlockPos pos) { } public static boolean breakBlock(World world, BlockPos pos, boolean drop, @Nullable Player player) { + if (player == null) + return world.breakBlock(pos, drop, null); + return world.breakBlock(pos, drop, player.getPlayerEntity()); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java index 695b74065..4bae9d4ab 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java @@ -1,14 +1,58 @@ package net.pitan76.mcpitanlib.api.util.client; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.texture.TextureManager; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.resource.ResourceManager; +import net.pitan76.mcpitanlib.api.entity.Player; public class ClientUtil { public static void setScreen(Screen screen) { - MinecraftClient.getInstance().setScreen(screen); + getClient().setScreen(screen); } public static Screen getScreen() { - return MinecraftClient.getInstance().currentScreen; + return getClient().currentScreen; + } + + public static Player getPlayer() { + return new Player(getClientPlayer()); + } + + public static ClientPlayerEntity getClientPlayer() { + return getClient().player; + } + + public static MinecraftClient getClient() { + return MinecraftClient.getInstance(); + } + + public static TextRenderer getTextRenderer() { + return getClient().textRenderer; + } + + public static ItemRenderer getItemRenderer() { + return getClient().getItemRenderer(); + } + + public static ResourceManager getResourceManager() { + return getClient().getResourceManager(); + } + + public static TextureManager getTextureManager() { + return getClient().getTextureManager(); + } + + public static ClientWorld getWorld() { + return getClient().world; + } + + public static GameRenderer getGameRenderer() { + return getClient().gameRenderer; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java new file mode 100644 index 000000000..bbfcb6cd5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java @@ -0,0 +1,54 @@ +package net.pitan76.mcpitanlib.core.serialization; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; + +import java.util.function.Function; + +public class CompatMapCodec { + @Deprecated + public MapCodec codec; + + @Deprecated + public CompatMapCodec(MapCodec codec) { + this.codec = codec; + } + + @Deprecated + public static CompatMapCodec of(MapCodec codec) { + return new CompatMapCodec<>(codec); + } + + public CompatMapCodec() { + + } + + public static CompatMapCodec of() { + return new CompatMapCodec<>(); + } + + @Deprecated + public MapCodec getCodec() { + return codec; + } + + public static RecordCodecBuilder createSettingsCodec() { + return AbstractBlock.Settings.CODEC.fieldOf("properties").forGetter(AbstractBlock::getSettings); + } + + public static CompatMapCodec createCodec(Function blockFromSettings) { + return of(RecordCodecBuilder.mapCodec((instance) -> instance.group(createSettingsCodec()).apply(instance, blockFromSettings))); + } + + public static RecordCodecBuilder createCompatSettingsCodec() { + return CompatibleBlockSettings.CODEC.fieldOf("properties").forGetter(ExtendBlock::getCompatSettings); + } + + public static CompatMapCodec createCodecOfExtendBlock(Function blockFromSettings) { + return of(RecordCodecBuilder.mapCodec((instance) -> instance.group(createCompatSettingsCodec()).apply(instance, blockFromSettings))); + } +} diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java new file mode 100644 index 000000000..0173477a2 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java @@ -0,0 +1,89 @@ +package net.pitan76.mcpitanlib.api.client.event.fabric; + +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.client.render.*; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.profiler.Profiler; +import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; +import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; +import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; +import org.jetbrains.annotations.Nullable; +import org.joml.Matrix4f; + +public class WorldRenderRegistryImpl { + public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { + WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register(((worldRenderContext, hitResult) -> listener.beforeBlockOutline(new BeforeBlockOutlineEvent( + new WorldRenderContext() { + @Override + public WorldRenderer worldRenderer() { + return worldRenderContext.worldRenderer(); + } + + @Override + public MatrixStack matrixStack() { + return worldRenderContext.matrixStack(); + } + + @Override + public float tickDelta() { + return worldRenderContext.tickCounter().getTickDelta(true); + } + + @Override + public long limitTime() { + return (long) worldRenderContext.tickCounter().getLastDuration(); + } + + @Override + public boolean blockOutlines() { + return worldRenderContext.blockOutlines(); + } + + @Override + public Camera camera() { + return worldRenderContext.camera(); + } + + @Override + public GameRenderer gameRenderer() { + return worldRenderContext.gameRenderer(); + } + + @Override + public LightmapTextureManager lightmapTextureManager() { + return worldRenderContext.lightmapTextureManager(); + } + + @Override + public Matrix4f projectionMatrix() { + return worldRenderContext.projectionMatrix(); + } + + @Override + public ClientWorld world() { + return worldRenderContext.world(); + } + + @Override + public Profiler profiler() { + return worldRenderContext.profiler(); + } + + @Override + public boolean advancedTranslucency() { + return worldRenderContext.advancedTranslucency(); + } + + @Override + public @Nullable VertexConsumerProvider consumers() { + return worldRenderContext.consumers(); + } + + @Override + public @Nullable Frustum frustum() { + return worldRenderContext.frustum(); + } + }, hitResult)))); + } +} diff --git a/info.properties b/info.properties index 65cab9385..109c811e5 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.0 +mod_version=2.4.1 maven_group=net.pitan76 \ No newline at end of file diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java new file mode 100644 index 000000000..15b9d7fc1 --- /dev/null +++ b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java @@ -0,0 +1,105 @@ +package net.pitan76.mcpitanlib.api.client.event.neoforge; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.*; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.profiler.Profiler; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.client.event.RenderHighlightEvent; +import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; +import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; +import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; +import org.joml.Matrix4f; + +import java.util.ArrayList; +import java.util.List; + +public class WorldRenderRegistryImpl { + + public static List beforeBlockOutlineListeners = new ArrayList<>(); + + @SubscribeEvent + public static void renderOutlineEvent(RenderHighlightEvent event) { + for (BeforeBlockOutlineListener listener : beforeBlockOutlineListeners) { + listener.beforeBlockOutline(new BeforeBlockOutlineEvent(new WorldRenderContext() { + @Override + public WorldRenderer worldRenderer() { + return event.getLevelRenderer(); + } + + @Override + public MatrixStack matrixStack() { + return event.getPoseStack(); + } + + @Override + public float tickDelta() { + return event.getDeltaTracker().getTickDelta(true); + } + + @Override + public long limitTime() { + return (long) event.getDeltaTracker().getTickDelta(false); + } + + @Override + public boolean blockOutlines() { + return event.getTarget().getType() == HitResult.Type.BLOCK; + } + + @Override + public Camera camera() { + return event.getCamera(); + } + + @Override + public GameRenderer gameRenderer() { + return MinecraftClient.getInstance().gameRenderer; + } + + @Override + public LightmapTextureManager lightmapTextureManager() { + return MinecraftClient.getInstance().gameRenderer.getLightmapTextureManager(); + } + + @Deprecated + @Override + public Matrix4f projectionMatrix() { + return null; + } + + @Override + public ClientWorld world() { + return MinecraftClient.getInstance().world; + } + + @Override + public Profiler profiler() { + return MinecraftClient.getInstance().getProfiler(); + } + + @Deprecated + @Override + public boolean advancedTranslucency() { + return event.getLevelRenderer().isTerrainRenderComplete(); + } + + @Override + public VertexConsumerProvider consumers() { + return event.getMultiBufferSource(); + } + + @Override + public Frustum frustum() { + return event.getLevelRenderer().getFrustum(); + } + }, event.getTarget())); + } + } + + public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { + beforeBlockOutlineListeners.add(listener); + } +} From bfd2b2f7dfe42927546878f28ce5bacefd0fc538 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:27:50 +0900 Subject: [PATCH 363/617] add Networking ignore func --- .../net/pitan76/mcpitanlib/api/network/ServerNetworking.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/ServerNetworking.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/ServerNetworking.java index 69577d801..118c6addb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/network/ServerNetworking.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/ServerNetworking.java @@ -30,4 +30,8 @@ public static void registerReceiver(Identifier identifier, ServerNetworkHandler public interface ServerNetworkHandler { void receive(MinecraftServer server, ServerPlayerEntity player, PacketByteBuf buf); } + + public static void registerS2CPayloadType(Identifier identifier) { + // ignore + } } From dccce1ef889522157961484bce77ca3f16044121 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:50:52 +0900 Subject: [PATCH 364/617] fix APIs 1201-1 --- .../api/block/CompatPillarBlock.java | 9 +-------- .../mcpitanlib/api/block/CompatSlabBlock.java | 19 +++++++------------ .../api/block/CompatStairsBlock.java | 15 +++++---------- .../mcpitanlib/api/block/ExtendBlock.java | 8 +------- .../core/serialization/CompatMapCodec.java | 13 ++----------- 5 files changed, 16 insertions(+), 48 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java index 7f358ac91..8fb45cc90 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.block; -import com.mojang.serialization.MapCodec; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.PillarBlock; @@ -52,13 +51,7 @@ public BlockState getPlacementState(PlacementStateArgs args, Options options) { return ExtendBlockProvider.super.getPlacementState(args, options); } - @Deprecated - @Override - public MapCodec getCodec() { - return getCompatCodec().getCodec(); - } - public CompatMapCodec getCompatCodec() { - return CompatMapCodec.of(super.getCodec()); + return CompatMapCodec.of(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java index 251dcda7f..b712f051b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java @@ -1,13 +1,13 @@ package net.pitan76.mcpitanlib.api.block; -import com.mojang.serialization.MapCodec; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.SlabBlock; -import net.minecraft.block.StairsBlock; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.CanPathfindThroughArgs; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; @@ -55,24 +55,19 @@ public BlockState getPlacementState(PlacementStateArgs args, Options options) { return ExtendBlockProvider.super.getPlacementState(args, options); } - @Deprecated - @Override - public MapCodec getCodec() { - return getCompatCodec().getCodec(); - } - public CompatMapCodec getCompatCodec() { - return CompatMapCodec.of(super.getCodec()); + return CompatMapCodec.of(); } @Deprecated @Override - public boolean canPathfindThrough(BlockState state, NavigationType type) { - return canPathfindThrough(new CanPathfindThroughArgs(state, type)); + public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { + return canPathfindThrough(new CanPathfindThroughArgs(state, world, pos, type)); } + @SuppressWarnings("removal") public boolean canPathfindThrough(CanPathfindThroughArgs args) { - return super.canPathfindThrough(args.state, args.type); + return super.canPathfindThrough(args.state, args.getBlockView(), args.getPos(), args.type); } @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java index 937a7ec9a..8d4c23770 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java @@ -72,24 +72,19 @@ public VoxelShape getOutlineShape(OutlineShapeEvent event, Options options) { return ExtendBlockProvider.super.getOutlineShape(event, options); } - @Deprecated - @Override - public MapCodec getCodec() { - return getCompatCodec().getCodec(); - } - public CompatMapCodec getCompatCodec() { - return CompatMapCodec.of(super.getCodec()); + return CompatMapCodec.of(); } @Deprecated @Override - public boolean canPathfindThrough(BlockState state, NavigationType type) { - return canPathfindThrough(new CanPathfindThroughArgs(state, type)); + public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { + return canPathfindThrough(new CanPathfindThroughArgs(state, world, pos, type)); } + @SuppressWarnings("removal") public boolean canPathfindThrough(CanPathfindThroughArgs args) { - return super.canPathfindThrough(args.state, args.type); + return super.canPathfindThrough(args.state, args.getBlockView(), args.getPos(), args.type); } @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 6f27ac85f..52b6bc214 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -322,13 +322,7 @@ public void onBlockBreakStart(BlockBreakStartEvent e) { super.onBlockBreakStart(e.state, e.world, e.pos, e.player.getPlayerEntity()); } - @Deprecated - @Override - protected MapCodec getCodec() { - return getCompatCodec().getCodec(); - } - public CompatMapCodec getCompatCodec() { - return CompatMapCodec.of(super.getCodec()); + return CompatMapCodec.of(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java index bbfcb6cd5..6efd47f57 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java @@ -1,7 +1,6 @@ package net.pitan76.mcpitanlib.core.serialization; import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; @@ -36,19 +35,11 @@ public MapCodec getCodec() { return codec; } - public static RecordCodecBuilder createSettingsCodec() { - return AbstractBlock.Settings.CODEC.fieldOf("properties").forGetter(AbstractBlock::getSettings); - } - public static CompatMapCodec createCodec(Function blockFromSettings) { - return of(RecordCodecBuilder.mapCodec((instance) -> instance.group(createSettingsCodec()).apply(instance, blockFromSettings))); - } - - public static RecordCodecBuilder createCompatSettingsCodec() { - return CompatibleBlockSettings.CODEC.fieldOf("properties").forGetter(ExtendBlock::getCompatSettings); + return of(); } public static CompatMapCodec createCodecOfExtendBlock(Function blockFromSettings) { - return of(RecordCodecBuilder.mapCodec((instance) -> instance.group(createCompatSettingsCodec()).apply(instance, blockFromSettings))); + return of(); } } From 02acb923ef635d2ac611ed27f47e11c628255488 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:44:43 +0900 Subject: [PATCH 365/617] fix APIs 1204 --- .../api/sound/CompatSoundEvents.java | 277 +++++++++--------- .../event/fabric/WorldRenderRegistryImpl.java | 4 +- .../event/forge/WorldRenderRegistryImpl.java | 105 +++++++ .../neoforge/WorldRenderRegistryImpl.java | 4 +- 4 files changed, 246 insertions(+), 144 deletions(-) create mode 100644 forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java index 22b271ead..bab540df5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java @@ -1,11 +1,8 @@ package net.pitan76.mcpitanlib.api.sound; import com.google.common.collect.ImmutableList; -import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvents; -import java.util.stream.Collectors; - public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_ALLAY_AMBIENT_WITH_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_AMBIENT_WITH_ITEM); public static final CompatSoundEvent ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM); @@ -61,19 +58,19 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_ANVIL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_PLACE); public static final CompatSoundEvent BLOCK_ANVIL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_STEP); public static final CompatSoundEvent BLOCK_ANVIL_USE = new CompatSoundEvent(SoundEvents.BLOCK_ANVIL_USE); - public static final CompatSoundEvent ENTITY_ARMADILLO_EAT = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_EAT); - public static final CompatSoundEvent ENTITY_ARMADILLO_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_HURT); - public static final CompatSoundEvent ENTITY_ARMADILLO_HURT_REDUCED = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_HURT_REDUCED); - public static final CompatSoundEvent ENTITY_ARMADILLO_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_AMBIENT); - public static final CompatSoundEvent ENTITY_ARMADILLO_STEP = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_STEP); - public static final CompatSoundEvent ENTITY_ARMADILLO_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_DEATH); - public static final CompatSoundEvent ENTITY_ARMADILLO_ROLL = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_ROLL); - public static final CompatSoundEvent ENTITY_ARMADILLO_LAND = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_LAND); - public static final CompatSoundEvent ENTITY_ARMADILLO_SCUTE_DROP = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_SCUTE_DROP); - public static final CompatSoundEvent ENTITY_ARMADILLO_UNROLL_FINISH = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_UNROLL_FINISH); - public static final CompatSoundEvent ENTITY_ARMADILLO_PEEK = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_PEEK); - public static final CompatSoundEvent ENTITY_ARMADILLO_UNROLL_START = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_UNROLL_START); - public static final CompatSoundEvent ENTITY_ARMADILLO_BRUSH = new CompatSoundEvent(SoundEvents.ENTITY_ARMADILLO_BRUSH); + public static final CompatSoundEvent ENTITY_ARMADILLO_EAT = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); + public static final CompatSoundEvent ENTITY_ARMADILLO_HURT = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_HURT); + public static final CompatSoundEvent ENTITY_ARMADILLO_HURT_REDUCED = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_HURT); + public static final CompatSoundEvent ENTITY_ARMADILLO_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_AMBIENT); + public static final CompatSoundEvent ENTITY_ARMADILLO_STEP = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_STEP); + public static final CompatSoundEvent ENTITY_ARMADILLO_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_DEATH); + public static final CompatSoundEvent ENTITY_ARMADILLO_ROLL = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); + public static final CompatSoundEvent ENTITY_ARMADILLO_LAND = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); + public static final CompatSoundEvent ENTITY_ARMADILLO_SCUTE_DROP = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); + public static final CompatSoundEvent ENTITY_ARMADILLO_UNROLL_FINISH = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); + public static final CompatSoundEvent ENTITY_ARMADILLO_PEEK = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); + public static final CompatSoundEvent ENTITY_ARMADILLO_UNROLL_START = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); + public static final CompatSoundEvent ENTITY_ARMADILLO_BRUSH = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); public static final CompatSoundEvent ITEM_ARMOR_EQUIP_CHAIN = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_CHAIN); public static final CompatSoundEvent ITEM_ARMOR_EQUIP_DIAMOND = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND); public static final CompatSoundEvent ITEM_ARMOR_EQUIP_ELYTRA = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_ELYTRA); @@ -83,8 +80,8 @@ public class CompatSoundEvents { public static final CompatSoundEvent ITEM_ARMOR_EQUIP_LEATHER = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_LEATHER); public static final CompatSoundEvent ITEM_ARMOR_EQUIP_NETHERITE = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_NETHERITE); public static final CompatSoundEvent ITEM_ARMOR_EQUIP_TURTLE = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_TURTLE); - public static final CompatSoundEvent ITEM_ARMOR_EQUIP_WOLF = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_WOLF); - public static final CompatSoundEvent ITEM_ARMOR_UNEQUIP_WOLF = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_UNEQUIP_WOLF); + public static final CompatSoundEvent ITEM_ARMOR_EQUIP_WOLF = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_IRON); + public static final CompatSoundEvent ITEM_ARMOR_UNEQUIP_WOLF = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_IRON); public static final CompatSoundEvent ENTITY_ARMOR_STAND_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_ARMOR_STAND_BREAK); public static final CompatSoundEvent ENTITY_ARMOR_STAND_FALL = new CompatSoundEvent(SoundEvents.ENTITY_ARMOR_STAND_FALL); public static final CompatSoundEvent ENTITY_ARMOR_STAND_HIT = new CompatSoundEvent(SoundEvents.ENTITY_ARMOR_STAND_HIT); @@ -176,11 +173,11 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_BLAZE_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_BLAZE_SHOOT); public static final CompatSoundEvent ENTITY_BOAT_PADDLE_LAND = new CompatSoundEvent(SoundEvents.ENTITY_BOAT_PADDLE_LAND); public static final CompatSoundEvent ENTITY_BOAT_PADDLE_WATER = new CompatSoundEvent(SoundEvents.ENTITY_BOAT_PADDLE_WATER); - public static final CompatSoundEvent ENTITY_BOGGED_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_AMBIENT); - public static final CompatSoundEvent ENTITY_BOGGED_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_DEATH); - public static final CompatSoundEvent ENTITY_BOGGED_HURT = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_HURT); - public static final CompatSoundEvent ENTITY_BOGGED_SHEAR = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_SHEAR); - public static final CompatSoundEvent ENTITY_BOGGED_STEP = new CompatSoundEvent(SoundEvents.ENTITY_BOGGED_STEP); + public static final CompatSoundEvent ENTITY_BOGGED_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_AMBIENT); + public static final CompatSoundEvent ENTITY_BOGGED_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_DEATH); + public static final CompatSoundEvent ENTITY_BOGGED_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_HURT); + public static final CompatSoundEvent ENTITY_BOGGED_SHEAR = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_SHEAR); + public static final CompatSoundEvent ENTITY_BOGGED_STEP = new CompatSoundEvent(SoundEvents.ENTITY_SKELETON_STEP); public static final CompatSoundEvent BLOCK_BONE_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BONE_BLOCK_BREAK); public static final CompatSoundEvent BLOCK_BONE_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BONE_BLOCK_FALL); public static final CompatSoundEvent BLOCK_BONE_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BONE_BLOCK_HIT); @@ -193,19 +190,19 @@ public class CompatSoundEvents { public static final CompatSoundEvent ITEM_BOTTLE_EMPTY = new CompatSoundEvent(SoundEvents.ITEM_BOTTLE_EMPTY); public static final CompatSoundEvent ITEM_BOTTLE_FILL = new CompatSoundEvent(SoundEvents.ITEM_BOTTLE_FILL); public static final CompatSoundEvent ITEM_BOTTLE_FILL_DRAGONBREATH = new CompatSoundEvent(SoundEvents.ITEM_BOTTLE_FILL_DRAGONBREATH); - public static final CompatSoundEvent ENTITY_BREEZE_CHARGE = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_CHARGE); - public static final CompatSoundEvent ENTITY_BREEZE_DEFLECT = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_DEFLECT); - public static final CompatSoundEvent ENTITY_BREEZE_INHALE = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_INHALE); - public static final CompatSoundEvent ENTITY_BREEZE_IDLE_GROUND = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_IDLE_GROUND); - public static final CompatSoundEvent ENTITY_BREEZE_IDLE_AIR = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_IDLE_AIR); - public static final CompatSoundEvent ENTITY_BREEZE_SHOOT = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_SHOOT); - public static final CompatSoundEvent ENTITY_BREEZE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_JUMP); - public static final CompatSoundEvent ENTITY_BREEZE_LAND = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_LAND); - public static final CompatSoundEvent ENTITY_BREEZE_SLIDE = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_SLIDE); - public static final CompatSoundEvent ENTITY_BREEZE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_DEATH); - public static final CompatSoundEvent ENTITY_BREEZE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_HURT); - public static final CompatSoundEvent ENTITY_BREEZE_WHIRL = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_WHIRL); - public static final CompatSoundEvent ENTITY_BREEZE_WIND_BURST = new CompatSoundEvent(SoundEvents.ENTITY_BREEZE_WIND_BURST); + public static final CompatSoundEvent ENTITY_BREEZE_CHARGE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_DEFLECT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_INHALE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_IDLE_GROUND = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_IDLE_AIR = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_SHOOT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_JUMP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_LAND = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_SLIDE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_HURT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_WHIRL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_BREEZE_WIND_BURST = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_BREWING_STAND_BREW = new CompatSoundEvent(SoundEvents.BLOCK_BREWING_STAND_BREW); public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GENERIC = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_GENERIC); public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_SAND = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_SAND); @@ -327,11 +324,11 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_CHORUS_FLOWER_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_CHORUS_FLOWER_DEATH); public static final CompatSoundEvent BLOCK_CHORUS_FLOWER_GROW = new CompatSoundEvent(SoundEvents.BLOCK_CHORUS_FLOWER_GROW); public static final CompatSoundEvent ITEM_CHORUS_FRUIT_TELEPORT = new CompatSoundEvent(SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT); - public static final CompatSoundEvent BLOCK_COBWEB_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_BREAK); - public static final CompatSoundEvent BLOCK_COBWEB_STEP = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_STEP); - public static final CompatSoundEvent BLOCK_COBWEB_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_PLACE); - public static final CompatSoundEvent BLOCK_COBWEB_HIT = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_HIT); - public static final CompatSoundEvent BLOCK_COBWEB_FALL = new CompatSoundEvent(SoundEvents.BLOCK_COBWEB_FALL); + public static final CompatSoundEvent BLOCK_COBWEB_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_COBWEB_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_COBWEB_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_COBWEB_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COBWEB_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); public static final CompatSoundEvent ENTITY_COD_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_COD_AMBIENT); public static final CompatSoundEvent ENTITY_COD_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_COD_DEATH); public static final CompatSoundEvent ENTITY_COD_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_COD_FLOP); @@ -346,27 +343,27 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_CONDUIT_AMBIENT_SHORT = new CompatSoundEvent(SoundEvents.BLOCK_CONDUIT_AMBIENT_SHORT); public static final CompatSoundEvent BLOCK_CONDUIT_ATTACK_TARGET = new CompatSoundEvent(SoundEvents.BLOCK_CONDUIT_ATTACK_TARGET); public static final CompatSoundEvent BLOCK_CONDUIT_DEACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_CONDUIT_DEACTIVATE); - public static final CompatSoundEvent BLOCK_COPPER_BULB_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_BREAK); - public static final CompatSoundEvent BLOCK_COPPER_BULB_STEP = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_STEP); - public static final CompatSoundEvent BLOCK_COPPER_BULB_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_PLACE); - public static final CompatSoundEvent BLOCK_COPPER_BULB_HIT = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_HIT); - public static final CompatSoundEvent BLOCK_COPPER_BULB_FALL = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_FALL); - public static final CompatSoundEvent BLOCK_COPPER_BULB_TURN_ON = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_TURN_ON); - public static final CompatSoundEvent BLOCK_COPPER_BULB_TURN_OFF = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BULB_TURN_OFF); + public static final CompatSoundEvent BLOCK_COPPER_BULB_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_BULB_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_BULB_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_BULB_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_BULB_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_BULB_TURN_ON = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_BULB_TURN_OFF = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_COPPER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_BREAK); public static final CompatSoundEvent BLOCK_COPPER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_STEP); public static final CompatSoundEvent BLOCK_COPPER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_PLACE); public static final CompatSoundEvent BLOCK_COPPER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_HIT); public static final CompatSoundEvent BLOCK_COPPER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_FALL); - public static final CompatSoundEvent BLOCK_COPPER_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_DOOR_CLOSE); - public static final CompatSoundEvent BLOCK_COPPER_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_DOOR_OPEN); - public static final CompatSoundEvent BLOCK_COPPER_GRATE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_BREAK); - public static final CompatSoundEvent BLOCK_COPPER_GRATE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_STEP); - public static final CompatSoundEvent BLOCK_COPPER_GRATE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_PLACE); - public static final CompatSoundEvent BLOCK_COPPER_GRATE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_HIT); - public static final CompatSoundEvent BLOCK_COPPER_GRATE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_GRATE_FALL); - public static final CompatSoundEvent BLOCK_COPPER_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_TRAPDOOR_CLOSE); - public static final CompatSoundEvent BLOCK_COPPER_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_COPPER_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_COPPER_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_GRATE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_COPPER_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_CORAL_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CORAL_BLOCK_BREAK); public static final CompatSoundEvent BLOCK_CORAL_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CORAL_BLOCK_FALL); public static final CompatSoundEvent BLOCK_CORAL_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CORAL_BLOCK_HIT); @@ -377,8 +374,8 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_COW_HURT = new CompatSoundEvent(SoundEvents.ENTITY_COW_HURT); public static final CompatSoundEvent ENTITY_COW_MILK = new CompatSoundEvent(SoundEvents.ENTITY_COW_MILK); public static final CompatSoundEvent ENTITY_COW_STEP = new CompatSoundEvent(SoundEvents.ENTITY_COW_STEP); - public static final CompatSoundEvent BLOCK_CRAFTER_CRAFT = new CompatSoundEvent(SoundEvents.BLOCK_CRAFTER_CRAFT); - public static final CompatSoundEvent BLOCK_CRAFTER_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_CRAFTER_FAIL); + public static final CompatSoundEvent BLOCK_CRAFTER_CRAFT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_CRAFTER_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_CREEPER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_CREEPER_DEATH); public static final CompatSoundEvent ENTITY_CREEPER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_CREEPER_HURT); public static final CompatSoundEvent ENTITY_CREEPER_PRIMED = new CompatSoundEvent(SoundEvents.ENTITY_CREEPER_PRIMED); @@ -395,8 +392,8 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_DECORATED_POT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_BREAK); public static final CompatSoundEvent BLOCK_DECORATED_POT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_FALL); public static final CompatSoundEvent BLOCK_DECORATED_POT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_HIT); - public static final CompatSoundEvent BLOCK_DECORATED_POT_INSERT = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_INSERT); - public static final CompatSoundEvent BLOCK_DECORATED_POT_INSERT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_INSERT_FAIL); + public static final CompatSoundEvent BLOCK_DECORATED_POT_INSERT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_INSERT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_DECORATED_POT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_STEP); public static final CompatSoundEvent BLOCK_DECORATED_POT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_PLACE); public static final CompatSoundEvent BLOCK_DECORATED_POT_SHATTER = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_SHATTER); @@ -434,7 +431,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_DONKEY_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_DEATH); public static final CompatSoundEvent ENTITY_DONKEY_EAT = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_EAT); public static final CompatSoundEvent ENTITY_DONKEY_HURT = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_HURT); - public static final CompatSoundEvent ENTITY_DONKEY_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_DONKEY_JUMP); + public static final CompatSoundEvent ENTITY_DONKEY_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_JUMP); public static final CompatSoundEvent BLOCK_DRIPSTONE_BLOCK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DRIPSTONE_BLOCK_BREAK); public static final CompatSoundEvent BLOCK_DRIPSTONE_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DRIPSTONE_BLOCK_STEP); public static final CompatSoundEvent BLOCK_DRIPSTONE_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DRIPSTONE_BLOCK_PLACE); @@ -665,11 +662,11 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_FALL); public static final CompatSoundEvent BLOCK_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_HIT); public static final CompatSoundEvent BLOCK_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_PLACE); - public static final CompatSoundEvent BLOCK_HEAVY_CORE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_BREAK); - public static final CompatSoundEvent BLOCK_HEAVY_CORE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_FALL); - public static final CompatSoundEvent BLOCK_HEAVY_CORE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_HIT); - public static final CompatSoundEvent BLOCK_HEAVY_CORE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_PLACE); - public static final CompatSoundEvent BLOCK_HEAVY_CORE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_HEAVY_CORE_STEP); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_HEAVY_CORE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_STEP); public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK); public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_FALL); @@ -680,22 +677,22 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL); public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT); public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_BREAK); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_STEP); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_PLACE); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_HIT); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_FALL); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_MOB = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_SPAWN_MOB); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_ABOUT_TO_SPAWN_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_ABOUT_TO_SPAWN_ITEM); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_SPAWN_ITEM); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_ITEM_BEGIN = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_SPAWN_ITEM_BEGIN); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_DETECT_PLAYER = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_DETECT_PLAYER); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_OMINOUS_ACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_OMINOUS_ACTIVATE); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_AMBIENT); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_AMBIENT_OMINOUS = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_AMBIENT_OMINOUS); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_OPEN_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_OPEN_SHUTTER); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_CLOSE_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_CLOSE_SHUTTER); - public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_EJECT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_TRIAL_SPAWNER_EJECT_ITEM); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_MOB = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_ABOUT_TO_SPAWN_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_SPAWN_ITEM_BEGIN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_DETECT_PLAYER = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_OMINOUS_ACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_AMBIENT_OMINOUS = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_OPEN_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_CLOSE_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_EJECT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ITEM_HOE_TILL = new CompatSoundEvent(SoundEvents.ITEM_HOE_TILL); public static final CompatSoundEvent ENTITY_HOGLIN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_AMBIENT); public static final CompatSoundEvent ENTITY_HOGLIN_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_HOGLIN_ANGRY); @@ -801,9 +798,9 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_LODESTONE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_LODESTONE_HIT); public static final CompatSoundEvent BLOCK_LODESTONE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_LODESTONE_FALL); public static final CompatSoundEvent ITEM_LODESTONE_COMPASS_LOCK = new CompatSoundEvent(SoundEvents.ITEM_LODESTONE_COMPASS_LOCK); - public static final CompatSoundEvent ITEM_MACE_SMASH_AIR = new CompatSoundEvent(SoundEvents.ITEM_MACE_SMASH_AIR); - public static final CompatSoundEvent ITEM_MACE_SMASH_GROUND = new CompatSoundEvent(SoundEvents.ITEM_MACE_SMASH_GROUND); - public static final CompatSoundEvent ITEM_MACE_SMASH_GROUND_HEAVY = new CompatSoundEvent(SoundEvents.ITEM_MACE_SMASH_GROUND_HEAVY); + public static final CompatSoundEvent ITEM_MACE_SMASH_AIR = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_MACE_SMASH_GROUND = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_MACE_SMASH_GROUND_HEAVY = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_MAGMA_CUBE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_DEATH); public static final CompatSoundEvent ENTITY_MAGMA_CUBE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_HURT); public static final CompatSoundEvent ENTITY_MAGMA_CUBE_HURT_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_HURT_SMALL); @@ -868,7 +865,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_MULE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_MULE_DEATH); public static final CompatSoundEvent ENTITY_MULE_EAT = new CompatSoundEvent(SoundEvents.ENTITY_MULE_EAT); public static final CompatSoundEvent ENTITY_MULE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_MULE_HURT); - public static final CompatSoundEvent ENTITY_MULE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_MULE_JUMP); + public static final CompatSoundEvent ENTITY_MULE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_JUMP); public static final CompatSoundEvent MUSIC_CREATIVE = new CompatSoundEvent(SoundEvents.MUSIC_CREATIVE); public static final CompatSoundEvent MUSIC_CREDITS = new CompatSoundEvent(SoundEvents.MUSIC_CREDITS); public static final CompatSoundEvent MUSIC_DISC_5 = new CompatSoundEvent(SoundEvents.MUSIC_DISC_5); @@ -887,9 +884,9 @@ public class CompatSoundEvents { public static final CompatSoundEvent MUSIC_DISC_WARD = new CompatSoundEvent(SoundEvents.MUSIC_DISC_WARD); public static final CompatSoundEvent MUSIC_DISC_OTHERSIDE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_OTHERSIDE); public static final CompatSoundEvent MUSIC_DISC_RELIC = new CompatSoundEvent(SoundEvents.MUSIC_DISC_RELIC); - public static final CompatSoundEvent MUSIC_DISC_CREATOR = new CompatSoundEvent(SoundEvents.MUSIC_DISC_CREATOR); - public static final CompatSoundEvent MUSIC_DISC_CREATOR_MUSIC_BOX = new CompatSoundEvent(SoundEvents.MUSIC_DISC_CREATOR_MUSIC_BOX); - public static final CompatSoundEvent MUSIC_DISC_PRECIPICE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_PRECIPICE); + public static final CompatSoundEvent MUSIC_DISC_CREATOR = new CompatSoundEvent(SoundEvents.MUSIC_DISC_5); + public static final CompatSoundEvent MUSIC_DISC_CREATOR_MUSIC_BOX = new CompatSoundEvent(SoundEvents.MUSIC_DISC_11); + public static final CompatSoundEvent MUSIC_DISC_PRECIPICE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_13); public static final CompatSoundEvent MUSIC_DRAGON = new CompatSoundEvent(SoundEvents.MUSIC_DRAGON); public static final CompatSoundEvent MUSIC_END = new CompatSoundEvent(SoundEvents.MUSIC_END); public static final CompatSoundEvent MUSIC_GAME = new CompatSoundEvent(SoundEvents.MUSIC_GAME); @@ -1012,7 +1009,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_OCELOT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_HURT); public static final CompatSoundEvent ENTITY_OCELOT_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_AMBIENT); public static final CompatSoundEvent ENTITY_OCELOT_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_DEATH); - public static final CompatSoundEvent ITEM_OMINOUS_BOTTLE_DISPOSE = new CompatSoundEvent(SoundEvents.ITEM_OMINOUS_BOTTLE_DISPOSE); + public static final CompatSoundEvent ITEM_OMINOUS_BOTTLE_DISPOSE = new CompatSoundEvent(SoundEvents.ITEM_BOTTLE_EMPTY); public static final CompatSoundEvent ENTITY_PAINTING_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_PAINTING_BREAK); public static final CompatSoundEvent ENTITY_PAINTING_PLACE = new CompatSoundEvent(SoundEvents.ENTITY_PAINTING_PLACE); public static final CompatSoundEvent ENTITY_PANDA_PRE_SNEEZE = new CompatSoundEvent(SoundEvents.ENTITY_PANDA_PRE_SNEEZE); @@ -1032,8 +1029,8 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_PARROT_FLY = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_FLY); public static final CompatSoundEvent ENTITY_PARROT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_HURT); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_BLAZE = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_BLAZE); - public static final CompatSoundEvent ENTITY_PARROT_IMITATE_BOGGED = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_BOGGED); - public static final CompatSoundEvent ENTITY_PARROT_IMITATE_BREEZE = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_BREEZE); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_BOGGED = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_SKELETON); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_BREEZE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_CREEPER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_CREEPER); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_DROWNED = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_DROWNED); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_ELDER_GUARDIAN = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_ELDER_GUARDIAN); @@ -1120,7 +1117,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_PLAYER_SPLASH = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_SPLASH); public static final CompatSoundEvent ENTITY_PLAYER_SPLASH_HIGH_SPEED = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_SPLASH_HIGH_SPEED); public static final CompatSoundEvent ENTITY_PLAYER_SWIM = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_SWIM); - public static final CompatSoundEvent ENTITY_PLAYER_TELEPORT = new CompatSoundEvent(SoundEvents.ENTITY_PLAYER_TELEPORT); + public static final CompatSoundEvent ENTITY_PLAYER_TELEPORT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_POLAR_BEAR_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_AMBIENT); public static final CompatSoundEvent ENTITY_POLAR_BEAR_AMBIENT_BABY = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_AMBIENT_BABY); public static final CompatSoundEvent ENTITY_POLAR_BEAR_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_POLAR_BEAR_DEATH); @@ -1350,12 +1347,12 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_SPIDER_STEP = new CompatSoundEvent(SoundEvents.ENTITY_SPIDER_STEP); public static final CompatSoundEvent ENTITY_SPLASH_POTION_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_SPLASH_POTION_BREAK); public static final CompatSoundEvent ENTITY_SPLASH_POTION_THROW = new CompatSoundEvent(SoundEvents.ENTITY_SPLASH_POTION_THROW); - public static final CompatSoundEvent BLOCK_SPONGE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_BREAK); - public static final CompatSoundEvent BLOCK_SPONGE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_FALL); - public static final CompatSoundEvent BLOCK_SPONGE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_HIT); - public static final CompatSoundEvent BLOCK_SPONGE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_PLACE); - public static final CompatSoundEvent BLOCK_SPONGE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_STEP); - public static final CompatSoundEvent BLOCK_SPONGE_ABSORB = new CompatSoundEvent(SoundEvents.BLOCK_SPONGE_ABSORB); + public static final CompatSoundEvent BLOCK_SPONGE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_BREAK); + public static final CompatSoundEvent BLOCK_SPONGE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_FALL); + public static final CompatSoundEvent BLOCK_SPONGE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent BLOCK_SPONGE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_PLACE); + public static final CompatSoundEvent BLOCK_SPONGE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_STEP); + public static final CompatSoundEvent BLOCK_SPONGE_ABSORB = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_STEP); public static final CompatSoundEvent ITEM_SPYGLASS_USE = new CompatSoundEvent(SoundEvents.ITEM_SPYGLASS_USE); public static final CompatSoundEvent ITEM_SPYGLASS_STOP_USING = new CompatSoundEvent(SoundEvents.ITEM_SPYGLASS_STOP_USING); public static final CompatSoundEvent ENTITY_SQUID_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SQUID_AMBIENT); @@ -1406,16 +1403,16 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_TUFF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_PLACE); public static final CompatSoundEvent BLOCK_TUFF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_HIT); public static final CompatSoundEvent BLOCK_TUFF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_FALL); - public static final CompatSoundEvent BLOCK_TUFF_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_BREAK); - public static final CompatSoundEvent BLOCK_TUFF_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_FALL); - public static final CompatSoundEvent BLOCK_TUFF_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_HIT); - public static final CompatSoundEvent BLOCK_TUFF_BRICKS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_PLACE); - public static final CompatSoundEvent BLOCK_TUFF_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_TUFF_BRICKS_STEP); - public static final CompatSoundEvent BLOCK_POLISHED_TUFF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_BREAK); - public static final CompatSoundEvent BLOCK_POLISHED_TUFF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_FALL); - public static final CompatSoundEvent BLOCK_POLISHED_TUFF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_HIT); - public static final CompatSoundEvent BLOCK_POLISHED_TUFF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_PLACE); - public static final CompatSoundEvent BLOCK_POLISHED_TUFF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_POLISHED_TUFF_STEP); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_BREAK); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_FALL); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_HIT); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_PLACE); + public static final CompatSoundEvent BLOCK_TUFF_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_STEP); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_BREAK); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_FALL); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_HIT); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_PLACE); + public static final CompatSoundEvent BLOCK_POLISHED_TUFF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_STEP); public static final CompatSoundEvent ENTITY_TURTLE_AMBIENT_LAND = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_AMBIENT_LAND); public static final CompatSoundEvent ENTITY_TURTLE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_DEATH); public static final CompatSoundEvent ENTITY_TURTLE_DEATH_BABY = new CompatSoundEvent(SoundEvents.ENTITY_TURTLE_DEATH_BABY); @@ -1437,20 +1434,20 @@ public class CompatSoundEvents { public static final CompatSoundEvent UI_TOAST_CHALLENGE_COMPLETE = new CompatSoundEvent(SoundEvents.UI_TOAST_CHALLENGE_COMPLETE); public static final CompatSoundEvent UI_TOAST_IN = new CompatSoundEvent(SoundEvents.UI_TOAST_IN); public static final CompatSoundEvent UI_TOAST_OUT = new CompatSoundEvent(SoundEvents.UI_TOAST_OUT); - public static final CompatSoundEvent BLOCK_VAULT_ACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_ACTIVATE); - public static final CompatSoundEvent BLOCK_VAULT_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_AMBIENT); - public static final CompatSoundEvent BLOCK_VAULT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_BREAK); - public static final CompatSoundEvent BLOCK_VAULT_CLOSE_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_CLOSE_SHUTTER); - public static final CompatSoundEvent BLOCK_VAULT_DEACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_DEACTIVATE); - public static final CompatSoundEvent BLOCK_VAULT_EJECT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_EJECT_ITEM); - public static final CompatSoundEvent BLOCK_VAULT_REJECT_REWARDED_PLAYER = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_REJECT_REWARDED_PLAYER); - public static final CompatSoundEvent BLOCK_VAULT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_FALL); - public static final CompatSoundEvent BLOCK_VAULT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_HIT); - public static final CompatSoundEvent BLOCK_VAULT_INSERT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_INSERT_ITEM); - public static final CompatSoundEvent BLOCK_VAULT_INSERT_ITEM_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_INSERT_ITEM_FAIL); - public static final CompatSoundEvent BLOCK_VAULT_OPEN_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_OPEN_SHUTTER); - public static final CompatSoundEvent BLOCK_VAULT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_PLACE); - public static final CompatSoundEvent BLOCK_VAULT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_VAULT_STEP); + public static final CompatSoundEvent BLOCK_VAULT_ACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_BEACON_ACTIVATE); + public static final CompatSoundEvent BLOCK_VAULT_AMBIENT = new CompatSoundEvent(SoundEvents.AMBIENT_CAVE); + public static final CompatSoundEvent BLOCK_VAULT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_VAULT_CLOSE_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_VAULT_DEACTIVATE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_VAULT_EJECT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_VAULT_REJECT_REWARDED_PLAYER = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_VAULT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_VAULT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_VAULT_INSERT_ITEM = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_VAULT_INSERT_ITEM_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_VAULT_OPEN_SHUTTER = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_VAULT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_VAULT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); public static final CompatSoundEvent ENTITY_VEX_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_VEX_AMBIENT); public static final CompatSoundEvent ENTITY_VEX_CHARGE = new CompatSoundEvent(SoundEvents.ENTITY_VEX_CHARGE); public static final CompatSoundEvent ENTITY_VEX_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_VEX_DEATH); @@ -1515,7 +1512,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_WARDEN_SONIC_CHARGE = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_SONIC_CHARGE); public static final CompatSoundEvent ENTITY_WARDEN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_STEP); public static final CompatSoundEvent ENTITY_WARDEN_TENDRIL_CLICKS = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_TENDRIL_CLICKS); - public static final CompatSoundEvent BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_SIGN_WAXED_INTERACT_FAIL); public static final CompatSoundEvent BLOCK_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_SIGN_WAXED_INTERACT_FAIL); public static final CompatSoundEvent BLOCK_WATER_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_WATER_AMBIENT); public static final CompatSoundEvent WEATHER_RAIN = new CompatSoundEvent(SoundEvents.WEATHER_RAIN); @@ -1525,14 +1522,14 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_WET_GRASS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_HIT); public static final CompatSoundEvent BLOCK_WET_GRASS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_PLACE); public static final CompatSoundEvent BLOCK_WET_GRASS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_STEP); - public static final CompatSoundEvent BLOCK_WET_SPONGE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_BREAK); - public static final CompatSoundEvent BLOCK_WET_SPONGE_DRIES = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_DRIES); - public static final CompatSoundEvent BLOCK_WET_SPONGE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_FALL); - public static final CompatSoundEvent BLOCK_WET_SPONGE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_HIT); - public static final CompatSoundEvent BLOCK_WET_SPONGE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_PLACE); - public static final CompatSoundEvent BLOCK_WET_SPONGE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WET_SPONGE_STEP); - public static final CompatSoundEvent ENTITY_WIND_CHARGE_WIND_BURST = new CompatSoundEvent(SoundEvents.ENTITY_WIND_CHARGE_WIND_BURST); - public static final CompatSoundEvent ENTITY_WIND_CHARGE_THROW = new CompatSoundEvent(SoundEvents.ENTITY_WIND_CHARGE_THROW); + public static final CompatSoundEvent BLOCK_WET_SPONGE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_BREAK); + public static final CompatSoundEvent BLOCK_WET_SPONGE_DRIES = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_WET_SPONGE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_FALL); + public static final CompatSoundEvent BLOCK_WET_SPONGE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_HIT); + public static final CompatSoundEvent BLOCK_WET_SPONGE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_PLACE); + public static final CompatSoundEvent BLOCK_WET_SPONGE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WET_GRASS_STEP); + public static final CompatSoundEvent ENTITY_WIND_CHARGE_WIND_BURST = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WIND_CHARGE_THROW = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_WITCH_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_AMBIENT); public static final CompatSoundEvent ENTITY_WITCH_CELEBRATE = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_CELEBRATE); public static final CompatSoundEvent ENTITY_WITCH_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WITCH_DEATH); @@ -1549,10 +1546,10 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_WITHER_SKELETON_HURT = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SKELETON_HURT); public static final CompatSoundEvent ENTITY_WITHER_SKELETON_STEP = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SKELETON_STEP); public static final CompatSoundEvent ENTITY_WITHER_SPAWN = new CompatSoundEvent(SoundEvents.ENTITY_WITHER_SPAWN); - public static final CompatSoundEvent ITEM_WOLF_ARMOR_BREAK = new CompatSoundEvent(SoundEvents.ITEM_WOLF_ARMOR_BREAK); - public static final CompatSoundEvent ITEM_WOLF_ARMOR_CRACK = new CompatSoundEvent(SoundEvents.ITEM_WOLF_ARMOR_CRACK); - public static final CompatSoundEvent ITEM_WOLF_ARMOR_DAMAGE = new CompatSoundEvent(SoundEvents.ITEM_WOLF_ARMOR_DAMAGE); - public static final CompatSoundEvent ITEM_WOLF_ARMOR_REPAIR = new CompatSoundEvent(SoundEvents.ITEM_WOLF_ARMOR_REPAIR); + public static final CompatSoundEvent ITEM_WOLF_ARMOR_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_WOLF_ARMOR_CRACK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_WOLF_ARMOR_DAMAGE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_WOLF_ARMOR_REPAIR = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_WOLF_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_AMBIENT); public static final CompatSoundEvent ENTITY_WOLF_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_DEATH); public static final CompatSoundEvent ENTITY_WOLF_GROWL = new CompatSoundEvent(SoundEvents.ENTITY_WOLF_GROWL); @@ -1609,9 +1606,9 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_DEATH); public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_HURT); public static final CompatSoundEvent ENTITY_ZOMBIE_VILLAGER_STEP = new CompatSoundEvent(SoundEvents.ENTITY_ZOMBIE_VILLAGER_STEP); - public static final CompatSoundEvent EVENT_MOB_EFFECT_BAD_OMEN = new CompatSoundEvent(SoundEvents.EVENT_MOB_EFFECT_BAD_OMEN); - public static final CompatSoundEvent EVENT_MOB_EFFECT_TRIAL_OMEN = new CompatSoundEvent(SoundEvents.EVENT_MOB_EFFECT_TRIAL_OMEN); - public static final CompatSoundEvent EVENT_MOB_EFFECT_RAID_OMEN = new CompatSoundEvent(SoundEvents.EVENT_MOB_EFFECT_RAID_OMEN); + public static final CompatSoundEvent EVENT_MOB_EFFECT_BAD_OMEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent EVENT_MOB_EFFECT_TRIAL_OMEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent EVENT_MOB_EFFECT_RAID_OMEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); static { GOAT_HORN_SOUNDS = SoundEvents.GOAT_HORN_SOUNDS.stream().map(CompatSoundEvent::new).collect(ImmutableList.toImmutableList()); diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java index 0173477a2..46dbe8c0b 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java @@ -27,12 +27,12 @@ public MatrixStack matrixStack() { @Override public float tickDelta() { - return worldRenderContext.tickCounter().getTickDelta(true); + return worldRenderContext.tickDelta(); } @Override public long limitTime() { - return (long) worldRenderContext.tickCounter().getLastDuration(); + return worldRenderContext.limitTime(); } @Override diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java new file mode 100644 index 000000000..53c234afe --- /dev/null +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java @@ -0,0 +1,105 @@ +package net.pitan76.mcpitanlib.api.client.event.forge; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.*; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.profiler.Profiler; +import net.minecraftforge.client.event.RenderHighlightEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; +import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; +import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; +import org.joml.Matrix4f; + +import java.util.ArrayList; +import java.util.List; + +public class WorldRenderRegistryImpl { + + public static List beforeBlockOutlineListeners = new ArrayList<>(); + + @SubscribeEvent + public static void renderOutlineEvent(RenderHighlightEvent event) { + for (BeforeBlockOutlineListener listener : beforeBlockOutlineListeners) { + listener.beforeBlockOutline(new BeforeBlockOutlineEvent(new WorldRenderContext() { + @Override + public WorldRenderer worldRenderer() { + return event.getLevelRenderer(); + } + + @Override + public MatrixStack matrixStack() { + return event.getPoseStack(); + } + + @Override + public float tickDelta() { + return event.getPartialTick(); + } + + @Override + public long limitTime() { + return (long) event.getPartialTick(); + } + + @Override + public boolean blockOutlines() { + return event.getTarget().getType() == HitResult.Type.BLOCK; + } + + @Override + public Camera camera() { + return event.getCamera(); + } + + @Override + public GameRenderer gameRenderer() { + return MinecraftClient.getInstance().gameRenderer; + } + + @Override + public LightmapTextureManager lightmapTextureManager() { + return MinecraftClient.getInstance().gameRenderer.getLightmapTextureManager(); + } + + @Deprecated + @Override + public Matrix4f projectionMatrix() { + return null; + } + + @Override + public ClientWorld world() { + return MinecraftClient.getInstance().world; + } + + @Override + public Profiler profiler() { + return MinecraftClient.getInstance().getProfiler(); + } + + @Deprecated + @Override + public boolean advancedTranslucency() { + return event.getLevelRenderer().isTerrainRenderComplete(); + } + + @Override + public VertexConsumerProvider consumers() { + return event.getMultiBufferSource(); + } + + @Override + public Frustum frustum() { + return event.getLevelRenderer().getFrustum(); + } + }, event.getTarget())); + } + } + + public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { + beforeBlockOutlineListeners.add(listener); + } +} diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java index 15b9d7fc1..471ed71b0 100644 --- a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java +++ b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java @@ -36,12 +36,12 @@ public MatrixStack matrixStack() { @Override public float tickDelta() { - return event.getDeltaTracker().getTickDelta(true); + return event.getPartialTick(); } @Override public long limitTime() { - return (long) event.getDeltaTracker().getTickDelta(false); + return (long) event.getPartialTick(); } @Override From cb998869c1c6c60659c3bb4df0f8bcc335efbf3f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 12 Sep 2024 19:12:19 +0900 Subject: [PATCH 366/617] fix APIs 1192 --- .../mcpitanlib/api/block/ExtendBlock.java | 2 - .../event/listener/WorldRenderContext.java | 2 +- .../api/sound/CompatSoundEvent.java | 19 -- .../api/sound/CompatSoundEvents.java | 310 +++++++++--------- .../event/fabric/WorldRenderRegistryImpl.java | 2 +- .../event/forge/WorldRenderRegistryImpl.java | 4 +- 6 files changed, 159 insertions(+), 180 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 52b6bc214..ef1057fb4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.block; -import com.mojang.serialization.MapCodec; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; @@ -25,7 +24,6 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.World; -import net.minecraft.world.WorldView; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.block.*; import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java index 70532c7f4..9bf22431b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java @@ -8,9 +8,9 @@ import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Matrix4f; import net.minecraft.util.profiler.Profiler; import org.jetbrains.annotations.Nullable; -import org.joml.Matrix4f; public interface WorldRenderContext { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java index df84214d5..48fd578f8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java @@ -1,38 +1,19 @@ package net.pitan76.mcpitanlib.api.sound; -import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.sound.SoundEvent; public class CompatSoundEvent { public SoundEvent soundEvent; - public RegistryEntry.Reference reference; - public RegistryEntry entry; public CompatSoundEvent(SoundEvent soundEvent) { this.soundEvent = soundEvent; } - public CompatSoundEvent(RegistryEntry.Reference reference) { - this.reference = reference; - } - - public CompatSoundEvent(RegistryEntry entry) { - this.entry = entry; - } - public static CompatSoundEvent of(SoundEvent soundEvent) { return new CompatSoundEvent(soundEvent); } public SoundEvent getSoundEvent() { - if (soundEvent == null) { - if (reference != null) { - soundEvent = reference.value(); - } else if (entry != null) { - soundEvent = entry.value(); - } - } - return soundEvent; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java index bab540df5..a43df0b50 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java @@ -38,7 +38,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_FALL); public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_HIT); public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_PLACE); - public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_RESONATE = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_RESONATE); + public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_RESONATE = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_PLACE); public static final CompatSoundEvent BLOCK_AMETHYST_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_BLOCK_STEP); public static final CompatSoundEvent BLOCK_AMETHYST_CLUSTER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_CLUSTER_BREAK); public static final CompatSoundEvent BLOCK_AMETHYST_CLUSTER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_AMETHYST_CLUSTER_FALL); @@ -117,21 +117,21 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_BAMBOO_SAPLING_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_SAPLING_BREAK); public static final CompatSoundEvent BLOCK_BAMBOO_SAPLING_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_SAPLING_HIT); public static final CompatSoundEvent BLOCK_BAMBOO_SAPLING_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_SAPLING_PLACE); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_BREAK); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_FALL); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HIT); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_PLACE); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_STEP); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_DOOR_CLOSE); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_DOOR_OPEN); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_TRAPDOOR_CLOSE); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_TRAPDOOR_OPEN); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_BUTTON_CLICK_OFF); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_BUTTON_CLICK_ON); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_OFF); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_ON); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_FENCE_GATE_CLOSE); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_FENCE_GATE_OPEN); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_DOOR_OPEN); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_OFF); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_ON); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_CLOSE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_OPEN); public static final CompatSoundEvent BLOCK_BARREL_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_BARREL_CLOSE); public static final CompatSoundEvent BLOCK_BARREL_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_BARREL_OPEN); public static final CompatSoundEvent BLOCK_BASALT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BASALT_BREAK); @@ -204,11 +204,11 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_BREEZE_WHIRL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_BREEZE_WIND_BURST = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_BREWING_STAND_BREW = new CompatSoundEvent(SoundEvents.BLOCK_BREWING_STAND_BREW); - public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GENERIC = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_GENERIC); - public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_SAND = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_SAND); - public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GRAVEL = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_GRAVEL); - public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_SAND_COMPLETE = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_SAND_COMPLETE); - public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GRAVEL_COMPLETE = new CompatSoundEvent(SoundEvents.ITEM_BRUSH_BRUSHING_GRAVEL_COMPLETE); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GENERIC = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_SAND = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GRAVEL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_SAND_COMPLETE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_BRUSH_BRUSHING_GRAVEL_COMPLETE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_BUBBLE_COLUMN_BUBBLE_POP = new CompatSoundEvent(SoundEvents.BLOCK_BUBBLE_COLUMN_BUBBLE_POP); public static final CompatSoundEvent BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT); public static final CompatSoundEvent BLOCK_BUBBLE_COLUMN_UPWARDS_INSIDE = new CompatSoundEvent(SoundEvents.BLOCK_BUBBLE_COLUMN_UPWARDS_INSIDE); @@ -235,17 +235,17 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_CALCITE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CALCITE_PLACE); public static final CompatSoundEvent BLOCK_CALCITE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CALCITE_HIT); public static final CompatSoundEvent BLOCK_CALCITE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CALCITE_FALL); - public static final CompatSoundEvent ENTITY_CAMEL_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_AMBIENT); - public static final CompatSoundEvent ENTITY_CAMEL_DASH = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_DASH); - public static final CompatSoundEvent ENTITY_CAMEL_DASH_READY = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_DASH_READY); - public static final CompatSoundEvent ENTITY_CAMEL_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_DEATH); - public static final CompatSoundEvent ENTITY_CAMEL_EAT = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_EAT); - public static final CompatSoundEvent ENTITY_CAMEL_HURT = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_HURT); - public static final CompatSoundEvent ENTITY_CAMEL_SADDLE = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_SADDLE); - public static final CompatSoundEvent ENTITY_CAMEL_SIT = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_SIT); - public static final CompatSoundEvent ENTITY_CAMEL_STAND = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_STAND); - public static final CompatSoundEvent ENTITY_CAMEL_STEP = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_STEP); - public static final CompatSoundEvent ENTITY_CAMEL_STEP_SAND = new CompatSoundEvent(SoundEvents.ENTITY_CAMEL_STEP_SAND); + public static final CompatSoundEvent ENTITY_CAMEL_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_DASH = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_DASH_READY = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_EAT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_HURT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_SADDLE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_SIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_STAND = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_CAMEL_STEP_SAND = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_CAMPFIRE_CRACKLE = new CompatSoundEvent(SoundEvents.BLOCK_CAMPFIRE_CRACKLE); public static final CompatSoundEvent BLOCK_CANDLE_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_AMBIENT); public static final CompatSoundEvent BLOCK_CANDLE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CANDLE_BREAK); @@ -274,36 +274,36 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_CHAIN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHAIN_HIT); public static final CompatSoundEvent BLOCK_CHAIN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHAIN_PLACE); public static final CompatSoundEvent BLOCK_CHAIN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHAIN_STEP); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_BREAK); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_FALL); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HIT); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_PLACE); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_STEP); - public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_BREAK); - public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_FALL); - public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_HIT); - public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_PLACE); - public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_SAPLING_STEP); - public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_BREAK); - public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_FALL); - public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_HIT); - public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_PLACE); - public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_LEAVES_STEP); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_STEP); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_BREAK); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_FALL); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_HIT); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_HANGING_SIGN_PLACE); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_DOOR_CLOSE); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_DOOR_OPEN); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_TRAPDOOR_CLOSE); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_TRAPDOOR_OPEN); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_BUTTON_CLICK_OFF); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_BUTTON_CLICK_ON); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_OFF); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_ON); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_FENCE_GATE_CLOSE); - public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_CHERRY_WOOD_FENCE_GATE_OPEN); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_BREAK); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_FALL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_FALL); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_HIT = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_PLACE); + public static final CompatSoundEvent BLOCK_CHERRY_SAPLING_STEP = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_BREAK); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_FALL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_FALL); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_HIT = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_PLACE); + public static final CompatSoundEvent BLOCK_CHERRY_LEAVES_STEP = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_DOOR_OPEN); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_OFF); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_ON); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_CLOSE); + public static final CompatSoundEvent BLOCK_CHERRY_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_OPEN); public static final CompatSoundEvent BLOCK_CHEST_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_CHEST_CLOSE); public static final CompatSoundEvent BLOCK_CHEST_LOCKED = new CompatSoundEvent(SoundEvents.BLOCK_CHEST_LOCKED); public static final CompatSoundEvent BLOCK_CHEST_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_CHEST_OPEN); @@ -312,15 +312,15 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_CHICKEN_EGG = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_EGG); public static final CompatSoundEvent ENTITY_CHICKEN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_HURT); public static final CompatSoundEvent ENTITY_CHICKEN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_STEP); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_BREAK); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_FALL); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_HIT); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_INSERT = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_INSERT); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_INSERT_ENCHANTED = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_INSERT_ENCHANTED); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_STEP); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PICKUP = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_PICKUP); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PICKUP_ENCHANTED = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_PICKUP_ENCHANTED); - public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_CHISELED_BOOKSHELF_PLACE); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_INSERT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_INSERT_ENCHANTED = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PICKUP = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_PICKUP); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PICKUP_ENCHANTED = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_CHISELED_BOOKSHELF_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); public static final CompatSoundEvent BLOCK_CHORUS_FLOWER_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_CHORUS_FLOWER_DEATH); public static final CompatSoundEvent BLOCK_CHORUS_FLOWER_GROW = new CompatSoundEvent(SoundEvents.BLOCK_CHORUS_FLOWER_GROW); public static final CompatSoundEvent ITEM_CHORUS_FRUIT_TELEPORT = new CompatSoundEvent(SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT); @@ -389,14 +389,14 @@ public class CompatSoundEvents { public static final CompatSoundEvent ITEM_CROSSBOW_QUICK_CHARGE_2 = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_QUICK_CHARGE_2); public static final CompatSoundEvent ITEM_CROSSBOW_QUICK_CHARGE_3 = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_QUICK_CHARGE_3); public static final CompatSoundEvent ITEM_CROSSBOW_SHOOT = new CompatSoundEvent(SoundEvents.ITEM_CROSSBOW_SHOOT); - public static final CompatSoundEvent BLOCK_DECORATED_POT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_BREAK); - public static final CompatSoundEvent BLOCK_DECORATED_POT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_FALL); - public static final CompatSoundEvent BLOCK_DECORATED_POT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_HIT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); public static final CompatSoundEvent BLOCK_DECORATED_POT_INSERT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_DECORATED_POT_INSERT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); - public static final CompatSoundEvent BLOCK_DECORATED_POT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_STEP); - public static final CompatSoundEvent BLOCK_DECORATED_POT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_PLACE); - public static final CompatSoundEvent BLOCK_DECORATED_POT_SHATTER = new CompatSoundEvent(SoundEvents.BLOCK_DECORATED_POT_SHATTER); + public static final CompatSoundEvent BLOCK_DECORATED_POT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_DECORATED_POT_SHATTER = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); public static final CompatSoundEvent BLOCK_DEEPSLATE_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_BREAK); public static final CompatSoundEvent BLOCK_DEEPSLATE_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_FALL); public static final CompatSoundEvent BLOCK_DEEPSLATE_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_DEEPSLATE_BRICKS_HIT); @@ -540,16 +540,16 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_FOX_SNIFF = new CompatSoundEvent(SoundEvents.ENTITY_FOX_SNIFF); public static final CompatSoundEvent ENTITY_FOX_SPIT = new CompatSoundEvent(SoundEvents.ENTITY_FOX_SPIT); public static final CompatSoundEvent ENTITY_FOX_TELEPORT = new CompatSoundEvent(SoundEvents.ENTITY_FOX_TELEPORT); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_BREAK); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_STEP); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_PLACE); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_HIT); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_SAND_FALL); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_BREAK); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_STEP); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_PLACE); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_HIT); - public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SUSPICIOUS_GRAVEL_FALL); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_SAND_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_FROGLIGHT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_BREAK); public static final CompatSoundEvent BLOCK_FROGLIGHT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_FALL); public static final CompatSoundEvent BLOCK_FROGLIGHT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_HIT); @@ -657,26 +657,26 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_HANGING_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_ROOTS_HIT); public static final CompatSoundEvent BLOCK_HANGING_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_ROOTS_PLACE); public static final CompatSoundEvent BLOCK_HANGING_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_ROOTS_STEP); - public static final CompatSoundEvent BLOCK_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_STEP); - public static final CompatSoundEvent BLOCK_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_BREAK); - public static final CompatSoundEvent BLOCK_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_FALL); - public static final CompatSoundEvent BLOCK_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_HIT); - public static final CompatSoundEvent BLOCK_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_HANGING_SIGN_PLACE); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); public static final CompatSoundEvent BLOCK_HEAVY_CORE_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); public static final CompatSoundEvent BLOCK_HEAVY_CORE_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); public static final CompatSoundEvent BLOCK_HEAVY_CORE_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_HEAVY_CORE_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); public static final CompatSoundEvent BLOCK_HEAVY_CORE_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_STEP); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_FALL); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_HIT); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HANGING_SIGN_PLACE); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_STEP); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_BREAK); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT); - public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_TRIAL_SPAWNER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); @@ -834,11 +834,11 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_MOSS_CARPET_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_CARPET_HIT); public static final CompatSoundEvent BLOCK_MOSS_CARPET_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_CARPET_PLACE); public static final CompatSoundEvent BLOCK_MOSS_CARPET_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_CARPET_STEP); - public static final CompatSoundEvent BLOCK_PINK_PETALS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_BREAK); - public static final CompatSoundEvent BLOCK_PINK_PETALS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_FALL); - public static final CompatSoundEvent BLOCK_PINK_PETALS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_HIT); - public static final CompatSoundEvent BLOCK_PINK_PETALS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_PLACE); - public static final CompatSoundEvent BLOCK_PINK_PETALS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_PINK_PETALS_STEP); + public static final CompatSoundEvent BLOCK_PINK_PETALS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_PINK_PETALS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_PINK_PETALS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_PINK_PETALS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_PINK_PETALS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_MOSS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_BREAK); public static final CompatSoundEvent BLOCK_MOSS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_FALL); public static final CompatSoundEvent BLOCK_MOSS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_HIT); @@ -883,7 +883,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent MUSIC_DISC_WAIT = new CompatSoundEvent(SoundEvents.MUSIC_DISC_WAIT); public static final CompatSoundEvent MUSIC_DISC_WARD = new CompatSoundEvent(SoundEvents.MUSIC_DISC_WARD); public static final CompatSoundEvent MUSIC_DISC_OTHERSIDE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_OTHERSIDE); - public static final CompatSoundEvent MUSIC_DISC_RELIC = new CompatSoundEvent(SoundEvents.MUSIC_DISC_RELIC); + public static final CompatSoundEvent MUSIC_DISC_RELIC = new CompatSoundEvent(SoundEvents.MUSIC_DISC_OTHERSIDE); public static final CompatSoundEvent MUSIC_DISC_CREATOR = new CompatSoundEvent(SoundEvents.MUSIC_DISC_5); public static final CompatSoundEvent MUSIC_DISC_CREATOR_MUSIC_BOX = new CompatSoundEvent(SoundEvents.MUSIC_DISC_11); public static final CompatSoundEvent MUSIC_DISC_PRECIPICE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_13); @@ -899,22 +899,22 @@ public class CompatSoundEvents { public static final CompatSoundEvent MUSIC_OVERWORLD_JAGGED_PEAKS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_JAGGED_PEAKS); public static final CompatSoundEvent MUSIC_OVERWORLD_LUSH_CAVES = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_LUSH_CAVES); public static final CompatSoundEvent MUSIC_OVERWORLD_SWAMP = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SWAMP); - public static final CompatSoundEvent MUSIC_OVERWORLD_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SWAMP); public static final CompatSoundEvent MUSIC_OVERWORLD_OLD_GROWTH_TAIGA = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_OLD_GROWTH_TAIGA); public static final CompatSoundEvent MUSIC_OVERWORLD_MEADOW = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_MEADOW); - public static final CompatSoundEvent MUSIC_OVERWORLD_CHERRY_GROVE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_CHERRY_GROVE); + public static final CompatSoundEvent MUSIC_OVERWORLD_CHERRY_GROVE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_MEADOW); public static final CompatSoundEvent MUSIC_NETHER_NETHER_WASTES = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_NETHER_WASTES); public static final CompatSoundEvent MUSIC_OVERWORLD_FROZEN_PEAKS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_FROZEN_PEAKS); public static final CompatSoundEvent MUSIC_OVERWORLD_SNOWY_SLOPES = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SNOWY_SLOPES); public static final CompatSoundEvent MUSIC_NETHER_SOUL_SAND_VALLEY = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_SOUL_SAND_VALLEY); public static final CompatSoundEvent MUSIC_OVERWORLD_STONY_PEAKS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_STONY_PEAKS); public static final CompatSoundEvent MUSIC_NETHER_WARPED_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_WARPED_FOREST); - public static final CompatSoundEvent MUSIC_OVERWORLD_FLOWER_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_FLOWER_FOREST); - public static final CompatSoundEvent MUSIC_OVERWORLD_DESERT = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_DESERT); - public static final CompatSoundEvent MUSIC_OVERWORLD_BADLANDS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_BADLANDS); - public static final CompatSoundEvent MUSIC_OVERWORLD_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_JUNGLE); - public static final CompatSoundEvent MUSIC_OVERWORLD_SPARSE_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SPARSE_JUNGLE); - public static final CompatSoundEvent MUSIC_OVERWORLD_BAMBOO_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_BAMBOO_JUNGLE); + public static final CompatSoundEvent MUSIC_OVERWORLD_FLOWER_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_WARPED_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_DESERT = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_WARPED_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_BADLANDS = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_WARPED_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_WARPED_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_SPARSE_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_WARPED_FOREST); + public static final CompatSoundEvent MUSIC_OVERWORLD_BAMBOO_JUNGLE = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_WARPED_FOREST); public static final CompatSoundEvent MUSIC_UNDER_WATER = new CompatSoundEvent(SoundEvents.MUSIC_UNDER_WATER); public static final CompatSoundEvent BLOCK_NETHER_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_BRICKS_BREAK); public static final CompatSoundEvent BLOCK_NETHER_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_BRICKS_STEP); @@ -923,22 +923,22 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_NETHER_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_BRICKS_FALL); public static final CompatSoundEvent BLOCK_NETHER_WART_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WART_BREAK); public static final CompatSoundEvent ITEM_NETHER_WART_PLANT = new CompatSoundEvent(SoundEvents.ITEM_NETHER_WART_PLANT); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_BREAK); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_FALL); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_HIT); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_PLACE); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_STEP); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_DOOR_CLOSE); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_DOOR_OPEN); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_TRAPDOOR_CLOSE); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_TRAPDOOR_OPEN); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_BUTTON_CLICK_OFF); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_BUTTON_CLICK_ON); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_OFF); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_ON); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_FENCE_GATE_CLOSE); - public static final CompatSoundEvent BLOCK_NETHER_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_NETHER_WOOD_FENCE_GATE_OPEN); - public static final CompatSoundEvent INTENTIONALLY_EMPTY = new CompatSoundEvent(SoundEvents.INTENTIONALLY_EMPTY); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_BREAK); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_FALL); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_HIT); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_PLACE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_WOOD_STEP); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_DOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_DOOR_CLOSE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_DOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_DOOR_OPEN); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_TRAPDOOR_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_TRAPDOOR_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_BUTTON_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_OFF); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_BUTTON_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_ON); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_OFF = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_ON = new CompatSoundEvent(SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_CLOSE); + public static final CompatSoundEvent BLOCK_NETHER_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_OPEN); + public static final CompatSoundEvent INTENTIONALLY_EMPTY = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_PACKED_MUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_BREAK); public static final CompatSoundEvent BLOCK_PACKED_MUD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_FALL); public static final CompatSoundEvent BLOCK_PACKED_MUD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_HIT); @@ -1000,12 +1000,12 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_NOTE_BLOCK_DIDGERIDOO = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_DIDGERIDOO); public static final CompatSoundEvent BLOCK_NOTE_BLOCK_BIT = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_BIT); public static final CompatSoundEvent BLOCK_NOTE_BLOCK_BANJO = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_BANJO); - public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_ZOMBIE = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_ZOMBIE); - public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_SKELETON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_SKELETON); - public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_CREEPER = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_CREEPER); - public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_ENDER_DRAGON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_ENDER_DRAGON); - public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_WITHER_SKELETON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_WITHER_SKELETON); - public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_PIGLIN = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_IMITATE_PIGLIN); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_ZOMBIE = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_HARP); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_SKELETON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_HARP); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_CREEPER = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_HARP); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_ENDER_DRAGON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_HARP); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_WITHER_SKELETON = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_HARP); + public static final CompatSoundEvent BLOCK_NOTE_BLOCK_IMITATE_PIGLIN = new CompatSoundEvent(SoundEvents.BLOCK_NOTE_BLOCK_HARP); public static final CompatSoundEvent ENTITY_OCELOT_HURT = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_HURT); public static final CompatSoundEvent ENTITY_OCELOT_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_AMBIENT); public static final CompatSoundEvent ENTITY_OCELOT_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_OCELOT_DEATH); @@ -1315,21 +1315,21 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_SLIME_SQUISH_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_SLIME_SQUISH_SMALL); public static final CompatSoundEvent BLOCK_SMITHING_TABLE_USE = new CompatSoundEvent(SoundEvents.BLOCK_SMITHING_TABLE_USE); public static final CompatSoundEvent BLOCK_SMOKER_SMOKE = new CompatSoundEvent(SoundEvents.BLOCK_SMOKER_SMOKE); - public static final CompatSoundEvent ENTITY_SNIFFER_STEP = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_STEP); - public static final CompatSoundEvent ENTITY_SNIFFER_EAT = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_EAT); - public static final CompatSoundEvent ENTITY_SNIFFER_IDLE = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_IDLE); - public static final CompatSoundEvent ENTITY_SNIFFER_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_HURT); - public static final CompatSoundEvent ENTITY_SNIFFER_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_DEATH); - public static final CompatSoundEvent ENTITY_SNIFFER_DROP_SEED = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_DROP_SEED); - public static final CompatSoundEvent ENTITY_SNIFFER_SCENTING = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_SCENTING); - public static final CompatSoundEvent ENTITY_SNIFFER_SNIFFING = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_SNIFFING); - public static final CompatSoundEvent ENTITY_SNIFFER_SEARCHING = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_SEARCHING); - public static final CompatSoundEvent ENTITY_SNIFFER_DIGGING = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_DIGGING); - public static final CompatSoundEvent ENTITY_SNIFFER_DIGGING_STOP = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_DIGGING_STOP); - public static final CompatSoundEvent ENTITY_SNIFFER_HAPPY = new CompatSoundEvent(SoundEvents.ENTITY_SNIFFER_HAPPY); - public static final CompatSoundEvent BLOCK_SNIFFER_EGG_PLOP = new CompatSoundEvent(SoundEvents.BLOCK_SNIFFER_EGG_PLOP); - public static final CompatSoundEvent BLOCK_SNIFFER_EGG_CRACK = new CompatSoundEvent(SoundEvents.BLOCK_SNIFFER_EGG_CRACK); - public static final CompatSoundEvent BLOCK_SNIFFER_EGG_HATCH = new CompatSoundEvent(SoundEvents.BLOCK_SNIFFER_EGG_HATCH); + public static final CompatSoundEvent ENTITY_SNIFFER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_EAT = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_IDLE = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_HURT = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_DROP_SEED = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_SCENTING = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_SNIFFING = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_SEARCHING = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_DIGGING = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_DIGGING_STOP = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent ENTITY_SNIFFER_HAPPY = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent BLOCK_SNIFFER_EGG_PLOP = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent BLOCK_SNIFFER_EGG_CRACK = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent BLOCK_SNIFFER_EGG_HATCH = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); public static final CompatSoundEvent ENTITY_SNOWBALL_THROW = new CompatSoundEvent(SoundEvents.ENTITY_SNOWBALL_THROW); public static final CompatSoundEvent BLOCK_SNOW_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SNOW_BREAK); public static final CompatSoundEvent BLOCK_SNOW_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SNOW_FALL); @@ -1512,8 +1512,8 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_WARDEN_SONIC_CHARGE = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_SONIC_CHARGE); public static final CompatSoundEvent ENTITY_WARDEN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_STEP); public static final CompatSoundEvent ENTITY_WARDEN_TENDRIL_CLICKS = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_TENDRIL_CLICKS); - public static final CompatSoundEvent BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_SIGN_WAXED_INTERACT_FAIL); - public static final CompatSoundEvent BLOCK_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_SIGN_WAXED_INTERACT_FAIL); + public static final CompatSoundEvent BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); + public static final CompatSoundEvent BLOCK_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); public static final CompatSoundEvent BLOCK_WATER_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_WATER_AMBIENT); public static final CompatSoundEvent WEATHER_RAIN = new CompatSoundEvent(SoundEvents.WEATHER_RAIN); public static final CompatSoundEvent WEATHER_RAIN_ABOVE = new CompatSoundEvent(SoundEvents.WEATHER_RAIN_ABOVE); diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java index 46dbe8c0b..783b4a176 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java @@ -4,12 +4,12 @@ import net.minecraft.client.render.*; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.math.Matrix4f; import net.minecraft.util.profiler.Profiler; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; import org.jetbrains.annotations.Nullable; -import org.joml.Matrix4f; public class WorldRenderRegistryImpl { public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java index 53c234afe..8972f726e 100644 --- a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java @@ -5,13 +5,13 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.Matrix4f; import net.minecraft.util.profiler.Profiler; import net.minecraftforge.client.event.RenderHighlightEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; -import org.joml.Matrix4f; import java.util.ArrayList; import java.util.List; @@ -93,7 +93,7 @@ public VertexConsumerProvider consumers() { @Override public Frustum frustum() { - return event.getLevelRenderer().getFrustum(); + return null; } }, event.getTarget())); } From 1c6b6994b936b08aee87a4090fdf96e18e0a7128 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 12 Sep 2024 20:47:54 +0900 Subject: [PATCH 367/617] fix APIs 1182 --- .../api/sound/CompatSoundEvents.java | 242 +++++++++--------- .../event/forge/WorldRenderRegistryImpl.java | 8 +- 2 files changed, 125 insertions(+), 125 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java index a43df0b50..404bad7f4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java @@ -4,13 +4,13 @@ import net.minecraft.sound.SoundEvents; public class CompatSoundEvents { - public static final CompatSoundEvent ENTITY_ALLAY_AMBIENT_WITH_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_AMBIENT_WITH_ITEM); - public static final CompatSoundEvent ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM); - public static final CompatSoundEvent ENTITY_ALLAY_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_DEATH); - public static final CompatSoundEvent ENTITY_ALLAY_HURT = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_HURT); - public static final CompatSoundEvent ENTITY_ALLAY_ITEM_GIVEN = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_ITEM_GIVEN); - public static final CompatSoundEvent ENTITY_ALLAY_ITEM_TAKEN = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_ITEM_TAKEN); - public static final CompatSoundEvent ENTITY_ALLAY_ITEM_THROWN = new CompatSoundEvent(SoundEvents.ENTITY_ALLAY_ITEM_THROWN); + public static final CompatSoundEvent ENTITY_ALLAY_AMBIENT_WITH_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_PICKUP); + public static final CompatSoundEvent ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_EGG); + public static final CompatSoundEvent ENTITY_ALLAY_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_CREEPER_DEATH); + public static final CompatSoundEvent ENTITY_ALLAY_HURT = new CompatSoundEvent(SoundEvents.ENTITY_BLAZE_HURT); + public static final CompatSoundEvent ENTITY_ALLAY_ITEM_GIVEN = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_PICKUP); + public static final CompatSoundEvent ENTITY_ALLAY_ITEM_TAKEN = new CompatSoundEvent(SoundEvents.ENTITY_ITEM_PICKUP); + public static final CompatSoundEvent ENTITY_ALLAY_ITEM_THROWN = new CompatSoundEvent(SoundEvents.ENTITY_CHICKEN_EGG); public static final CompatSoundEvent AMBIENT_CAVE = new CompatSoundEvent(SoundEvents.AMBIENT_CAVE); public static final CompatSoundEvent AMBIENT_BASALT_DELTAS_ADDITIONS = new CompatSoundEvent(SoundEvents.AMBIENT_BASALT_DELTAS_ADDITIONS); public static final CompatSoundEvent AMBIENT_BASALT_DELTAS_LOOP = new CompatSoundEvent(SoundEvents.AMBIENT_BASALT_DELTAS_LOOP); @@ -219,13 +219,13 @@ public class CompatSoundEvents { public static final CompatSoundEvent ITEM_BUCKET_EMPTY_FISH = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_FISH); public static final CompatSoundEvent ITEM_BUCKET_EMPTY_LAVA = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_LAVA); public static final CompatSoundEvent ITEM_BUCKET_EMPTY_POWDER_SNOW = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_POWDER_SNOW); - public static final CompatSoundEvent ITEM_BUCKET_EMPTY_TADPOLE = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_TADPOLE); + public static final CompatSoundEvent ITEM_BUCKET_EMPTY_TADPOLE = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_FISH); public static final CompatSoundEvent ITEM_BUCKET_FILL = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL); public static final CompatSoundEvent ITEM_BUCKET_FILL_AXOLOTL = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_AXOLOTL); public static final CompatSoundEvent ITEM_BUCKET_FILL_FISH = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_FISH); public static final CompatSoundEvent ITEM_BUCKET_FILL_LAVA = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_LAVA); public static final CompatSoundEvent ITEM_BUCKET_FILL_POWDER_SNOW = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_POWDER_SNOW); - public static final CompatSoundEvent ITEM_BUCKET_FILL_TADPOLE = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_FILL_TADPOLE); + public static final CompatSoundEvent ITEM_BUCKET_FILL_TADPOLE = new CompatSoundEvent(SoundEvents.ITEM_BUCKET_EMPTY_FISH); public static final CompatSoundEvent ITEM_BUNDLE_DROP_CONTENTS = new CompatSoundEvent(SoundEvents.ITEM_BUNDLE_DROP_CONTENTS); public static final CompatSoundEvent ITEM_BUNDLE_INSERT = new CompatSoundEvent(SoundEvents.ITEM_BUNDLE_INSERT); public static final CompatSoundEvent ITEM_BUNDLE_REMOVE_ONE = new CompatSoundEvent(SoundEvents.ITEM_BUNDLE_REMOVE_ONE); @@ -550,25 +550,25 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_SUSPICIOUS_GRAVEL_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); - public static final CompatSoundEvent BLOCK_FROGLIGHT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_BREAK); - public static final CompatSoundEvent BLOCK_FROGLIGHT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_FALL); - public static final CompatSoundEvent BLOCK_FROGLIGHT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_HIT); - public static final CompatSoundEvent BLOCK_FROGLIGHT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_PLACE); - public static final CompatSoundEvent BLOCK_FROGLIGHT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_FROGLIGHT_STEP); - public static final CompatSoundEvent BLOCK_FROGSPAWN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_STEP); - public static final CompatSoundEvent BLOCK_FROGSPAWN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_BREAK); - public static final CompatSoundEvent BLOCK_FROGSPAWN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_FALL); - public static final CompatSoundEvent BLOCK_FROGSPAWN_HATCH = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_HATCH); - public static final CompatSoundEvent BLOCK_FROGSPAWN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_HIT); - public static final CompatSoundEvent BLOCK_FROGSPAWN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_FROGSPAWN_PLACE); - public static final CompatSoundEvent ENTITY_FROG_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_FROG_AMBIENT); - public static final CompatSoundEvent ENTITY_FROG_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_FROG_DEATH); - public static final CompatSoundEvent ENTITY_FROG_EAT = new CompatSoundEvent(SoundEvents.ENTITY_FROG_EAT); - public static final CompatSoundEvent ENTITY_FROG_HURT = new CompatSoundEvent(SoundEvents.ENTITY_FROG_HURT); - public static final CompatSoundEvent ENTITY_FROG_LAY_SPAWN = new CompatSoundEvent(SoundEvents.ENTITY_FROG_LAY_SPAWN); - public static final CompatSoundEvent ENTITY_FROG_LONG_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_FROG_LONG_JUMP); - public static final CompatSoundEvent ENTITY_FROG_STEP = new CompatSoundEvent(SoundEvents.ENTITY_FROG_STEP); - public static final CompatSoundEvent ENTITY_FROG_TONGUE = new CompatSoundEvent(SoundEvents.ENTITY_FROG_TONGUE); + public static final CompatSoundEvent BLOCK_FROGLIGHT_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_FROGLIGHT_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_FROGLIGHT_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_FROGLIGHT_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_FROGLIGHT_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_FROGSPAWN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_FROGSPAWN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_FROGSPAWN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_FROGSPAWN_HATCH = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_FROGSPAWN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_FROGSPAWN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent ENTITY_FROG_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_FROG_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_FROG_EAT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_FROG_HURT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_FROG_LAY_SPAWN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_FROG_LONG_JUMP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_FROG_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_FROG_TONGUE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_ROOTS_BREAK); public static final CompatSoundEvent BLOCK_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_ROOTS_STEP); public static final CompatSoundEvent BLOCK_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_ROOTS_PLACE); @@ -620,8 +620,8 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_GOAT_MILK = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_MILK); public static final CompatSoundEvent ENTITY_GOAT_PREPARE_RAM = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_PREPARE_RAM); public static final CompatSoundEvent ENTITY_GOAT_RAM_IMPACT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_RAM_IMPACT); - public static final CompatSoundEvent ENTITY_GOAT_HORN_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_HORN_BREAK); - public static final CompatSoundEvent ITEM_GOAT_HORN_PLAY = new CompatSoundEvent(SoundEvents.ITEM_GOAT_HORN_PLAY); + public static final CompatSoundEvent ENTITY_GOAT_HORN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ITEM_GOAT_HORN_PLAY = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_AMBIENT); public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_DEATH); public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_EAT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_EAT); @@ -630,7 +630,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_MILK = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_MILK); public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_PREPARE_RAM = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_PREPARE_RAM); public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_RAM_IMPACT = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_RAM_IMPACT); - public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_HORN_BREAK = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_SCREAMING_HORN_BREAK); + public static final CompatSoundEvent ENTITY_GOAT_SCREAMING_HORN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_GOAT_STEP = new CompatSoundEvent(SoundEvents.ENTITY_GOAT_STEP); public static final CompatSoundEvent BLOCK_GRASS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_BREAK); public static final CompatSoundEvent BLOCK_GRASS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_FALL); @@ -710,8 +710,8 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_HONEY_BLOCK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_HONEY_BLOCK_STEP); public static final CompatSoundEvent ITEM_HONEYCOMB_WAX_ON = new CompatSoundEvent(SoundEvents.ITEM_HONEYCOMB_WAX_ON); public static final CompatSoundEvent ITEM_HONEY_BOTTLE_DRINK = new CompatSoundEvent(SoundEvents.ITEM_HONEY_BOTTLE_DRINK); - public static final int GOAT_HORN_SOUNDS_COUNT = SoundEvents.GOAT_HORN_SOUND_COUNT; - public static final ImmutableList GOAT_HORN_SOUNDS; + public static final int GOAT_HORN_SOUNDS_COUNT = 0; + public static final ImmutableList GOAT_HORN_SOUNDS = ImmutableList.builder().build(); public static final CompatSoundEvent ENTITY_HORSE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_AMBIENT); public static final CompatSoundEvent ENTITY_HORSE_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_ANGRY); public static final CompatSoundEvent ENTITY_HORSE_ARMOR = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_ARMOR); @@ -807,11 +807,11 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_MAGMA_CUBE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_JUMP); public static final CompatSoundEvent ENTITY_MAGMA_CUBE_SQUISH = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_SQUISH); public static final CompatSoundEvent ENTITY_MAGMA_CUBE_SQUISH_SMALL = new CompatSoundEvent(SoundEvents.ENTITY_MAGMA_CUBE_SQUISH_SMALL); - public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_BREAK); - public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_FALL); - public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_HIT); - public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_PLACE); - public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MANGROVE_ROOTS_STEP); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_MANGROVE_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_MEDIUM_AMETHYST_BUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MEDIUM_AMETHYST_BUD_BREAK); public static final CompatSoundEvent BLOCK_MEDIUM_AMETHYST_BUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MEDIUM_AMETHYST_BUD_PLACE); public static final CompatSoundEvent BLOCK_METAL_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_METAL_BREAK); @@ -844,21 +844,21 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_MOSS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_HIT); public static final CompatSoundEvent BLOCK_MOSS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_PLACE); public static final CompatSoundEvent BLOCK_MOSS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MOSS_STEP); - public static final CompatSoundEvent BLOCK_MUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BREAK); - public static final CompatSoundEvent BLOCK_MUD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MUD_FALL); - public static final CompatSoundEvent BLOCK_MUD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MUD_HIT); - public static final CompatSoundEvent BLOCK_MUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MUD_PLACE); - public static final CompatSoundEvent BLOCK_MUD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MUD_STEP); - public static final CompatSoundEvent BLOCK_MUD_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_BREAK); - public static final CompatSoundEvent BLOCK_MUD_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_FALL); - public static final CompatSoundEvent BLOCK_MUD_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_HIT); - public static final CompatSoundEvent BLOCK_MUD_BRICKS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_PLACE); - public static final CompatSoundEvent BLOCK_MUD_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MUD_BRICKS_STEP); - public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_BREAK); - public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_FALL); - public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_HIT); - public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_PLACE); - public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_MUDDY_MANGROVE_ROOTS_STEP); + public static final CompatSoundEvent BLOCK_MUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_MUD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_MUD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_MUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_MUD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_MUD_BRICKS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_MUDDY_MANGROVE_ROOTS_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); public static final CompatSoundEvent ENTITY_MULE_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_MULE_AMBIENT); public static final CompatSoundEvent ENTITY_MULE_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_MULE_ANGRY); public static final CompatSoundEvent ENTITY_MULE_CHEST = new CompatSoundEvent(SoundEvents.ENTITY_MULE_CHEST); @@ -868,7 +868,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_MULE_JUMP = new CompatSoundEvent(SoundEvents.ENTITY_HORSE_JUMP); public static final CompatSoundEvent MUSIC_CREATIVE = new CompatSoundEvent(SoundEvents.MUSIC_CREATIVE); public static final CompatSoundEvent MUSIC_CREDITS = new CompatSoundEvent(SoundEvents.MUSIC_CREDITS); - public static final CompatSoundEvent MUSIC_DISC_5 = new CompatSoundEvent(SoundEvents.MUSIC_DISC_5); + public static final CompatSoundEvent MUSIC_DISC_5 = new CompatSoundEvent(SoundEvents.MUSIC_DISC_11); public static final CompatSoundEvent MUSIC_DISC_11 = new CompatSoundEvent(SoundEvents.MUSIC_DISC_11); public static final CompatSoundEvent MUSIC_DISC_13 = new CompatSoundEvent(SoundEvents.MUSIC_DISC_13); public static final CompatSoundEvent MUSIC_DISC_BLOCKS = new CompatSoundEvent(SoundEvents.MUSIC_DISC_BLOCKS); @@ -884,7 +884,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent MUSIC_DISC_WARD = new CompatSoundEvent(SoundEvents.MUSIC_DISC_WARD); public static final CompatSoundEvent MUSIC_DISC_OTHERSIDE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_OTHERSIDE); public static final CompatSoundEvent MUSIC_DISC_RELIC = new CompatSoundEvent(SoundEvents.MUSIC_DISC_OTHERSIDE); - public static final CompatSoundEvent MUSIC_DISC_CREATOR = new CompatSoundEvent(SoundEvents.MUSIC_DISC_5); + public static final CompatSoundEvent MUSIC_DISC_CREATOR = new CompatSoundEvent(SoundEvents.MUSIC_DISC_11); public static final CompatSoundEvent MUSIC_DISC_CREATOR_MUSIC_BOX = new CompatSoundEvent(SoundEvents.MUSIC_DISC_11); public static final CompatSoundEvent MUSIC_DISC_PRECIPICE = new CompatSoundEvent(SoundEvents.MUSIC_DISC_13); public static final CompatSoundEvent MUSIC_DRAGON = new CompatSoundEvent(SoundEvents.MUSIC_DRAGON); @@ -893,14 +893,14 @@ public class CompatSoundEvents { public static final CompatSoundEvent MUSIC_MENU = new CompatSoundEvent(SoundEvents.MUSIC_MENU); public static final CompatSoundEvent MUSIC_NETHER_BASALT_DELTAS = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_BASALT_DELTAS); public static final CompatSoundEvent MUSIC_NETHER_CRIMSON_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_CRIMSON_FOREST); - public static final CompatSoundEvent MUSIC_OVERWORLD_DEEP_DARK = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_DEEP_DARK); + public static final CompatSoundEvent MUSIC_OVERWORLD_DEEP_DARK = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_CRIMSON_FOREST); public static final CompatSoundEvent MUSIC_OVERWORLD_DRIPSTONE_CAVES = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_DRIPSTONE_CAVES); public static final CompatSoundEvent MUSIC_OVERWORLD_GROVE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_GROVE); public static final CompatSoundEvent MUSIC_OVERWORLD_JAGGED_PEAKS = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_JAGGED_PEAKS); public static final CompatSoundEvent MUSIC_OVERWORLD_LUSH_CAVES = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_LUSH_CAVES); - public static final CompatSoundEvent MUSIC_OVERWORLD_SWAMP = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SWAMP); - public static final CompatSoundEvent MUSIC_OVERWORLD_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_SWAMP); - public static final CompatSoundEvent MUSIC_OVERWORLD_OLD_GROWTH_TAIGA = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_OLD_GROWTH_TAIGA); + public static final CompatSoundEvent MUSIC_OVERWORLD_SWAMP = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_LUSH_CAVES); + public static final CompatSoundEvent MUSIC_OVERWORLD_FOREST = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_LUSH_CAVES); + public static final CompatSoundEvent MUSIC_OVERWORLD_OLD_GROWTH_TAIGA = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_LUSH_CAVES); public static final CompatSoundEvent MUSIC_OVERWORLD_MEADOW = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_MEADOW); public static final CompatSoundEvent MUSIC_OVERWORLD_CHERRY_GROVE = new CompatSoundEvent(SoundEvents.MUSIC_OVERWORLD_MEADOW); public static final CompatSoundEvent MUSIC_NETHER_NETHER_WASTES = new CompatSoundEvent(SoundEvents.MUSIC_NETHER_NETHER_WASTES); @@ -939,11 +939,11 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_NETHER_WOOD_FENCE_GATE_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_CLOSE); public static final CompatSoundEvent BLOCK_NETHER_WOOD_FENCE_GATE_OPEN = new CompatSoundEvent(SoundEvents.BLOCK_FENCE_GATE_OPEN); public static final CompatSoundEvent INTENTIONALLY_EMPTY = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); - public static final CompatSoundEvent BLOCK_PACKED_MUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_BREAK); - public static final CompatSoundEvent BLOCK_PACKED_MUD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_FALL); - public static final CompatSoundEvent BLOCK_PACKED_MUD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_HIT); - public static final CompatSoundEvent BLOCK_PACKED_MUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_PLACE); - public static final CompatSoundEvent BLOCK_PACKED_MUD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_PACKED_MUD_STEP); + public static final CompatSoundEvent BLOCK_PACKED_MUD_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_PACKED_MUD_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_PACKED_MUD_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_PACKED_MUD_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_PACKED_MUD_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); public static final CompatSoundEvent BLOCK_STEM_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STEM_BREAK); public static final CompatSoundEvent BLOCK_STEM_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STEM_STEP); public static final CompatSoundEvent BLOCK_STEM_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STEM_PLACE); @@ -1056,7 +1056,7 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_PARROT_IMITATE_STRAY = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_STRAY); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_VEX = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_VEX); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_VINDICATOR = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_VINDICATOR); - public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WARDEN = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_WARDEN); + public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WARDEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WITCH = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_WITCH); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WITHER = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_WITHER); public static final CompatSoundEvent ENTITY_PARROT_IMITATE_WITHER_SKELETON = new CompatSoundEvent(SoundEvents.ENTITY_PARROT_IMITATE_WITHER_SKELETON); @@ -1193,37 +1193,37 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_SCAFFOLDING_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCAFFOLDING_HIT); public static final CompatSoundEvent BLOCK_SCAFFOLDING_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCAFFOLDING_PLACE); public static final CompatSoundEvent BLOCK_SCAFFOLDING_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCAFFOLDING_STEP); - public static final CompatSoundEvent BLOCK_SCULK_SPREAD = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SPREAD); - public static final CompatSoundEvent BLOCK_SCULK_CHARGE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CHARGE); - public static final CompatSoundEvent BLOCK_SCULK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_BREAK); - public static final CompatSoundEvent BLOCK_SCULK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_FALL); - public static final CompatSoundEvent BLOCK_SCULK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_HIT); - public static final CompatSoundEvent BLOCK_SCULK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_PLACE); - public static final CompatSoundEvent BLOCK_SCULK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_STEP); - public static final CompatSoundEvent BLOCK_SCULK_CATALYST_BLOOM = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_BLOOM); - public static final CompatSoundEvent BLOCK_SCULK_CATALYST_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_BREAK); - public static final CompatSoundEvent BLOCK_SCULK_CATALYST_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_FALL); - public static final CompatSoundEvent BLOCK_SCULK_CATALYST_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_HIT); - public static final CompatSoundEvent BLOCK_SCULK_CATALYST_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_PLACE); - public static final CompatSoundEvent BLOCK_SCULK_CATALYST_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_CATALYST_STEP); - public static final CompatSoundEvent BLOCK_SCULK_SENSOR_CLICKING = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_CLICKING); - public static final CompatSoundEvent BLOCK_SCULK_SENSOR_CLICKING_STOP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_CLICKING_STOP); - public static final CompatSoundEvent BLOCK_SCULK_SENSOR_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_BREAK); - public static final CompatSoundEvent BLOCK_SCULK_SENSOR_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_FALL); - public static final CompatSoundEvent BLOCK_SCULK_SENSOR_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_HIT); - public static final CompatSoundEvent BLOCK_SCULK_SENSOR_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_PLACE); - public static final CompatSoundEvent BLOCK_SCULK_SENSOR_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SENSOR_STEP); - public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_BREAK); - public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_FALL); - public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_HIT); - public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_PLACE); - public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_SHRIEK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_SHRIEK); - public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_SHRIEKER_STEP); - public static final CompatSoundEvent BLOCK_SCULK_VEIN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_BREAK); - public static final CompatSoundEvent BLOCK_SCULK_VEIN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_FALL); - public static final CompatSoundEvent BLOCK_SCULK_VEIN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_HIT); - public static final CompatSoundEvent BLOCK_SCULK_VEIN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_PLACE); - public static final CompatSoundEvent BLOCK_SCULK_VEIN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_SCULK_VEIN_STEP); + public static final CompatSoundEvent BLOCK_SCULK_SPREAD = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_CHARGE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_SCULK_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_BLOOM = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_CATALYST_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_CLICKING = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_CLICKING_STOP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_SENSOR_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_SHRIEK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_SHRIEKER_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_STONE_BREAK); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_FALL = new CompatSoundEvent(SoundEvents.BLOCK_STONE_FALL); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_HIT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_PLACE); + public static final CompatSoundEvent BLOCK_SCULK_VEIN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_STEP); public static final CompatSoundEvent ENTITY_SHEEP_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_AMBIENT); public static final CompatSoundEvent ENTITY_SHEEP_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_DEATH); public static final CompatSoundEvent ENTITY_SHEEP_HURT = new CompatSoundEvent(SoundEvents.ENTITY_SHEEP_HURT); @@ -1375,10 +1375,10 @@ public class CompatSoundEvents { public static final CompatSoundEvent BLOCK_SWEET_BERRY_BUSH_BREAK = new CompatSoundEvent(SoundEvents.BLOCK_SWEET_BERRY_BUSH_BREAK); public static final CompatSoundEvent BLOCK_SWEET_BERRY_BUSH_PLACE = new CompatSoundEvent(SoundEvents.BLOCK_SWEET_BERRY_BUSH_PLACE); public static final CompatSoundEvent BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES = new CompatSoundEvent(SoundEvents.BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES); - public static final CompatSoundEvent ENTITY_TADPOLE_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_TADPOLE_DEATH); - public static final CompatSoundEvent ENTITY_TADPOLE_FLOP = new CompatSoundEvent(SoundEvents.ENTITY_TADPOLE_FLOP); - public static final CompatSoundEvent ENTITY_TADPOLE_GROW_UP = new CompatSoundEvent(SoundEvents.ENTITY_TADPOLE_GROW_UP); - public static final CompatSoundEvent ENTITY_TADPOLE_HURT = new CompatSoundEvent(SoundEvents.ENTITY_TADPOLE_HURT); + public static final CompatSoundEvent ENTITY_TADPOLE_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_TADPOLE_FLOP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_TADPOLE_GROW_UP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_TADPOLE_HURT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent ENCHANT_THORNS_HIT = new CompatSoundEvent(SoundEvents.ENCHANT_THORNS_HIT); public static final CompatSoundEvent ENTITY_TNT_PRIMED = new CompatSoundEvent(SoundEvents.ENTITY_TNT_PRIMED); public static final CompatSoundEvent ITEM_TOTEM_USE = new CompatSoundEvent(SoundEvents.ITEM_TOTEM_USE); @@ -1492,26 +1492,26 @@ public class CompatSoundEvents { public static final CompatSoundEvent ENTITY_WANDERING_TRADER_REAPPEARED = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_REAPPEARED); public static final CompatSoundEvent ENTITY_WANDERING_TRADER_TRADE = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_TRADE); public static final CompatSoundEvent ENTITY_WANDERING_TRADER_YES = new CompatSoundEvent(SoundEvents.ENTITY_WANDERING_TRADER_YES); - public static final CompatSoundEvent ENTITY_WARDEN_AGITATED = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_AGITATED); - public static final CompatSoundEvent ENTITY_WARDEN_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_AMBIENT); - public static final CompatSoundEvent ENTITY_WARDEN_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_ANGRY); - public static final CompatSoundEvent ENTITY_WARDEN_ATTACK_IMPACT = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_ATTACK_IMPACT); - public static final CompatSoundEvent ENTITY_WARDEN_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_DEATH); - public static final CompatSoundEvent ENTITY_WARDEN_DIG = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_DIG); - public static final CompatSoundEvent ENTITY_WARDEN_EMERGE = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_EMERGE); - public static final CompatSoundEvent ENTITY_WARDEN_HEARTBEAT = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_HEARTBEAT); - public static final CompatSoundEvent ENTITY_WARDEN_HURT = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_HURT); - public static final CompatSoundEvent ENTITY_WARDEN_LISTENING = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_LISTENING); - public static final CompatSoundEvent ENTITY_WARDEN_LISTENING_ANGRY = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_LISTENING_ANGRY); - public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSE = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_NEARBY_CLOSE); - public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSER = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_NEARBY_CLOSER); - public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSEST = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_NEARBY_CLOSEST); - public static final CompatSoundEvent ENTITY_WARDEN_ROAR = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_ROAR); - public static final CompatSoundEvent ENTITY_WARDEN_SNIFF = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_SNIFF); - public static final CompatSoundEvent ENTITY_WARDEN_SONIC_BOOM = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_SONIC_BOOM); - public static final CompatSoundEvent ENTITY_WARDEN_SONIC_CHARGE = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_SONIC_CHARGE); - public static final CompatSoundEvent ENTITY_WARDEN_STEP = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_STEP); - public static final CompatSoundEvent ENTITY_WARDEN_TENDRIL_CLICKS = new CompatSoundEvent(SoundEvents.ENTITY_WARDEN_TENDRIL_CLICKS); + public static final CompatSoundEvent ENTITY_WARDEN_AGITATED = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_ANGRY = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_ATTACK_IMPACT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_DEATH = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_DIG = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_EMERGE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_HEARTBEAT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_HURT = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_LISTENING = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_LISTENING_ANGRY = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSER = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_NEARBY_CLOSEST = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_ROAR = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_SNIFF = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_SONIC_BOOM = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_SONIC_CHARGE = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_STEP = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_WARDEN_TENDRIL_CLICKS = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); public static final CompatSoundEvent BLOCK_SIGN_WAXED_INTERACT_FAIL = new CompatSoundEvent(SoundEvents.BLOCK_GRASS_HIT); public static final CompatSoundEvent BLOCK_WATER_AMBIENT = new CompatSoundEvent(SoundEvents.BLOCK_WATER_AMBIENT); @@ -1611,6 +1611,6 @@ public class CompatSoundEvents { public static final CompatSoundEvent EVENT_MOB_EFFECT_RAID_OMEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); static { - GOAT_HORN_SOUNDS = SoundEvents.GOAT_HORN_SOUNDS.stream().map(CompatSoundEvent::new).collect(ImmutableList.toImmutableList()); + } } diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java index 8972f726e..a1363f030 100644 --- a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java @@ -7,7 +7,7 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Matrix4f; import net.minecraft.util.profiler.Profiler; -import net.minecraftforge.client.event.RenderHighlightEvent; +import net.minecraftforge.client.event.DrawSelectionEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; @@ -21,7 +21,7 @@ public class WorldRenderRegistryImpl { public static List beforeBlockOutlineListeners = new ArrayList<>(); @SubscribeEvent - public static void renderOutlineEvent(RenderHighlightEvent event) { + public static void renderOutlineEvent(DrawSelectionEvent event) { for (BeforeBlockOutlineListener listener : beforeBlockOutlineListeners) { listener.beforeBlockOutline(new BeforeBlockOutlineEvent(new WorldRenderContext() { @Override @@ -36,12 +36,12 @@ public MatrixStack matrixStack() { @Override public float tickDelta() { - return event.getPartialTick(); + return event.getPartialTicks(); } @Override public long limitTime() { - return (long) event.getPartialTick(); + return (long) event.getPartialTicks(); } @Override From ed3681cb654d0cdb6696a96ec8661b82567e173c Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 13 Sep 2024 22:36:02 +0900 Subject: [PATCH 368/617] add APIs --- .../net/pitan76/easyapi/config/Config.java | 75 +++++++ .../pitan76/easyapi/config/JsonConfig.java | 6 + .../pitan76/easyapi/config/YamlConfig.java | 7 + .../api/block/CompatPillarBlock.java | 5 + .../mcpitanlib/api/block/CompatSlabBlock.java | 8 + .../api/block/CompatStairsBlock.java | 30 ++- .../api/client/SimpleHandledScreen.java | 22 +- .../mcpitanlib/api/client/SimpleScreen.java | 26 ++- .../api/client/event/WorldRenderRegistry.java | 6 + .../listener/BeforeBlockOutlineEvent.java | 37 +--- .../event/listener/WorldRenderContext.java | 97 +++++++-- .../listener/WorldRenderContextListener.java | 10 + .../api/client/option/KeyCodes.java | 127 +++++++++++ .../registry/v2/KeybindingRegistry.java | 23 ++ .../pitan76/mcpitanlib/api/entity/Player.java | 25 ++- .../api/event/item/BonusAttackDamageArgs.java | 29 +++ .../api/event/item/EnchantabilityArgs.java | 7 + .../api/event/item/EnchantableArgs.java | 16 ++ .../api/event/item/ItemBarColorArgs.java | 16 ++ .../api/event/item/ItemBarStepArgs.java | 16 ++ .../api/event/item/ItemBarVisibleArgs.java | 16 ++ .../api/event/item/ItemUseOnBlockEvent.java | 10 + .../mcpitanlib/api/item/ExtendItem.java | 56 +++++ .../api/item/ExtendItemProvider.java | 44 ++++ .../api/item/v2/CompatArmorMaterial.java | 2 +- .../api/item/v2/ExtendBlockItem.java | 66 ++++++ .../api/registry/v2/CompatRegistryV2.java | 10 + .../api/sound/CompatSoundCategory.java | 35 +++ .../api/sound/CompatSoundEvent.java | 2 +- .../sound/RegistryResultCompatSoundEvent.java | 26 +++ .../pitan76/mcpitanlib/api/util/HandUtil.java | 38 ++++ .../mcpitanlib/api/util/IngredientUtil.java | 15 ++ .../mcpitanlib/api/util/ItemStackUtil.java | 15 ++ .../mcpitanlib/api/util/MCVersionUtil.java | 19 ++ .../mcpitanlib/api/util/PlatformUtil.java | 13 ++ .../mcpitanlib/api/util/PropertyUtil.java | 14 ++ .../mcpitanlib/api/util/WorldUtil.java | 9 +- .../api/util/client/ClientUtil.java | 7 + .../core/serialization/CompatMapCodec.java | 7 + .../pitan76/mcpitanlib/mixin/ItemMixin.java | 78 +++++++ .../event/fabric/WorldRenderRegistryImpl.java | 199 +++++++++++------- .../event/forge/WorldRenderRegistryImpl.java | 120 +++++++++-- .../mcpitanlib/forge/MCPitanLibForge.java | 5 +- info.properties | 2 +- .../neoforge/WorldRenderRegistryImpl.java | 105 --------- 45 files changed, 1247 insertions(+), 254 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContextListener.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/option/KeyCodes.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/v2/KeybindingRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/BonusAttackDamageArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/EnchantabilityArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/EnchantableArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarColorArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarStepArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarVisibleArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundCategory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/sound/RegistryResultCompatSoundEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/HandUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/MCVersionUtil.java delete mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java diff --git a/common/src/main/java/net/pitan76/easyapi/config/Config.java b/common/src/main/java/net/pitan76/easyapi/config/Config.java index a24d9d3d1..b4718da00 100644 --- a/common/src/main/java/net/pitan76/easyapi/config/Config.java +++ b/common/src/main/java/net/pitan76/easyapi/config/Config.java @@ -209,6 +209,81 @@ public boolean getBooleanOrDefault(String key, boolean defaultValue) { return defaultValue; } + /** + * マップのキーから値を取得、存在しない場合はデフォルト値を保存して返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public Object getOrCreate(String key, Object defaultValue) { + if (has(key)) return get(key); + + set(key, defaultValue); + return defaultValue; + } + + /** + * マップのキーから値(文字列)を取得、存在しない場合はデフォルト値を保存して返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public String getStringOrCreate(String key, String defaultValue) { + if (has(key)) return getString(key); + + setString(key, defaultValue); + return defaultValue; + } + + /** + * マップのキーから値(整数)を取得、存在しない場合はデフォルト値を保存して返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public int getIntOrCreate(String key, int defaultValue) { + if (has(key)) return getInt(key); + + setInt(key, defaultValue); + return defaultValue; + } + + /** + * マップのキーから値(数値)を取得、存在しない場合はデフォルト値を保存して返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public double getDoubleOrCreate(String key, double defaultValue) { + if (has(key)) return getDouble(key); + + setDouble(key, defaultValue); + return defaultValue; + } + + /** + * マップのキーから値(真偽値)を取得、存在しない場合はデフォルト値を保存して返す + * "."でパスを区切る + * + * @param key キー + * @param defaultValue デフォルト値 + * @return 取得した値 + */ + public boolean getBooleanOrCreate(String key, boolean defaultValue) { + if (has(key)) return getBoolean(key); + + setBoolean(key, defaultValue); + return defaultValue; + } + /** * マップのキーに値をセット * "."でパスを区切る diff --git a/common/src/main/java/net/pitan76/easyapi/config/JsonConfig.java b/common/src/main/java/net/pitan76/easyapi/config/JsonConfig.java index 09662c662..c549f09da 100644 --- a/common/src/main/java/net/pitan76/easyapi/config/JsonConfig.java +++ b/common/src/main/java/net/pitan76/easyapi/config/JsonConfig.java @@ -46,6 +46,11 @@ public JsonConfig(Config config) { * @return 成功→true / 失敗→false */ public boolean load(File file) { + if (!file.exists()) { + configMap = new LinkedHashMap<>(); + return false; + } + try { String configData = FileControl.fileReadContents(file); Gson gson = new Gson(); @@ -54,6 +59,7 @@ public boolean load(File file) { configMap = gson.fromJson(configData, jsonMap); return true; } catch (Exception e) { + configMap = new LinkedHashMap<>(); return false; } } diff --git a/common/src/main/java/net/pitan76/easyapi/config/YamlConfig.java b/common/src/main/java/net/pitan76/easyapi/config/YamlConfig.java index c01e026af..cc3774746 100644 --- a/common/src/main/java/net/pitan76/easyapi/config/YamlConfig.java +++ b/common/src/main/java/net/pitan76/easyapi/config/YamlConfig.java @@ -5,6 +5,7 @@ import org.yaml.snakeyaml.Yaml; import java.io.File; +import java.util.LinkedHashMap; import java.util.Map; public class YamlConfig extends Config { @@ -57,12 +58,18 @@ public void setStyle(DumperOptions.FlowStyle flowStyle) { */ @SuppressWarnings("unchecked") public boolean load(File file) { + if (!file.exists()) { + configMap = new LinkedHashMap<>(); + return false; + } + try { String configData = FileControl.fileReadContents(file); Yaml yaml = new Yaml(); configMap = (Map) yaml.load(configData); return true; } catch (Exception e) { + configMap = new LinkedHashMap<>(); return false; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java index 8fb45cc90..70767f8fb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java @@ -5,11 +5,16 @@ import net.minecraft.block.PillarBlock; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; +import net.minecraft.state.property.EnumProperty; +import net.minecraft.util.math.Direction; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; public class CompatPillarBlock extends PillarBlock implements ExtendBlockProvider { + + public static final EnumProperty AXIS = PillarBlock.AXIS; + public CompatPillarBlock(Settings settings) { super(settings); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java index b712f051b..a08952509 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java @@ -3,17 +3,25 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.SlabBlock; +import net.minecraft.block.StairsBlock; +import net.minecraft.block.enums.SlabType; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.EnumProperty; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.CanPathfindThroughArgs; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; public class CompatSlabBlock extends SlabBlock implements ExtendBlockProvider { + + public static final EnumProperty TYPE = SlabBlock.TYPE; + public static final BooleanProperty WATERLOGGED = SlabBlock.WATERLOGGED; + public CompatSlabBlock(Settings settings) { super(settings); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java index 8d4c23770..7e8a8f701 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java @@ -1,10 +1,14 @@ package net.pitan76.mcpitanlib.api.block; -import com.mojang.serialization.MapCodec; import net.minecraft.block.*; +import net.minecraft.block.enums.BlockHalf; +import net.minecraft.block.enums.StairShape; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.EnumProperty; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; @@ -15,12 +19,32 @@ import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; public class CompatStairsBlock extends StairsBlock implements ExtendBlockProvider { + + public static final DirectionProperty FACING = StairsBlock.FACING; + public static final EnumProperty HALF = StairsBlock.HALF; + public static final EnumProperty SHAPE = StairsBlock.SHAPE; + public static final BooleanProperty WATERLOGGED = StairsBlock.WATERLOGGED; + + public CompatibleBlockSettings compatSettings; + + private final BlockState baseBlockState; + public CompatStairsBlock(BlockState baseBlockState, Settings settings) { super(baseBlockState, settings); + this.baseBlockState = baseBlockState; } public CompatStairsBlock(BlockState baseBlockState, CompatibleBlockSettings settings) { this(baseBlockState, settings.build()); + this.compatSettings = settings; + } + + /** + * get compatible block settings + * @return CompatibleBlockSettings + */ + public CompatibleBlockSettings getCompatSettings() { + return compatSettings; } public VoxelShape getOutlineShape(OutlineShapeEvent event) { @@ -91,4 +115,8 @@ public boolean canPathfindThrough(CanPathfindThroughArgs args) { public Boolean canPathfindThrough(CanPathfindThroughArgs args, Options options) { return ExtendBlockProvider.super.canPathfindThrough(args, options); } + + public BlockState getBaseBlockState() { + return this.baseBlockState; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index dceb63a06..e736aab21 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -1,11 +1,13 @@ package net.pitan76.mcpitanlib.api.client; +import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.render.*; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; @@ -17,6 +19,7 @@ import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; public abstract class SimpleHandledScreen extends HandledScreen { @@ -74,6 +77,10 @@ public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height); } + public void callDrawTexture(DrawObjectDM drawObjectDM, CompatIdentifier texture, int x, int y, int u, int v, int width, int height) { + callDrawTexture(drawObjectDM, texture.toMinecraft(), x, y, u, v, width, height); + } + @Deprecated public void callRenderBackground(DrawObjectDM drawObjectDM) { super.renderBackground(drawObjectDM.getStack()); @@ -194,7 +201,16 @@ public boolean keyPressed(KeyEventArgs args) { } public void renderBackgroundTexture(RenderBackgroundTextureArgs args) { - super.renderBackgroundTexture(args.getvOffset()); + if (getBackgroundTexture() == null) { + super.renderBackgroundTexture(args.getvOffset()); + return; + } + + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + RenderSystem.setShaderTexture(0, getBackgroundTexture()); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + callDrawTexture(args.drawObjectDM, getBackgroundTexture(), 0, 0, 0, 0, this.width, this.height); } @Deprecated @@ -234,6 +250,10 @@ public void removed() { } public Identifier getBackgroundTexture() { + return getCompatBackgroundTexture().toMinecraft(); + } + + public CompatIdentifier getCompatBackgroundTexture() { return null; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index 8dbb25716..ddd7e5314 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -1,11 +1,13 @@ package net.pitan76.mcpitanlib.api.client; +import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @@ -17,6 +19,7 @@ import net.pitan76.mcpitanlib.api.client.render.handledscreen.KeyEventArgs; import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; public abstract class SimpleScreen extends Screen { @@ -51,6 +54,10 @@ public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height); } + public void callDrawTexture(DrawObjectDM drawObjectDM, CompatIdentifier texture, int x, int y, int u, int v, int width, int height) { + callDrawTexture(drawObjectDM, texture.toMinecraft(), x, y, u, v, width, height); + } + @Deprecated @Override public void renderBackground(MatrixStack matrices) { @@ -133,7 +140,16 @@ public boolean keyPressed(KeyEventArgs args) { } public void renderBackgroundTexture(RenderBackgroundTextureArgs args) { - super.renderBackgroundTexture(args.getvOffset()); + if (getBackgroundTexture() == null) { + super.renderBackgroundTexture(args.getvOffset()); + return; + } + + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + RenderSystem.setShaderTexture(0, getBackgroundTexture()); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + callDrawTexture(args.drawObjectDM, getBackgroundTexture(), 0, 0, 0, 0, this.width, this.height); } @Deprecated @@ -171,4 +187,12 @@ public void close() { public void removed() { removedOverride(); } + + public Identifier getBackgroundTexture() { + return getCompatBackgroundTexture().toMinecraft(); + } + + public CompatIdentifier getCompatBackgroundTexture() { + return null; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/WorldRenderRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/WorldRenderRegistry.java index 5d0d0695c..6cba6e3aa 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/WorldRenderRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/WorldRenderRegistry.java @@ -2,6 +2,7 @@ import dev.architectury.injectables.annotations.ExpectPlatform; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; +import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContextListener; public class WorldRenderRegistry { public WorldRenderRegistry() { @@ -12,4 +13,9 @@ public WorldRenderRegistry() { public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { throw new AssertionError(); } + + @ExpectPlatform + public static void registerWorldRenderAfterLevel(WorldRenderContextListener listener) { + throw new AssertionError(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java index 9cf86627b..27656b1ed 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java @@ -2,7 +2,6 @@ import net.minecraft.block.BlockState; import net.minecraft.client.render.Camera; -import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.util.math.MatrixStack; @@ -12,9 +11,7 @@ import net.minecraft.util.math.Box; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.World; -import net.pitan76.mcpitanlib.api.util.VoxelShapeUtil; -import java.util.Objects; import java.util.Optional; public class BeforeBlockOutlineEvent { @@ -35,7 +32,7 @@ public WorldRenderContext getContext() { } public WorldRenderer getWorldRenderer() { - return context.worldRenderer(); + return context.getWorldRenderer(); } public Optional getBlockState() { @@ -43,7 +40,7 @@ public Optional getBlockState() { } public World getWorld() { - return context.world(); + return context.getWorld(); } public Optional getBlockPos() { @@ -59,50 +56,38 @@ public HitResult.Type getHitResultType() { } public Camera getCamera() { - return context.camera(); + return context.getCamera(); } public Optional getOutlineShape() { - return getBlockState().map(blockState -> blockState.getOutlineShape(getWorld(), - getBlockPos().orElse(null))); + return context.getOutlineShape(); } public MatrixStack getMatrixStack() { - return context.matrixStack(); + return context.getMatrixStack(); } public void push() { - getMatrixStack().push(); + context.push(); } public void translate(double x, double y, double z) { - getMatrixStack().translate(x, y, z); + context.translate(x, y, z); } public void pop() { - getMatrixStack().pop(); + context.pop(); } public Optional getVertexConsumer() { - if (context.consumers() == null) - return Optional.empty(); - - return Optional.of(Objects.requireNonNull(context.consumers()).getBuffer(RenderLayer.getLines())); + return context.getVertexConsumer(); } public void drawBox(float red, float green, float blue, float alpha) { - Optional outlineShape = getOutlineShape(); - if (!outlineShape.isPresent()) return; - - drawBox(VoxelShapeUtil.getBoundingBox(outlineShape.get()), red, green, blue, alpha); + context.drawBox(red, green, blue, alpha); } public void drawBox(Box box, float red, float green, float blue, float alpha) { - Optional vertexConsumer = getVertexConsumer(); - - if (!vertexConsumer.isPresent()) - return; - - WorldRenderer.drawBox(getMatrixStack(), vertexConsumer.get(), box, red, green, blue, alpha); + context.drawBox(box, red, green, blue, alpha); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java index 9bf22431b..4d48e38f1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java @@ -3,45 +3,50 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.block.BlockState; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.*; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; import net.minecraft.util.math.Matrix4f; import net.minecraft.util.profiler.Profiler; +import net.minecraft.util.shape.VoxelShape; +import net.pitan76.mcpitanlib.api.util.VoxelShapeUtil; import org.jetbrains.annotations.Nullable; -public interface WorldRenderContext { - - WorldRenderer worldRenderer(); +import java.util.Objects; +import java.util.Optional; - MatrixStack matrixStack(); +public interface WorldRenderContext { - float tickDelta(); + WorldRenderer getWorldRenderer(); - long limitTime(); + MatrixStack getMatrixStack(); - boolean blockOutlines(); + float getTickDelta(); - Camera camera(); + Camera getCamera(); - GameRenderer gameRenderer(); + GameRenderer getGameRenderer(); - LightmapTextureManager lightmapTextureManager(); + LightmapTextureManager getLightmapTextureManager(); @Deprecated - Matrix4f projectionMatrix(); + Matrix4f getProjectionMatrix(); - ClientWorld world(); + ClientWorld getWorld(); - Profiler profiler(); + Profiler getProfiler(); @Deprecated - boolean advancedTranslucency(); + boolean isAdvancedTranslucency(); - @Nullable VertexConsumerProvider consumers(); - @Nullable Frustum frustum(); + @Nullable VertexConsumerProvider getConsumers(); + @Nullable Frustum getFrustum(); @Environment(EnvType.CLIENT) interface BlockOutlineContext { @@ -60,4 +65,64 @@ interface BlockOutlineContext { BlockState blockState(); } + + default HitResult getHitResult() { + return MinecraftClient.getInstance().crosshairTarget; + } + + default Optional getBlockState() { + return Optional.ofNullable(getWorld().getBlockState(getBlockPos().orElse(null))); + } + + default Optional getBlockPos() { + return Optional.ofNullable(((BlockHitResult) getHitResult()).getBlockPos()); + } + + default boolean isBlockType() { + return getHitResultType() == HitResult.Type.BLOCK; + } + + default HitResult.Type getHitResultType() { + return getHitResult().getType(); + } + + default Optional getOutlineShape() { + return getBlockState().map(blockState -> blockState.getOutlineShape(getWorld(), + getBlockPos().orElse(null))); + } + + default void push() { + getMatrixStack().push(); + } + + default void translate(double x, double y, double z) { + getMatrixStack().translate(x, y, z); + } + + default void pop() { + getMatrixStack().pop(); + } + + default Optional getVertexConsumer() { + if (getConsumers() == null) + return Optional.empty(); + + return Optional.of(Objects.requireNonNull(getConsumers()).getBuffer(RenderLayer.getLines())); + } + + default void drawBox(float red, float green, float blue, float alpha) { + Optional outlineShape = getOutlineShape(); + if (!outlineShape.isPresent()) return; + + drawBox(VoxelShapeUtil.getBoundingBox(outlineShape.get()), red, green, blue, alpha); + } + + default void drawBox(Box box, float red, float green, float blue, float alpha) { + Optional vertexConsumer = getVertexConsumer(); + + if (!vertexConsumer.isPresent()) + return; + + WorldRenderer.drawBox(getMatrixStack(), vertexConsumer.get(), box, red, green, blue, alpha); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContextListener.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContextListener.java new file mode 100644 index 000000000..a24c8c486 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContextListener.java @@ -0,0 +1,10 @@ +package net.pitan76.mcpitanlib.api.client.event.listener; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +@Environment(EnvType.CLIENT) +@FunctionalInterface +public interface WorldRenderContextListener { + void renderer(WorldRenderContext context); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/KeyCodes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/KeyCodes.java new file mode 100644 index 000000000..27187f69f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/KeyCodes.java @@ -0,0 +1,127 @@ +package net.pitan76.mcpitanlib.api.client.option; + +import org.lwjgl.glfw.GLFW; + +public class KeyCodes { + public static final int KEY_UNKNOWN = GLFW.GLFW_KEY_UNKNOWN, + KEY_SPACE = GLFW.GLFW_KEY_SPACE, + KEY_APOSTROPHE = GLFW.GLFW_KEY_APOSTROPHE, + KEY_COMMA = GLFW.GLFW_KEY_COMMA, + KEY_MINUS = GLFW.GLFW_KEY_MINUS, + KEY_PERIOD = GLFW.GLFW_KEY_PERIOD, + KEY_SLASH = GLFW.GLFW_KEY_SLASH, + KEY_0 = GLFW.GLFW_KEY_0, + KEY_1 = GLFW.GLFW_KEY_1, + KEY_2 = GLFW.GLFW_KEY_2, + KEY_3 = GLFW.GLFW_KEY_3, + KEY_4 = GLFW.GLFW_KEY_4, + KEY_5 = GLFW.GLFW_KEY_5, + KEY_6 = GLFW.GLFW_KEY_6, + KEY_7 = GLFW.GLFW_KEY_7, + KEY_8 = GLFW.GLFW_KEY_8, + KEY_9 = GLFW.GLFW_KEY_9, + KEY_SEMICOLON = GLFW.GLFW_KEY_SEMICOLON, + KEY_EQUAL = GLFW.GLFW_KEY_EQUAL, + KEY_A = GLFW.GLFW_KEY_A, + KEY_B = GLFW.GLFW_KEY_B, + KEY_C = GLFW.GLFW_KEY_C, + KEY_D = GLFW.GLFW_KEY_D, + KEY_E = GLFW.GLFW_KEY_E, + KEY_F = GLFW.GLFW_KEY_F, + KEY_G = GLFW.GLFW_KEY_G, + KEY_H = GLFW.GLFW_KEY_H, + KEY_I = GLFW.GLFW_KEY_I, + KEY_J = GLFW.GLFW_KEY_J, + KEY_K = GLFW.GLFW_KEY_K, + KEY_L = GLFW.GLFW_KEY_L, + KEY_M = GLFW.GLFW_KEY_M, + KEY_N = GLFW.GLFW_KEY_N, + KEY_O = GLFW.GLFW_KEY_O, + KEY_P = GLFW.GLFW_KEY_P, + KEY_Q = GLFW.GLFW_KEY_Q, + KEY_R = GLFW.GLFW_KEY_R, + KEY_S = GLFW.GLFW_KEY_S, + KEY_T = GLFW.GLFW_KEY_T, + KEY_U = GLFW.GLFW_KEY_U, + KEY_V = GLFW.GLFW_KEY_V, + KEY_W = GLFW.GLFW_KEY_W, + KEY_X = GLFW.GLFW_KEY_X, + KEY_Y = GLFW.GLFW_KEY_Y, + KEY_Z = GLFW.GLFW_KEY_Z, + KEY_LEFT_BRACKET = GLFW.GLFW_KEY_LEFT_BRACKET, + KEY_BACKSLASH = GLFW.GLFW_KEY_BACKSLASH, + KEY_RIGHT_BRACKET = GLFW.GLFW_KEY_RIGHT_BRACKET, + KEY_GRAVE_ACCENT = GLFW.GLFW_KEY_GRAVE_ACCENT, + KEY_WORLD_1 = GLFW.GLFW_KEY_WORLD_1, + KEY_WORLD_2 = GLFW.GLFW_KEY_WORLD_2, + KEY_ESCAPE = GLFW.GLFW_KEY_ESCAPE, + KEY_ENTER = GLFW.GLFW_KEY_ENTER, + KEY_TAB = GLFW.GLFW_KEY_TAB, + KEY_BACKSPACE = GLFW.GLFW_KEY_BACKSPACE, + KEY_INSERT = GLFW.GLFW_KEY_INSERT, + KEY_DELETE = GLFW.GLFW_KEY_DELETE, + KEY_RIGHT = GLFW.GLFW_KEY_RIGHT, + KEY_LEFT = GLFW.GLFW_KEY_LEFT, + KEY_DOWN = GLFW.GLFW_KEY_DOWN, + KEY_UP = GLFW.GLFW_KEY_UP, + KEY_PAGE_UP = GLFW.GLFW_KEY_PAGE_UP, + KEY_PAGE_DOWN = GLFW.GLFW_KEY_PAGE_DOWN, + KEY_HOME = GLFW.GLFW_KEY_HOME, + KEY_END = GLFW.GLFW_KEY_END, + KEY_CAPS_LOCK = GLFW.GLFW_KEY_CAPS_LOCK, + KEY_SCROLL_LOCK = GLFW.GLFW_KEY_SCROLL_LOCK, + KEY_NUM_LOCK = GLFW.GLFW_KEY_NUM_LOCK, + KEY_PRINT_SCREEN = GLFW.GLFW_KEY_PRINT_SCREEN, + KEY_PAUSE = GLFW.GLFW_KEY_PAUSE, + KEY_F1 = GLFW.GLFW_KEY_F1, + KEY_F2 = GLFW.GLFW_KEY_F2, + KEY_F3 = GLFW.GLFW_KEY_F3, + KEY_F4 = GLFW.GLFW_KEY_F4, + KEY_F5 = GLFW.GLFW_KEY_F5, + KEY_F6 = GLFW.GLFW_KEY_F6, + KEY_F7 = GLFW.GLFW_KEY_F7, + KEY_F8 = GLFW.GLFW_KEY_F8, + KEY_F9 = GLFW.GLFW_KEY_F9, + KEY_F10 = GLFW.GLFW_KEY_F10, + KEY_F11 = GLFW.GLFW_KEY_F11, + KEY_F12 = GLFW.GLFW_KEY_F12, + KEY_F13 = GLFW.GLFW_KEY_F13, + KEY_F14 = GLFW.GLFW_KEY_F14, + KEY_F15 = GLFW.GLFW_KEY_F15, + KEY_F16 = GLFW.GLFW_KEY_F16, + KEY_F17 = GLFW.GLFW_KEY_F17, + KEY_F18 = GLFW.GLFW_KEY_F18, + KEY_F19 = GLFW.GLFW_KEY_F19, + KEY_F20 = GLFW.GLFW_KEY_F20, + KEY_F21 = GLFW.GLFW_KEY_F21, + KEY_F22 = GLFW.GLFW_KEY_F22, + KEY_F23 = GLFW.GLFW_KEY_F23, + KEY_F24 = GLFW.GLFW_KEY_F24, + KEY_F25 = GLFW.GLFW_KEY_F25, + KEY_KP_0 = GLFW.GLFW_KEY_KP_0, + KEY_KP_1 = GLFW.GLFW_KEY_KP_1, + KEY_KP_2 = GLFW.GLFW_KEY_KP_2, + KEY_KP_3 = GLFW.GLFW_KEY_KP_3, + KEY_KP_4 = GLFW.GLFW_KEY_KP_4, + KEY_KP_5 = GLFW.GLFW_KEY_KP_5, + KEY_KP_6 = GLFW.GLFW_KEY_KP_6, + KEY_KP_7 = GLFW.GLFW_KEY_KP_7, + KEY_KP_8 = GLFW.GLFW_KEY_KP_8, + KEY_KP_9 = GLFW.GLFW_KEY_KP_9, + KEY_KP_DECIMAL = GLFW.GLFW_KEY_KP_DECIMAL, + KEY_KP_DIVIDE = GLFW.GLFW_KEY_KP_DIVIDE, + KEY_KP_MULTIPLY = GLFW.GLFW_KEY_KP_MULTIPLY, + KEY_KP_SUBTRACT = GLFW.GLFW_KEY_KP_SUBTRACT, + KEY_KP_ADD = GLFW.GLFW_KEY_KP_ADD, + KEY_KP_ENTER = GLFW.GLFW_KEY_KP_ENTER, + KEY_KP_EQUAL = GLFW.GLFW_KEY_KP_EQUAL, + KEY_LEFT_SHIFT = GLFW.GLFW_KEY_LEFT_SHIFT, + KEY_LEFT_CONTROL = GLFW.GLFW_KEY_LEFT_CONTROL, + KEY_LEFT_ALT = GLFW.GLFW_KEY_LEFT_ALT, + KEY_LEFT_SUPER = GLFW.GLFW_KEY_LEFT_SUPER, + KEY_RIGHT_SHIFT = GLFW.GLFW_KEY_RIGHT_SHIFT, + KEY_RIGHT_CONTROL = GLFW.GLFW_KEY_RIGHT_CONTROL, + KEY_RIGHT_ALT = GLFW.GLFW_KEY_RIGHT_ALT, + KEY_RIGHT_SUPER = GLFW.GLFW_KEY_RIGHT_SUPER, + KEY_MENU = GLFW.GLFW_KEY_MENU; +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/v2/KeybindingRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/v2/KeybindingRegistry.java new file mode 100644 index 000000000..80a026101 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/v2/KeybindingRegistry.java @@ -0,0 +1,23 @@ +package net.pitan76.mcpitanlib.api.client.registry.v2; + +import net.minecraft.client.option.KeyBinding; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class KeybindingRegistry extends net.pitan76.mcpitanlib.api.client.registry.KeybindingRegistry { + + public static void registerWithNetwork(KeyBinding keyBinding, CompatIdentifier identifier) { + registerWithNetwork(keyBinding, identifier.toMinecraft()); + } + + public static void registerOnLevelWithNetwork(KeyBinding keyBinding, CompatIdentifier identifier) { + registerOnLevelWithNetwork(keyBinding, identifier.toMinecraft()); + } + + public static void registerWithNetwork(String translationKey, int code, String category, CompatIdentifier identifier) { + registerWithNetwork(new KeyBinding(translationKey, code, category), identifier); + } + + public static void registerOnLevelWithNetwork(String translationKey, int code, String category, CompatIdentifier identifier) { + registerOnLevelWithNetwork(new KeyBinding(translationKey, code, category), identifier); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 326cba651..7c06b5b1e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -31,6 +31,7 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.gui.ExtendedNamedScreenHandlerFactory; import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; +import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; @@ -292,12 +293,12 @@ public void playSound(SoundEvent event, float volume, float pitch) { getEntity().playSound(event, volume, pitch); } - public void playSound(CompatSoundEvent event, SoundCategory category, float volume, float pitch) { - playSound(event.getSoundEvent(), category, volume, pitch); + public void playSound(CompatSoundEvent event, CompatSoundCategory category, float volume, float pitch) { + playSound(event.get(), category.get(), volume, pitch); } public void playSound(CompatSoundEvent event, float volume, float pitch) { - playSound(event.getSoundEvent(), volume, pitch); + playSound(event.get(), volume, pitch); } public ItemCooldown itemCooldown = new ItemCooldown(this); @@ -402,4 +403,22 @@ public boolean isSpectator() { return getEntity().isSpectator(); } + /** + * Returns the current {@link ItemStack} in the {@link Player}'s hand, or offhand if the + * main hand is empty. + * + * @return {@code ItemStack} that the {@link Player} is holding. Can be {@link null}. + */ + public Optional getCurrentHandItem() { + boolean playerIsHoldingInMainHand = !getMainHandStack().isEmpty(); + if (playerIsHoldingInMainHand) + return Optional.ofNullable(getMainHandStack()); + + boolean playerIsHoldingInOffHand = !getOffHandStack().isEmpty(); + + if (playerIsHoldingInOffHand) + return Optional.ofNullable(getOffHandStack()); + + return Optional.empty(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/BonusAttackDamageArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/BonusAttackDamageArgs.java new file mode 100644 index 000000000..769b66b63 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/BonusAttackDamageArgs.java @@ -0,0 +1,29 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.damage.DamageSource; + +public class BonusAttackDamageArgs { + + public Entity target; + public float baseAttackDamage; + public DamageSource damageSource; + + public BonusAttackDamageArgs(Entity target, float baseAttackDamage, DamageSource damageSource) { + this.target = target; + this.baseAttackDamage = baseAttackDamage; + this.damageSource = damageSource; + } + + public Entity getTarget() { + return target; + } + + public float getBaseAttackDamage() { + return baseAttackDamage; + } + + public DamageSource getDamageSource() { + return damageSource; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/EnchantabilityArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/EnchantabilityArgs.java new file mode 100644 index 000000000..17392a835 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/EnchantabilityArgs.java @@ -0,0 +1,7 @@ +package net.pitan76.mcpitanlib.api.event.item; + +public class EnchantabilityArgs { + public EnchantabilityArgs() { + + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/EnchantableArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/EnchantableArgs.java new file mode 100644 index 000000000..d466f2a51 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/EnchantableArgs.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.item.ItemStack; + +public class EnchantableArgs { + + public ItemStack stack; + + public EnchantableArgs(ItemStack stack) { + this.stack = stack; + } + + public ItemStack getStack() { + return stack; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarColorArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarColorArgs.java new file mode 100644 index 000000000..aae12a9a0 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarColorArgs.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.item.ItemStack; + +public class ItemBarColorArgs { + + public ItemStack stack; + + public ItemBarColorArgs(ItemStack stack) { + this.stack = stack; + } + + public ItemStack getStack() { + return stack; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarStepArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarStepArgs.java new file mode 100644 index 000000000..86742fa45 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarStepArgs.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.item.ItemStack; + +public class ItemBarStepArgs { + + public ItemStack stack; + + public ItemBarStepArgs(ItemStack stack) { + this.stack = stack; + } + + public ItemStack getStack() { + return stack; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarVisibleArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarVisibleArgs.java new file mode 100644 index 000000000..509bb4634 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemBarVisibleArgs.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.item.ItemStack; + +public class ItemBarVisibleArgs { + + public ItemStack stack; + + public ItemBarVisibleArgs(ItemStack stack) { + this.stack = stack; + } + + public ItemStack getStack() { + return stack; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java index 6145a0855..6db0b29f3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java @@ -9,6 +9,8 @@ import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; @@ -96,4 +98,12 @@ public boolean hasBlockEntity() { public BlockState getBlockState() { return WorldUtil.getBlockState(world, blockPos); } + + public Vec3d getPos() { + return hit.getPos(); + } + + public Direction getSide() { + return hit.getSide(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index ee0fbe896..777b1d9ac 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -2,6 +2,8 @@ import net.minecraft.block.BlockState; import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.Entity; +import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; @@ -169,4 +171,58 @@ public boolean postMine(PostMineEvent event) { public Rarity getRarity(ItemStack stack) { return Rarity.COMMON; } + + @Deprecated + @Override + public boolean isEnchantable(ItemStack stack) { + return isEnchantable(new EnchantableArgs(stack)); + } + + public boolean isEnchantable(EnchantableArgs args) { + return super.isEnchantable(args.stack); + } + + @Deprecated + @Override + public int getEnchantability() { + return getEnchantability(new EnchantabilityArgs()); + } + + public int getEnchantability(EnchantabilityArgs args) { + return super.getEnchantability(); + } + + @Deprecated + @Override + public int getItemBarColor(ItemStack stack) { + return getItemBarColor(new ItemBarColorArgs(stack)); + } + + public int getItemBarColor(ItemBarColorArgs args) { + return super.getItemBarColor(args.stack); + } + + @Deprecated + @Override + public boolean isItemBarVisible(ItemStack stack) { + return isItemBarVisible(new ItemBarVisibleArgs(stack)); + } + + public boolean isItemBarVisible(ItemBarVisibleArgs args) { + return super.isItemBarVisible(args.stack); + } + + @Deprecated + @Override + public int getItemBarStep(ItemStack stack) { + return getItemBarStep(new ItemBarStepArgs(stack)); + } + + public int getItemBarStep(ItemBarStepArgs args) { + return super.getItemBarStep(args.stack); + } + + public float getBonusAttackDamage(BonusAttackDamageArgs args) { + return 0; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java index 0c7648bf0..17874b97c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java @@ -2,6 +2,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; +import net.minecraft.util.Rarity; import net.minecraft.util.TypedActionResult; import net.pitan76.mcpitanlib.api.event.item.*; @@ -86,6 +87,49 @@ default boolean postMine(PostMineEvent event, Options options) { return false; } + /** + * on craft event + * @param event CraftEvent + */ + default void onCraft(CraftEvent event, Options options) { + options.cancel = false; + } + + default Rarity getRarity(ItemStack stack, Options options) { + options.cancel = false; + return null; + } + + default boolean isEnchantable(EnchantableArgs args, Options options) { + options.cancel = false; + return false; + } + + default int getEnchantability(EnchantabilityArgs args, Options options) { + options.cancel = false; + return 0; + } + + default int getItemBarColor(ItemBarColorArgs args, Options options) { + options.cancel = false; + return 0; + } + + default boolean isItemBarVisible(ItemBarVisibleArgs args, Options options) { + options.cancel = false; + return false; + } + + default int getItemBarStep(ItemBarStepArgs args, Options options) { + options.cancel = false; + return 0; + } + + default float getBonusAttackDamage(BonusAttackDamageArgs args, Options options) { + options.cancel = false; + return 0; + } + public static class Options { public boolean cancel = true; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java index ef5dd87f6..219e3400a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java @@ -10,7 +10,7 @@ public interface CompatArmorMaterial extends CompatibleArmorMaterial { @Override default SoundEvent getEquipSound() { - return getEquipCompatSound().getSoundEvent(); + return getEquipCompatSound().get(); } CompatSoundEvent getEquipCompatSound(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java new file mode 100644 index 000000000..08b705a66 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java @@ -0,0 +1,66 @@ +package net.pitan76.mcpitanlib.api.item.v2; + +import net.minecraft.block.Block; +import net.minecraft.client.item.TooltipContext; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ExtendBlockItem extends BlockItem implements ExtendItemProvider { + public ExtendBlockItem(Block block, Settings settings) { + super(block, settings); + } + + public ExtendBlockItem(Block block, CompatibleItemSettings settings) { + this(block, settings.build()); + } + + @Deprecated + @Override + public ActionResult useOnBlock(ItemUsageContext context) { + ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; + return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())); + } + + @Deprecated + @Override + public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event, Options options) { + return ExtendItemProvider.super.onRightClickOnBlock(event, options); + } + + public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { + return super.useOnBlock(event.toIUC()); + } + + @Deprecated + @Override + public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { + appendTooltip(new ItemAppendTooltipEvent(stack, world, tooltip, context)); + } + + @Deprecated + @Override + public void appendTooltip(ItemAppendTooltipEvent event, Options options) { + ExtendItemProvider.super.appendTooltip(event, options); + } + + public void appendTooltip(ItemAppendTooltipEvent event) { + super.appendTooltip(event.getStack(), event.getWorld(), event.getTooltip(), event.getContext()); + } + + @Override + public Block getBlock() { + return super.getBlock(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 20a4996e5..56928c0e6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -14,6 +14,8 @@ import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.pitan76.mcpitanlib.api.registry.CompatRegistry; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import net.pitan76.mcpitanlib.api.sound.RegistryResultCompatSoundEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import java.util.function.Supplier; @@ -91,6 +93,14 @@ public RegistryResult registerSoundEvent(CompatIdentifier id, float return cr1.registerSoundEvent(id.toMinecraft(), distanceToTravel); } + public CompatSoundEvent registerCompatSoundEvent(CompatIdentifier id) { + return RegistryResultCompatSoundEvent.of(registerSoundEvent(id)); + } + + public CompatSoundEvent registerCompatSoundEvent(CompatIdentifier id, float distanceToTravel) { + return RegistryResultCompatSoundEvent.of(registerSoundEvent(id, distanceToTravel)); + } + public RegistryResult registerFluid(CompatIdentifier id, Supplier supplier) { return cr1.registerFluid(id.toMinecraft(), supplier); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundCategory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundCategory.java new file mode 100644 index 000000000..4fdd2bd18 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundCategory.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.api.sound; + +import net.minecraft.sound.SoundCategory; + +public class CompatSoundCategory { + + public static final CompatSoundCategory MASTER = of(SoundCategory.MASTER); + public static final CompatSoundCategory MUSIC = of(SoundCategory.MUSIC); + public static final CompatSoundCategory RECORDS = of(SoundCategory.RECORDS); + public static final CompatSoundCategory WEATHER = of(SoundCategory.WEATHER); + public static final CompatSoundCategory BLOCKS = of(SoundCategory.BLOCKS); + public static final CompatSoundCategory HOSTILE = of(SoundCategory.HOSTILE); + public static final CompatSoundCategory NEUTRAL = of(SoundCategory.NEUTRAL); + public static final CompatSoundCategory PLAYERS = of(SoundCategory.PLAYERS); + public static final CompatSoundCategory AMBIENT = of(SoundCategory.AMBIENT); + public static final CompatSoundCategory VOICE = of(SoundCategory.VOICE); + + public SoundCategory soundCategory; + + public CompatSoundCategory(SoundCategory soundCategory) { + this.soundCategory = soundCategory; + } + + public static CompatSoundCategory of(SoundCategory soundCategory) { + return new CompatSoundCategory(soundCategory); + } + + public SoundCategory get() { + return soundCategory; + } + + public String getName() { + return soundCategory.getName(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java index 48fd578f8..d322e7e9c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvent.java @@ -13,7 +13,7 @@ public static CompatSoundEvent of(SoundEvent soundEvent) { return new CompatSoundEvent(soundEvent); } - public SoundEvent getSoundEvent() { + public SoundEvent get() { return soundEvent; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/RegistryResultCompatSoundEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/RegistryResultCompatSoundEvent.java new file mode 100644 index 000000000..c9a68ee56 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/RegistryResultCompatSoundEvent.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.sound; + +import net.minecraft.sound.SoundEvent; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; + +public class RegistryResultCompatSoundEvent extends CompatSoundEvent { + + public RegistryResult result; + + public RegistryResultCompatSoundEvent(RegistryResult result) { + super((SoundEvent) null); + this.result = result; + } + + public static RegistryResultCompatSoundEvent of(RegistryResult result) { + return new RegistryResultCompatSoundEvent(result); + } + + @Override + public SoundEvent get() { + if ((result == null || result.getOrNull() == null) && super.get() != null) + return super.get(); + + return result.get(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/HandUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/HandUtil.java new file mode 100644 index 000000000..8690b4db9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/HandUtil.java @@ -0,0 +1,38 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.util.Hand; + +public class HandUtil { + public static Hand getOppositeHand(Hand hand) { + return hand == Hand.MAIN_HAND ? Hand.OFF_HAND : Hand.MAIN_HAND; + } + + public static EquipmentSlot getEquipmentSlot(Hand hand) { + return hand == Hand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND; + } + + public static Hand getHand(EquipmentSlot slot) { + return slot == EquipmentSlot.MAINHAND ? Hand.MAIN_HAND : Hand.OFF_HAND; + } + + public static Hand getHand(boolean mainHand) { + return mainHand ? Hand.MAIN_HAND : Hand.OFF_HAND; + } + + public static boolean isMainHand(Hand hand) { + return hand == Hand.MAIN_HAND; + } + + public static boolean isOffHand(Hand hand) { + return hand == Hand.OFF_HAND; + } + + public static boolean isMainHand(EquipmentSlot slot) { + return slot == EquipmentSlot.MAINHAND; + } + + public static boolean isOffHand(EquipmentSlot slot) { + return slot == EquipmentSlot.OFFHAND; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java index 7ce79aab7..ce41f5413 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java @@ -1,12 +1,15 @@ package net.pitan76.mcpitanlib.api.util; +import it.unimi.dsi.fastutil.ints.IntList; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.tag.TagKey; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class IngredientUtil { @@ -31,4 +34,16 @@ public static List getItems(Ingredient ingredient) { } return items; } + + public IntList getMatchingStacksIds(Ingredient ingredient) { + return ingredient.getMatchingItemIds(); + } + + public List getMatchingStacksAsList(Ingredient ingredient) { + return new ArrayList<>(Arrays.asList(getMatchingStacks(ingredient))); + } + + public ItemStack[] getMatchingStacks(Ingredient ingredient) { + return ingredient.getMatchingStacks(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 08601dc39..4017f630c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -144,4 +144,19 @@ public static ItemStack create(ItemConvertible item, int count) { public static boolean isEmpty(ItemStack stack) { return stack.isEmpty(); } + + public static boolean isEnchantable(ItemStack stack) { + return stack.isEnchantable(); + } + + public static boolean isDamageable(ItemStack stack) { + return stack.isDamageable(); + } + + public static boolean isBreak(ItemStack stack) { + if (isDamageable(stack)) + return getDamage(stack) >= getMaxDamage(stack); + + return false; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/MCVersionUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/MCVersionUtil.java new file mode 100644 index 000000000..7ec6e5315 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/MCVersionUtil.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.SharedConstants; +import net.pitan76.mcpitanlib.api.util.client.ClientUtil; + +public class MCVersionUtil { + + public static int getProtocolVersion() { + return SharedConstants.getProtocolVersion(); + } + + public static String getGameVersion() { + return ClientUtil.getClient().getGameVersion(); + } + + public static boolean isSupportedComponent() { + return SharedConstants.getProtocolVersion() >= 766; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java index 3c8b8d30a..99f3dd5d2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlatformUtil.java @@ -5,6 +5,7 @@ import dev.architectury.utils.Env; import net.fabricmc.api.EnvType; +import java.io.File; import java.nio.file.Path; import java.util.Collection; @@ -49,6 +50,18 @@ public static Path getModsFolder() { return Platform.getModsFolder(); } + public static File getConfigFolderAsFile() { + return getConfigFolder().toFile(); + } + + public static File getGameFolderAsFile() { + return getGameFolder().toFile(); + } + + public static File getModsFolderAsFile() { + return getModsFolder().toFile(); + } + public static Collection getModIds() { return Platform.getModIds(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java index bb1d865f2..e6d3b9a58 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java @@ -1,6 +1,8 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.block.BlockState; +import net.minecraft.block.enums.BlockHalf; +import net.minecraft.block.enums.StairShape; import net.minecraft.state.property.*; import net.minecraft.util.StringIdentifiable; import net.minecraft.util.math.Direction; @@ -99,6 +101,18 @@ public static DirectionProperty horizontalFacing() { return Properties.HORIZONTAL_FACING; } + public static EnumProperty axis() { + return Properties.AXIS; + } + + public static EnumProperty blockHalf() { + return Properties.BLOCK_HALF; + } + + public static EnumProperty stairShape() { + return Properties.STAIR_SHAPE; + } + public static BooleanProperty lit() { return Properties.LIT; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index aa4f2d6e3..aaeaa28f5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -24,6 +24,7 @@ import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import org.jetbrains.annotations.Nullable; @@ -93,12 +94,12 @@ public static void playSound(World world, @Nullable Player player, BlockPos pos, world.playSound(entity, pos, sound, category, volume, pitch); } - public static void playSound(World world, @Nullable Player player, BlockPos pos, CompatSoundEvent sound, SoundCategory category, float volume, float pitch) { - playSound(world, player, pos, sound.getSoundEvent(), category, volume, pitch); + public static void playSound(World world, @Nullable Player player, BlockPos pos, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch) { + playSound(world, player, pos, sound.get(), category.get(), volume, pitch); } - public static void playSound(World world, double x, double y, double z, CompatSoundEvent sound, SoundCategory category, float volume, float pitch, boolean useDistance) { - world.playSound(x, y, z, sound.getSoundEvent(), category, volume, pitch, useDistance); + public static void playSound(World world, double x, double y, double z, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch, boolean useDistance) { + world.playSound(x, y, z, sound.get(), category.get(), volume, pitch, useDistance); } public static void sendEntityStatus(World world, Entity entity, byte status) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java index 4bae9d4ab..bf2fad7cd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java @@ -11,6 +11,8 @@ import net.minecraft.resource.ResourceManager; import net.pitan76.mcpitanlib.api.entity.Player; +import java.util.Optional; + public class ClientUtil { public static void setScreen(Screen screen) { getClient().setScreen(screen); @@ -55,4 +57,9 @@ public static ClientWorld getWorld() { public static GameRenderer getGameRenderer() { return getClient().gameRenderer; } + + public static Optional getTime() { + if (getClient().world == null) return Optional.empty(); + return Optional.of(getClient().world.getTime()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java index 6efd47f57..c62ba530d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java @@ -3,9 +3,12 @@ import com.mojang.serialization.MapCodec; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.pitan76.mcpitanlib.api.block.CompatStairsBlock; import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import java.util.function.BiFunction; import java.util.function.Function; public class CompatMapCodec { @@ -42,4 +45,8 @@ public static CompatMapCodec createCodec(Function CompatMapCodec createCodecOfExtendBlock(Function blockFromSettings) { return of(); } + + public static CompatMapCodec createCodecOfCompatStairsBlock(BiFunction createFunction) { + return of(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 7ca2872b2..209fdb410 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -10,6 +10,7 @@ import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; +import net.minecraft.util.Rarity; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -114,4 +115,81 @@ public class ItemMixin { cir.setReturnValue(returnValue); } } + + @Inject(method = "onCraft", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$onCraft(ItemStack stack, World world, PlayerEntity player, CallbackInfo ci) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + provider.onCraft(new CraftEvent(stack, world, player), options); + if (options.cancel) + ci.cancel(); + } + } + + @Inject(method = "getRarity", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$getRarity(ItemStack stack, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + Rarity returnValue = provider.getRarity(stack, options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "isEnchantable", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$isEnchantable(ItemStack stack, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + boolean returnValue = provider.isEnchantable(new EnchantableArgs(stack), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "getEnchantability", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$getEnchantability(CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + int returnValue = provider.getEnchantability(new EnchantabilityArgs(), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "getItemBarColor", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$getItemBarColor(ItemStack stack, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + int returnValue = provider.getItemBarColor(new ItemBarColorArgs(stack), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "isItemBarVisible", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$isItemBarVisible(ItemStack stack, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + boolean returnValue = provider.isItemBarVisible(new ItemBarVisibleArgs(stack), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "getItemBarStep", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$getItemBarStep(ItemStack stack, CallbackInfoReturnable cir) { + if (this instanceof ExtendItemProvider) { + ExtendItemProvider provider = (ExtendItemProvider) this; + Options options = new Options(); + int returnValue = provider.getItemBarStep(new ItemBarStepArgs(stack), options); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } } diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java index 783b4a176..6b398c518 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java @@ -9,81 +9,138 @@ import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; +import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContextListener; import org.jetbrains.annotations.Nullable; public class WorldRenderRegistryImpl { public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register(((worldRenderContext, hitResult) -> listener.beforeBlockOutline(new BeforeBlockOutlineEvent( - new WorldRenderContext() { - @Override - public WorldRenderer worldRenderer() { - return worldRenderContext.worldRenderer(); - } - - @Override - public MatrixStack matrixStack() { - return worldRenderContext.matrixStack(); - } - - @Override - public float tickDelta() { - return worldRenderContext.tickDelta(); - } - - @Override - public long limitTime() { - return worldRenderContext.limitTime(); - } - - @Override - public boolean blockOutlines() { - return worldRenderContext.blockOutlines(); - } - - @Override - public Camera camera() { - return worldRenderContext.camera(); - } - - @Override - public GameRenderer gameRenderer() { - return worldRenderContext.gameRenderer(); - } - - @Override - public LightmapTextureManager lightmapTextureManager() { - return worldRenderContext.lightmapTextureManager(); - } - - @Override - public Matrix4f projectionMatrix() { - return worldRenderContext.projectionMatrix(); - } - - @Override - public ClientWorld world() { - return worldRenderContext.world(); - } - - @Override - public Profiler profiler() { - return worldRenderContext.profiler(); - } - - @Override - public boolean advancedTranslucency() { - return worldRenderContext.advancedTranslucency(); - } - - @Override - public @Nullable VertexConsumerProvider consumers() { - return worldRenderContext.consumers(); - } - - @Override - public @Nullable Frustum frustum() { - return worldRenderContext.frustum(); - } - }, hitResult)))); + new WorldRenderContext() { + @Override + public WorldRenderer getWorldRenderer() { + return worldRenderContext.worldRenderer(); + } + + @Override + public MatrixStack getMatrixStack() { + return worldRenderContext.matrixStack(); + } + + @Override + public float getTickDelta() { + return worldRenderContext.tickDelta(); + } + + @Override + public Camera getCamera() { + return worldRenderContext.camera(); + } + + @Override + public GameRenderer getGameRenderer() { + return worldRenderContext.gameRenderer(); + } + + @Override + public LightmapTextureManager getLightmapTextureManager() { + return worldRenderContext.lightmapTextureManager(); + } + + @Override + public Matrix4f getProjectionMatrix() { + return worldRenderContext.projectionMatrix(); + } + + @Override + public ClientWorld getWorld() { + return worldRenderContext.world(); + } + + @Override + public Profiler getProfiler() { + return worldRenderContext.profiler(); + } + + @Override + public boolean isAdvancedTranslucency() { + return worldRenderContext.advancedTranslucency(); + } + + @Override + public @Nullable VertexConsumerProvider getConsumers() { + return worldRenderContext.consumers(); + } + + @Override + public @Nullable Frustum getFrustum() { + return worldRenderContext.frustum(); + } + }, hitResult)))); + } + + public static void registerWorldRenderAfterLevel(WorldRenderContextListener listener) { + WorldRenderEvents.END.register((context -> { + listener.renderer(new WorldRenderContext() { + @Override + public WorldRenderer getWorldRenderer() { + return context.worldRenderer(); + } + + @Override + public MatrixStack getMatrixStack() { + return context.matrixStack(); + } + + @Override + public float getTickDelta() { + return context.tickDelta(); + } + + @Override + public Camera getCamera() { + return context.camera(); + } + + @Override + public GameRenderer getGameRenderer() { + return context.gameRenderer(); + } + + @Override + public LightmapTextureManager getLightmapTextureManager() { + return context.lightmapTextureManager(); + } + + @Override + public Matrix4f getProjectionMatrix() { + return context.projectionMatrix(); + } + + @Override + public ClientWorld getWorld() { + return context.world(); + } + + @Override + public Profiler getProfiler() { + return context.profiler(); + } + + @Override + public boolean isAdvancedTranslucency() { + return context.advancedTranslucency(); + } + + @Override + public @Nullable VertexConsumerProvider getConsumers() { + return context.consumers(); + } + + @Override + public @Nullable Frustum getFrustum() { + return context.frustum(); + } + }); + })); } } diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java index a1363f030..7a5424462 100644 --- a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java @@ -4,102 +4,178 @@ import net.minecraft.client.render.*; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; -import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Matrix4f; import net.minecraft.util.profiler.Profiler; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.DrawSelectionEvent; +import net.minecraftforge.client.event.RenderLevelStageEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.pitan76.mcpitanlib.MCPitanLib; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; +import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContextListener; import java.util.ArrayList; import java.util.List; +@Mod.EventBusSubscriber(modid = MCPitanLib.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) public class WorldRenderRegistryImpl { public static List beforeBlockOutlineListeners = new ArrayList<>(); + public static List worldRenderAfterLevelListeners = new ArrayList<>(); @SubscribeEvent - public static void renderOutlineEvent(DrawSelectionEvent event) { + public static void renderOutlineEventBlock(DrawSelectionEvent event) { for (BeforeBlockOutlineListener listener : beforeBlockOutlineListeners) { - listener.beforeBlockOutline(new BeforeBlockOutlineEvent(new WorldRenderContext() { + boolean eventContinue = listener.beforeBlockOutline(new BeforeBlockOutlineEvent(new WorldRenderContext() { @Override - public WorldRenderer worldRenderer() { + public WorldRenderer getWorldRenderer() { return event.getLevelRenderer(); } @Override - public MatrixStack matrixStack() { + public MatrixStack getMatrixStack() { return event.getPoseStack(); } @Override - public float tickDelta() { + public float getTickDelta() { return event.getPartialTicks(); } @Override - public long limitTime() { - return (long) event.getPartialTicks(); + public Camera getCamera() { + return event.getCamera(); + } + + @Override + public GameRenderer getGameRenderer() { + return MinecraftClient.getInstance().gameRenderer; + } + + @Override + public LightmapTextureManager getLightmapTextureManager() { + return MinecraftClient.getInstance().gameRenderer.getLightmapTextureManager(); + } + + @Deprecated + @Override + public Matrix4f getProjectionMatrix() { + return null; + } + + @Override + public ClientWorld getWorld() { + return MinecraftClient.getInstance().world; + } + + @Override + public Profiler getProfiler() { + return MinecraftClient.getInstance().getProfiler(); + } + + @Deprecated + @Override + public boolean isAdvancedTranslucency() { + return event.getLevelRenderer().isTerrainRenderComplete(); } @Override - public boolean blockOutlines() { - return event.getTarget().getType() == HitResult.Type.BLOCK; + public VertexConsumerProvider getConsumers() { + return event.getMultiBufferSource(); } @Override - public Camera camera() { + public Frustum getFrustum() { + return null; + } + }, event.getTarget())); + + if (!eventContinue) { + event.setCanceled(true); + break; + } + } + } + + @SubscribeEvent + public static void registerWorldRenderAfterLevel(RenderLevelStageEvent event) { + if (!event.getStage().equals(RenderLevelStageEvent.Stage.AFTER_SKY)) return; + + for (WorldRenderContextListener listener : worldRenderAfterLevelListeners) { + listener.renderer(new WorldRenderContext() { + @Override + public WorldRenderer getWorldRenderer() { + return event.getLevelRenderer(); + } + + @Override + public MatrixStack getMatrixStack() { + return event.getPoseStack(); + } + + @Override + public float getTickDelta() { + return event.getPartialTick(); + } + + @Override + public Camera getCamera() { return event.getCamera(); } @Override - public GameRenderer gameRenderer() { + public GameRenderer getGameRenderer() { return MinecraftClient.getInstance().gameRenderer; } @Override - public LightmapTextureManager lightmapTextureManager() { + public LightmapTextureManager getLightmapTextureManager() { return MinecraftClient.getInstance().gameRenderer.getLightmapTextureManager(); } @Deprecated @Override - public Matrix4f projectionMatrix() { - return null; + public Matrix4f getProjectionMatrix() { + return event.getProjectionMatrix(); } @Override - public ClientWorld world() { + public ClientWorld getWorld() { return MinecraftClient.getInstance().world; } @Override - public Profiler profiler() { + public Profiler getProfiler() { return MinecraftClient.getInstance().getProfiler(); } @Deprecated @Override - public boolean advancedTranslucency() { + public boolean isAdvancedTranslucency() { return event.getLevelRenderer().isTerrainRenderComplete(); } @Override - public VertexConsumerProvider consumers() { - return event.getMultiBufferSource(); + public VertexConsumerProvider getConsumers() { + return MinecraftClient.getInstance().getBufferBuilders().getOutlineVertexConsumers(); } @Override - public Frustum frustum() { + public Frustum getFrustum() { return null; } - }, event.getTarget())); + }); } } public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { beforeBlockOutlineListeners.add(listener); } + + public static void registerWorldRenderAfterLevel(WorldRenderContextListener listener) { + worldRenderAfterLevelListeners.add(listener); + } } diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/forge/MCPitanLibForge.java b/forge/src/main/java/net/pitan76/mcpitanlib/forge/MCPitanLibForge.java index 3347f2852..6a8fffd22 100644 --- a/forge/src/main/java/net/pitan76/mcpitanlib/forge/MCPitanLibForge.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/forge/MCPitanLibForge.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.forge; import dev.architectury.platform.forge.EventBuses; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.pitan76.mcpitanlib.MCPitanLib; @@ -8,7 +9,9 @@ @Mod(MCPitanLib.MOD_ID) public class MCPitanLibForge { public MCPitanLibForge() { - EventBuses.registerModEventBus(MCPitanLib.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); + IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); + EventBuses.registerModEventBus(MCPitanLib.MOD_ID, bus); + MCPitanLib.init(); } } \ No newline at end of file diff --git a/info.properties b/info.properties index 109c811e5..b30d56f09 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.1 +mod_version=2.4.2 maven_group=net.pitan76 \ No newline at end of file diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java deleted file mode 100644 index 471ed71b0..000000000 --- a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/client/event/neoforge/WorldRenderRegistryImpl.java +++ /dev/null @@ -1,105 +0,0 @@ -package net.pitan76.mcpitanlib.api.client.event.neoforge; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.*; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.profiler.Profiler; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.client.event.RenderHighlightEvent; -import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; -import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; -import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; -import org.joml.Matrix4f; - -import java.util.ArrayList; -import java.util.List; - -public class WorldRenderRegistryImpl { - - public static List beforeBlockOutlineListeners = new ArrayList<>(); - - @SubscribeEvent - public static void renderOutlineEvent(RenderHighlightEvent event) { - for (BeforeBlockOutlineListener listener : beforeBlockOutlineListeners) { - listener.beforeBlockOutline(new BeforeBlockOutlineEvent(new WorldRenderContext() { - @Override - public WorldRenderer worldRenderer() { - return event.getLevelRenderer(); - } - - @Override - public MatrixStack matrixStack() { - return event.getPoseStack(); - } - - @Override - public float tickDelta() { - return event.getPartialTick(); - } - - @Override - public long limitTime() { - return (long) event.getPartialTick(); - } - - @Override - public boolean blockOutlines() { - return event.getTarget().getType() == HitResult.Type.BLOCK; - } - - @Override - public Camera camera() { - return event.getCamera(); - } - - @Override - public GameRenderer gameRenderer() { - return MinecraftClient.getInstance().gameRenderer; - } - - @Override - public LightmapTextureManager lightmapTextureManager() { - return MinecraftClient.getInstance().gameRenderer.getLightmapTextureManager(); - } - - @Deprecated - @Override - public Matrix4f projectionMatrix() { - return null; - } - - @Override - public ClientWorld world() { - return MinecraftClient.getInstance().world; - } - - @Override - public Profiler profiler() { - return MinecraftClient.getInstance().getProfiler(); - } - - @Deprecated - @Override - public boolean advancedTranslucency() { - return event.getLevelRenderer().isTerrainRenderComplete(); - } - - @Override - public VertexConsumerProvider consumers() { - return event.getMultiBufferSource(); - } - - @Override - public Frustum frustum() { - return event.getLevelRenderer().getFrustum(); - } - }, event.getTarget())); - } - } - - public static void registerWorldRenderBeforeBlockOutline(BeforeBlockOutlineListener listener) { - beforeBlockOutlineListeners.add(listener); - } -} From ca1e4cdf2ff0c2d7610a852f87112b80b07990f1 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 14 Sep 2024 12:39:49 +0900 Subject: [PATCH 369/617] add APIs --- .../mcpitanlib/api/block/ExtendBlock.java | 2 +- .../listener/WorldRenderContextListener.java | 2 +- .../event/block/BlockScheduledTickEvent.java | 8 +- .../api/event/v0/LivingHurtEventRegistry.java | 21 ++++ .../api/event/v0/event/LivingHurtEvent.java | 91 +++++++++++++++ .../api/util/CompatibleRecipeEntryUtil.java | 4 + .../mcpitanlib/api/util/IngredientUtil.java | 6 +- .../pitan76/mcpitanlib/api/util/Logger.java | 105 ++++++++++++++++++ .../pitan76/mcpitanlib/api/util/MathUtil.java | 11 +- .../mcpitanlib/api/util/ServerUtil.java | 50 +++++++++ .../mcpitanlib/api/util/WorldUtil.java | 39 +++++-- .../api/util/client/ClientUtil.java | 40 +++++++ .../mcpitanlib/api/util/client/MouseUtil.java | 46 ++++++++ .../api/util/client/WindowUtil.java | 42 +++++++ .../api/util/math/random/CompatRandom.java | 83 ++++++++++++++ .../event/fabric/WorldRenderRegistryImpl.java | 2 +- .../event/forge/WorldRenderRegistryImpl.java | 2 +- info.properties | 2 +- 18 files changed, 529 insertions(+), 27 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/LivingHurtEventRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/LivingHurtEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MouseUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/WindowUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/math/random/CompatRandom.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index ef1057fb4..d5ecc3ea1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -90,7 +90,7 @@ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos po * @param event BlockScheduledTickEvent */ public void scheduledTick(BlockScheduledTickEvent event) { - super.scheduledTick(event.state, event.world, event.pos, event.random); + super.scheduledTick(event.state, event.world, event.pos, event.random.getJavaRandom()); } @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContextListener.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContextListener.java index a24c8c486..7025eae59 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContextListener.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContextListener.java @@ -6,5 +6,5 @@ @Environment(EnvType.CLIENT) @FunctionalInterface public interface WorldRenderContextListener { - void renderer(WorldRenderContext context); + void render(WorldRenderContext context); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java index 4c091e0a7..c0e89ff67 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java @@ -6,6 +6,7 @@ import net.minecraft.util.math.BlockPos; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; import java.util.Random; @@ -13,13 +14,13 @@ public class BlockScheduledTickEvent extends BaseEvent { public BlockState state; public ServerWorld world; public BlockPos pos; - public Random random; + public CompatRandom random; public BlockScheduledTickEvent(BlockState state, ServerWorld world, BlockPos pos, Random random) { this.state = state; this.world = world; this.pos = pos; - this.random = random; + this.random = new CompatRandom(random); } public BlockState getState() { @@ -34,8 +35,7 @@ public ServerWorld getWorld() { return world; } - @Deprecated - public Random getRandom() { + public CompatRandom getRandom() { return random; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/LivingHurtEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/LivingHurtEventRegistry.java new file mode 100644 index 000000000..3777e195e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/LivingHurtEventRegistry.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.event.v0; + +import dev.architectury.event.EventResult; +import dev.architectury.event.events.common.EntityEvent; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.pitan76.mcpitanlib.api.event.v0.event.LivingHurtEvent; + +public class LivingHurtEventRegistry { + public static void register(LivingHurt livingHurt) { + EntityEvent.LIVING_HURT.register(livingHurt::hurt); + } + + public interface LivingHurt { + default EventResult hurt(LivingEntity var1, DamageSource var2, float var3) { + return hurt(new LivingHurtEvent(var1, var2, var3)); + } + + EventResult hurt(LivingHurtEvent event); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/LivingHurtEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/LivingHurtEvent.java new file mode 100644 index 000000000..5caf6042c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/LivingHurtEvent.java @@ -0,0 +1,91 @@ +package net.pitan76.mcpitanlib.api.event.v0.event; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; + +public class LivingHurtEvent { + public LivingEntity entity; + public DamageSource damageSource; + public float damageAmount; + + public LivingHurtEvent(LivingEntity entity, DamageSource damageSource, float damageAmount) { + this.entity = entity; + this.damageSource = damageSource; + this.damageAmount = damageAmount; + } + + public LivingEntity getEntity() { + return entity; + } + + public DamageSource getDamageSource() { + return damageSource; + } + + public float getDamageAmount() { + return damageAmount; + } + + public Entity getAttacker() { + return damageSource.getAttacker(); + } + + public Entity getSource() { + return damageSource.getSource(); + } + + public boolean isDirect() { + return !damageSource.isNeutral(); + } + + public boolean isPlayerAttacker() { + return getAttacker() instanceof PlayerEntity; + } + + public PlayerEntity getPlayerEntityAttacker() { + return (PlayerEntity) getAttacker(); + } + + public Player getPlayerAttacker() { + return new Player(getPlayerEntityAttacker()); + } + + public World getWorld() { + return entity.getWorld(); + } + + public boolean isClient() { + return getWorld().isClient(); + } + + public ItemStack getWeaponStack() { + if (isPlayerAttacker()) + return getPlayerAttacker().getMainHandStack(); + + if (getAttacker() instanceof LivingEntity) { + LivingEntity livingEntity = (LivingEntity) getAttacker(); + return livingEntity.getMainHandStack(); + } + + return ItemStack.EMPTY; + } + + public Item getWeaponItem() { + return getWeaponStack().getItem(); + } + + public boolean isWeaponEmpty() { + return getWeaponStack().isEmpty(); + } + + public boolean isWeaponItemEqual(Item item) { + if (isWeaponEmpty()) return false; + return getWeaponItem() == item; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java index 18fda59b1..ab1fada7f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java @@ -10,4 +10,8 @@ public class CompatibleRecipeEntryUtil { public static CompatibleRecipeEntry createShapelessRecipe(Identifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { return new CompatibleRecipeEntry(id, group, category, RecipeUtil.createShapelessRecipe(id, group, category, output, input)); } + + public static CompatibleRecipeEntry createShapelessRecipe(CompatIdentifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { + return createShapelessRecipe(id.toMinecraft(), group, category, output, input); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java index ce41f5413..8f6716544 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java @@ -35,15 +35,15 @@ public static List getItems(Ingredient ingredient) { return items; } - public IntList getMatchingStacksIds(Ingredient ingredient) { + public static IntList getMatchingStacksIds(Ingredient ingredient) { return ingredient.getMatchingItemIds(); } - public List getMatchingStacksAsList(Ingredient ingredient) { + public static List getMatchingStacksAsList(Ingredient ingredient) { return new ArrayList<>(Arrays.asList(getMatchingStacks(ingredient))); } - public ItemStack[] getMatchingStacks(Ingredient ingredient) { + public static ItemStack[] getMatchingStacks(Ingredient ingredient) { return ingredient.getMatchingStacks(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java index 1309ddebd..728eeab5b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java @@ -1,5 +1,8 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.client.ClientUtil; + public class Logger { public String name = ""; @@ -77,4 +80,106 @@ public void usePrefix(boolean use) { public boolean isUsingPrefix() { return usingPrefix; } + + /** + * Log message + * @param message log message + * @param isDebug if true, log as debug + */ + public void log(String message, boolean isDebug) { + if (isDebug) { + debug(message); + return; + } + info(message); + } + + public void log_onClientTick(int tick, String message, boolean isDebug) { + if (!PlatformUtil.isClient()) return; + long time = ClientUtil.getRenderTime(); + if (time % tick != 0) return; + + log(message, isDebug); + } + + public void log_onWorldTick(int tick, String message, World world, boolean isDebug) { + long time = WorldUtil.getTime(world); + if (time % tick != 0) return; + + log(message, isDebug); + } + + public void log_onSystemTick(int tick, String message, boolean isDebug) { + long millis = System.currentTimeMillis(); + long time = millis / 1000 * 60; + + if (time % tick != 0) return; + + log(message, isDebug); + } + + public void log_onClientTick(int tick, String message) { + log_onClientTick(tick, message, false); + } + + public void log_onWorldTick(int tick, String message, World world) { + log_onWorldTick(tick, message, world, false); + } + + public void log_onSystemTick(int tick, String message) { + log_onSystemTick(tick, message, false); + } + + /** + * Log message every second on ClientTick + * @param message log message + * @param isDebug if true, log as debug + */ + public void log_onClientTick(String message, boolean isDebug) { + log_onClientTick(60, message, isDebug); + } + + /** + * Log message every second on WorldTick + * @param message log message + * @param world world + * @param isDebug if true, log as debug + */ + public void log_onWorldTick(String message, World world, boolean isDebug) { + log_onWorldTick(60, message, world, isDebug); + } + + /** + * Log message every second on SystemTick + * @param message log message + * @param isDebug if true, log as debug + */ + public void log_onSystemTick(String message, boolean isDebug) { + log_onSystemTick(60, message, isDebug); + } + + /** + * Log message every second on ClientTick + * @param message log message + */ + public void log_onClientTick(String message) { + log_onClientTick(message, false); + } + + /** + * Log message every second on WorldTick + * @param message log message + * @param world world + */ + public void log_onWorldTick(String message, World world) { + log_onWorldTick(message, world, false); + } + + /** + * Log message every second on SystemTick + * @param message log message + */ + public void log_onSystemTick(String message) { + log_onSystemTick(message, false); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java index e6af344bc..cb2ed2b5e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/MathUtil.java @@ -2,17 +2,16 @@ import net.minecraft.util.math.Quaternion; import net.minecraft.util.math.Vec3f; - -import java.util.Random; +import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; public class MathUtil { - public static Random createRandom(long seed) { - return new Random(seed); + public static CompatRandom createRandom(long seed) { + return CompatRandom.of(seed); } - public static Random createRandom() { - return new Random(); + public static CompatRandom createRandom() { + return CompatRandom.of(); } @Deprecated diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java new file mode 100644 index 000000000..e4e74f1f9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java @@ -0,0 +1,50 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; + +public class ServerUtil { + public static MinecraftServer getServer(World world) { + return world.getServer(); + } + + public static String getIP(MinecraftServer server) { + return server.getServerIp(); + } + + public static int getPort(MinecraftServer server) { + return server.getServerPort(); + } + + public static String getMotd(MinecraftServer server) { + return server.getServerMotd(); + } + + public static String getServerModName(MinecraftServer server) { + return server.getServerModName(); + } + + public static int getMaxPlayerCount(MinecraftServer server) { + return server.getMaxPlayerCount(); + } + + public static int getCurrentPlayerCount(MinecraftServer server) { + return server.getCurrentPlayerCount(); + } + + public static boolean isOnlineMode(MinecraftServer server) { + return server.isOnlineMode(); + } + + public static boolean isServerRunning(MinecraftServer server) { + return server.isRunning(); + } + + public static boolean isServerDedicated(MinecraftServer server) { + return server.isDedicated(); + } + + public static boolean isSingleplayer(MinecraftServer server) { + return server.isSingleplayer(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index aaeaa28f5..31e8b5dfc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -26,10 +26,10 @@ import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; import org.jetbrains.annotations.Nullable; -import java.util.Objects; -import java.util.Optional; +import java.util.*; public class WorldUtil { public static boolean hasSkyLight(World world) { @@ -115,34 +115,34 @@ public static Optional getServer(World world) { return Optional.ofNullable(world.getServer()); } - public static World getWorld(World world, Identifier worldId) { + public static ServerWorld getWorld(World world, Identifier worldId) { Optional server = getServer(world); if (!server.isPresent()) return null; return getWorld(server.get(), worldId); } - public static Optional getWorld(World world, CompatIdentifier worldId) { + public static Optional getWorld(World world, CompatIdentifier worldId) { return Optional.ofNullable(getWorld(world, worldId.toMinecraft())); } - public static World getOverworld(MinecraftServer server) { + public static ServerWorld getOverworld(MinecraftServer server) { return server.getWorld(World.OVERWORLD); } - public static World getNether(MinecraftServer server) { + public static ServerWorld getNether(MinecraftServer server) { return server.getWorld(World.NETHER); } - public static World getEnd(MinecraftServer server) { + public static ServerWorld getEnd(MinecraftServer server) { return server.getWorld(World.END); } - public static World getWorld(MinecraftServer server, Identifier worldId) { + public static ServerWorld getWorld(MinecraftServer server, Identifier worldId) { return server.getWorld(RegistryKey.of(Registry.WORLD_KEY, worldId)); } - public static World getWorld(MinecraftServer server, CompatIdentifier worldId) { + public static ServerWorld getWorld(MinecraftServer server, CompatIdentifier worldId) { return getWorld(server, worldId.toMinecraft()); } @@ -260,4 +260,25 @@ public static boolean canSetBlock(World world, BlockPos pos) { public static void updateComparators(World world, BlockPos pos, Block block) { world.updateComparators(pos, block); } + + public static List getPlayers(World world) { + List players = new ArrayList<>(); + for (PlayerEntity player : world.getPlayers()) { + players.add(new Player(player)); + } + + return players; + } + + public static Player getPlayer(World world, UUID uuid) { + return new Player(world.getPlayerByUuid(uuid)); + } + + public static CompatRandom getRandom(World world) { + return new CompatRandom(world.getRandom()); + } + + public static long getTime(World world) { + return world.getTime(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java index bf2fad7cd..fbe70af06 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java @@ -1,16 +1,23 @@ package net.pitan76.mcpitanlib.api.util.client; +import com.mojang.authlib.GameProfile; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Mouse; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.texture.TextureManager; +import net.minecraft.client.util.Window; import net.minecraft.client.world.ClientWorld; import net.minecraft.resource.ResourceManager; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.profiler.Profiler; import net.pitan76.mcpitanlib.api.entity.Player; +import java.io.File; import java.util.Optional; public class ClientUtil { @@ -62,4 +69,37 @@ public static Optional getTime() { if (getClient().world == null) return Optional.empty(); return Optional.of(getClient().world.getTime()); } + + public static long getRenderTime() { + return (long) getClient().getTickDelta(); + } + + public static HitResult getTarget() { + return getClient().crosshairTarget; + } + + public static WorldRenderer getWorldRenderer() { + return getClient().worldRenderer; + } + + public static File getRunDirectory() { + return getClient().runDirectory; + } + + public static Profiler getProfiler() { + return getClient().getProfiler(); + } + + public static GameProfile getGameProfile() { + if (getClient().player == null) return null; + return getClient().player.getGameProfile(); + } + + public static Window getWindow() { + return getClient().getWindow(); + } + + public static Mouse getMouse() { + return getClient().mouse; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MouseUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MouseUtil.java new file mode 100644 index 000000000..ad40ce056 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MouseUtil.java @@ -0,0 +1,46 @@ +package net.pitan76.mcpitanlib.api.util.client; + +import net.minecraft.client.Mouse; + +public class MouseUtil { + + public static Mouse getMouse() { + return ClientUtil.getMouse(); + } + + public static double getMouseX() { + return getMouse().getX(); + } + + public static double getMouseY() { + return getMouse().getY(); + } + + public static boolean isCursorLocked() { + return getMouse().isCursorLocked(); + } + + public static void lockCursor() { + getMouse().lockCursor(); + } + + public static void unlockCursor() { + getMouse().unlockCursor(); + } + + public static void tick() { + getMouse().updateMouse(); + } + + public static boolean wasLeftButtonClicked() { + return getMouse().wasLeftButtonClicked(); + } + + public static boolean wasRightButtonClicked() { + return getMouse().wasRightButtonClicked(); + } + + public static boolean wasMiddleButtonClicked() { + return getMouse().wasMiddleButtonClicked(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/WindowUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/WindowUtil.java new file mode 100644 index 000000000..a57e74910 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/WindowUtil.java @@ -0,0 +1,42 @@ +package net.pitan76.mcpitanlib.api.util.client; + +import net.minecraft.client.util.Window; + +public class WindowUtil { + + public static Window getWindow() { + return ClientUtil.getWindow(); + } + + public static int getWindowScaledWidth() { + return getWindow().getScaledWidth(); + } + + public static int getWindowScaledHeight() { + return getWindow().getScaledHeight(); + } + + public static int getWindowWidth() { + return getWindow().getWidth(); + } + + public static int getWindowHeight() { + return getWindow().getHeight(); + } + + public static int getWindowX() { + return getWindow().getX(); + } + + public static int getWindowY() { + return getWindow().getY(); + } + + public static void setTitle(String title) { + getWindow().setTitle(title); + } + + public static void close() { + getWindow().close(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/random/CompatRandom.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/random/CompatRandom.java new file mode 100644 index 000000000..b66834bd1 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/random/CompatRandom.java @@ -0,0 +1,83 @@ +package net.pitan76.mcpitanlib.api.util.math.random; + +public class CompatRandom { + private final java.util.Random javaRandom; + + public CompatRandom(java.util.Random javaRandom) { + this.javaRandom = javaRandom; + } + + + @Deprecated + public CompatRandom() { + this.javaRandom = new java.util.Random(); + } + + @Deprecated + public CompatRandom(long seed) { + this.javaRandom = new java.util.Random(seed); + } + + public static CompatRandom of(long seed) { + return new CompatRandom(seed); + } + + public static CompatRandom of() { + return new CompatRandom(); + } + + public void setSeed(long seed) { + javaRandom.setSeed(seed); + } + + public void skip(int count) { + for (int i = 0; i < count; i++) { + javaRandom.nextInt(); + } + } + + public void split() { + javaRandom.nextInt(); + } + + public int nextInt() { + return javaRandom.nextInt(); + } + + public int nextInt(int bound) { + return javaRandom.nextInt(bound); + } + + public long nextLong() { + return javaRandom.nextLong(); + } + + public double nextDouble() { + return javaRandom.nextDouble(); + } + + public double nextGaussian() { + return javaRandom.nextGaussian(); + } + + public float nextFloat() { + return javaRandom.nextFloat(); + } + + public int nextBetween(int min, int max) { + return min + javaRandom.nextInt(max - min); + } + + public int nextBetweenExclusive(int min, int max) { + return min + javaRandom.nextInt(max - min + 1); + } + + public boolean nextBoolean() { + return javaRandom.nextBoolean(); + } + + @Deprecated + public java.util.Random getJavaRandom() { + return javaRandom; + } +} diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java index 6b398c518..2d14d9ed2 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java @@ -80,7 +80,7 @@ public boolean isAdvancedTranslucency() { public static void registerWorldRenderAfterLevel(WorldRenderContextListener listener) { WorldRenderEvents.END.register((context -> { - listener.renderer(new WorldRenderContext() { + listener.render(new WorldRenderContext() { @Override public WorldRenderer getWorldRenderer() { return context.worldRenderer(); diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java index 7a5424462..4da0c92b4 100644 --- a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java @@ -105,7 +105,7 @@ public static void registerWorldRenderAfterLevel(RenderLevelStageEvent event) { if (!event.getStage().equals(RenderLevelStageEvent.Stage.AFTER_SKY)) return; for (WorldRenderContextListener listener : worldRenderAfterLevelListeners) { - listener.renderer(new WorldRenderContext() { + listener.render(new WorldRenderContext() { @Override public WorldRenderer getWorldRenderer() { return event.getLevelRenderer(); diff --git a/info.properties b/info.properties index b30d56f09..834e58920 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.2 +mod_version=2.4.3 maven_group=net.pitan76 \ No newline at end of file From cc89239828e4114fccc5f83375fc85bf594d5618 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Mon, 16 Sep 2024 19:03:18 +0900 Subject: [PATCH 370/617] add APIs --- .../api/block/CompatibleBlockSettings.java | 5 + .../api/command/argument/BlockCommand.java | 20 ++ .../api/command/argument/BooleanCommand.java | 19 ++ .../api/command/argument/ItemCommand.java | 4 +- .../api/command/argument/LongCommand.java | 19 ++ .../pitan76/mcpitanlib/api/entity/Player.java | 61 ++++- .../api/event/BlockCommandEvent.java | 11 + .../api/event/BooleanCommandEvent.java | 10 + .../api/event/LongCommandEvent.java | 10 + .../api/event/ServerCommandEvent.java | 18 ++ .../mcpitanlib/api/nbt/NbtTypeBytes.java | 20 ++ .../api/registry/CompatRegistry.java | 10 + .../api/registry/v2/CompatRegistryV2.java | 12 + .../api/sound/CompatBlockSoundGroup.java | 221 ++++++++++++++++++ .../api/util/CommandManagerUtil.java | 84 +++++++ .../mcpitanlib/api/util/CommandUtil.java | 53 +++++ .../pitan76/mcpitanlib/api/util/ItemUtil.java | 12 + .../pitan76/mcpitanlib/api/util/Logger.java | 5 + .../pitan76/mcpitanlib/api/util/NbtUtil.java | 74 +++++- .../core/command/CommandResult.java | 73 ++++++ .../core/registry/MCPLRegistry.java | 14 ++ info.properties | 2 +- 22 files changed, 749 insertions(+), 8 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/BlockCommand.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/BooleanCommand.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/LongCommand.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/BlockCommandEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/BooleanCommandEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/LongCommandEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/nbt/NbtTypeBytes.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatBlockSoundGroup.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/CommandManagerUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/CommandUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/core/command/CommandResult.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java index b65926573..1be4a26c4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java @@ -3,6 +3,7 @@ import net.minecraft.block.*; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.util.DyeColor; +import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; import java.util.function.Function; import java.util.function.ToIntFunction; @@ -174,6 +175,10 @@ public CompatibleBlockSettings sounds(BlockSoundGroup blockSoundGroup) { return this; } + public CompatibleBlockSettings sounds(CompatBlockSoundGroup blockSoundGroup) { + return sounds(blockSoundGroup.get()); + } + public CompatibleBlockSettings luminance(ToIntFunction luminance) { settings.luminance(luminance); return this; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/BlockCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/BlockCommand.java new file mode 100644 index 000000000..7abc01c06 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/BlockCommand.java @@ -0,0 +1,20 @@ +package net.pitan76.mcpitanlib.api.command.argument; + +import net.minecraft.block.Block; +import net.minecraft.command.argument.BlockStateArgumentType; +import net.pitan76.mcpitanlib.api.event.BlockCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; + +public abstract class BlockCommand extends RequiredCommand { + @Override + public BlockStateArgumentType getArgumentType() { + return BlockStateArgumentType.blockState(); + } + + public abstract void execute(BlockCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((BlockCommandEvent) event); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/BooleanCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/BooleanCommand.java new file mode 100644 index 000000000..32687d804 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/BooleanCommand.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.command.argument; + +import com.mojang.brigadier.arguments.BoolArgumentType; +import net.pitan76.mcpitanlib.api.event.BooleanCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; + +public abstract class BooleanCommand extends RequiredCommand { + @Override + public BoolArgumentType getArgumentType() { + return BoolArgumentType.bool(); + } + + public abstract void execute(BooleanCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((BooleanCommandEvent) event); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java index 0a86e9727..af61f849d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/ItemCommand.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.command.argument; import net.minecraft.command.argument.ItemStackArgumentType; -import net.minecraft.entity.Entity; +import net.minecraft.item.Item; import net.pitan76.mcpitanlib.api.event.ItemCommandEvent; import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; -public abstract class ItemCommand extends RequiredCommand { +public abstract class ItemCommand extends RequiredCommand { @Override public ItemStackArgumentType getArgumentType() { return ItemStackArgumentType.itemStack(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/LongCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/LongCommand.java new file mode 100644 index 000000000..45bd3b622 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/argument/LongCommand.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.command.argument; + +import com.mojang.brigadier.arguments.LongArgumentType; +import net.pitan76.mcpitanlib.api.event.LongCommandEvent; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; + +public abstract class LongCommand extends RequiredCommand { + @Override + public LongArgumentType getArgumentType() { + return LongArgumentType.longArg(); + } + + public abstract void execute(LongCommandEvent event); + + @Override + public void execute(ServerCommandEvent event) { + execute((LongCommandEvent) event); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 7c06b5b1e..ed6f6d176 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -6,6 +6,7 @@ import net.minecraft.block.BlockState; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.player.ItemCooldownManager; import net.minecraft.entity.player.PlayerAbilities; import net.minecraft.entity.player.PlayerEntity; @@ -29,6 +30,8 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffect; +import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffectInstance; import net.pitan76.mcpitanlib.api.gui.ExtendedNamedScreenHandlerFactory; import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; @@ -37,9 +40,7 @@ import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; import net.pitan76.mcpitanlib.core.player.ItemCooldown; -import java.util.Optional; -import java.util.OptionalInt; -import java.util.UUID; +import java.util.*; import java.util.function.Consumer; /* @@ -421,4 +422,58 @@ public Optional getCurrentHandItem() { return Optional.empty(); } + + public void addStatusEffect(CompatStatusEffectInstance effect) { + getEntity().addStatusEffect(effect.getInstance()); + } + + public void removeStatusEffect(CompatStatusEffect effect) { + getEntity().removeStatusEffect(effect.getStatusEffect(getWorld())); + } + + public List getStatusEffects() { + List compatEffects = new ArrayList<>(); + + for (StatusEffectInstance effect : getEntity().getStatusEffects()) { + compatEffects.add(new CompatStatusEffectInstance(effect)); + } + + return compatEffects; + } + + public void addExperience(int experience) { + getEntity().addExperience(experience); + } + + public int getExperienceLevel() { + return getEntity().experienceLevel; + } + + public void addExperienceLevels(int levels) { + getEntity().addExperienceLevels(levels); + } + + public void setExperienceLevel(int level) { + getEntity().experienceLevel = level; + } + + public void addScore(int score) { + getEntity().addScore(score); + } + + public int getScore() { + return getEntity().getScore(); + } + + public void setScore(int score) { + getEntity().setScore(score); + } + + public int getTotalExperience() { + return getEntity().totalExperience; + } + + public void setTotalExperience(int experience) { + getEntity().totalExperience = experience; + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/BlockCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/BlockCommandEvent.java new file mode 100644 index 000000000..b54933766 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/BlockCommandEvent.java @@ -0,0 +1,11 @@ +package net.pitan76.mcpitanlib.api.event; + +import net.minecraft.block.Block; +import net.minecraft.command.argument.BlockStateArgumentType; +import net.pitan76.mcpitanlib.api.command.argument.BlockCommand; + +public class BlockCommandEvent extends RequiredCommandEvent { + public Block getValue() { + return BlockStateArgumentType.getBlockState(context, ((BlockCommand) getCommand()).getArgumentName()).getBlockState().getBlock(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/BooleanCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/BooleanCommandEvent.java new file mode 100644 index 000000000..e465945ee --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/BooleanCommandEvent.java @@ -0,0 +1,10 @@ +package net.pitan76.mcpitanlib.api.event; + +import com.mojang.brigadier.arguments.BoolArgumentType; +import net.pitan76.mcpitanlib.api.command.argument.BooleanCommand; + +public class BooleanCommandEvent extends RequiredCommandEvent { + public Boolean getValue() { + return BoolArgumentType.getBool(context, ((BooleanCommand) getCommand()).getArgumentName()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/LongCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/LongCommandEvent.java new file mode 100644 index 000000000..744678f01 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/LongCommandEvent.java @@ -0,0 +1,10 @@ +package net.pitan76.mcpitanlib.api.event; + +import com.mojang.brigadier.arguments.LongArgumentType; +import net.pitan76.mcpitanlib.api.command.argument.LongCommand; + +public class LongCommandEvent extends RequiredCommandEvent { + public Long getValue() { + return LongArgumentType.getLong(context, ((LongCommand) getCommand()).getArgumentName()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java index c2192c9d6..846d751c4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java @@ -10,6 +10,8 @@ import net.minecraft.text.Text; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.util.WorldUtil; public class ServerCommandEvent extends CommandEvent { @@ -64,4 +66,20 @@ public void sendSuccess(Text message, boolean broadcastToOps) { public void sendFailure(Text message) { context.getSource().sendError(message); } + + public void sendSuccess(Text message) { + sendSuccess(message, false); + } + + public void sendSuccess(String message, boolean broadcastToOps) { + sendSuccess(TextUtil.literal(message), broadcastToOps); + } + + public void sendSuccess(String message) { + sendSuccess(TextUtil.literal(message)); + } + + public boolean isClient() { + return WorldUtil.isClient(getWorld()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/nbt/NbtTypeBytes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/nbt/NbtTypeBytes.java new file mode 100644 index 000000000..6f5a9757f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/nbt/NbtTypeBytes.java @@ -0,0 +1,20 @@ +package net.pitan76.mcpitanlib.api.nbt; + +import net.minecraft.nbt.NbtElement; + +public class NbtTypeBytes { + public static final byte END = NbtElement.END_TYPE; + public static final byte BYTE = NbtElement.BYTE_TYPE; + public static final byte SHORT = NbtElement.SHORT_TYPE; + public static final byte INT = NbtElement.INT_TYPE; + public static final byte LONG = NbtElement.LONG_TYPE; + public static final byte FLOAT = NbtElement.FLOAT_TYPE; + public static final byte DOUBLE = NbtElement.DOUBLE_TYPE; + public static final byte BYTE_ARRAY = NbtElement.BYTE_ARRAY_TYPE; + public static final byte STRING = NbtElement.STRING_TYPE; + public static final byte LIST = NbtElement.LIST_TYPE; + public static final byte COMPOUND = NbtElement.COMPOUND_TYPE; + public static final byte INT_ARRAY = NbtElement.INT_ARRAY_TYPE; + public static final byte LONG_ARRAY = NbtElement.LONG_ARRAY_TYPE; + public static final byte NUMBER = NbtElement.NUMBER_TYPE; +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index 56f9539da..7516ece2d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -3,7 +3,9 @@ import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.EntityType; +import net.minecraft.entity.effect.StatusEffect; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; @@ -124,6 +126,14 @@ public RegistryResult> registerParticleType(Identifier id, Suppl return new RegistryResult<>(mcplr.registryParticleType(id, supplier)); } + public RegistryResult registerEnchantment(Identifier id, Supplier supplier) { + return new RegistryResult<>(mcplr.registryEnchantment(id, supplier)); + } + + public RegistryResult registerStatusEffect(Identifier id, Supplier supplier) { + return new RegistryResult<>(mcplr.registryStatusEffect(id, supplier)); + } + public RegistryResult registerItemGroup(Identifier id, Supplier supplier) { return new RegistryResult<>(null); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 56928c0e6..5e279691d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -2,7 +2,9 @@ import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.EntityType; +import net.minecraft.entity.effect.StatusEffect; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; @@ -10,6 +12,8 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.SoundEvent; import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.enchantment.CompatEnchantment; +import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffect; import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.pitan76.mcpitanlib.api.registry.CompatRegistry; @@ -109,6 +113,14 @@ public RegistryResult> registerParticleType(CompatIdentifier id, return cr1.registerParticleType(id.toMinecraft(), supplier); } + public RegistryResult registerEnchantment(CompatIdentifier id, Supplier supplier) { + return cr1.registerEnchantment(id.toMinecraft(), () -> supplier.get().getEnchantment(null)); + } + + public RegistryResult registryStatusEffect(CompatIdentifier id, Supplier supplier) { + return cr1.registerStatusEffect(id.toMinecraft(), () -> supplier.get().getStatusEffect(null)); + } + public RegistryResult registerItemGroup(CompatIdentifier id, Supplier supplier) { return cr1.registerItemGroup(id.toMinecraft(), supplier); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatBlockSoundGroup.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatBlockSoundGroup.java new file mode 100644 index 000000000..9dafcc89c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatBlockSoundGroup.java @@ -0,0 +1,221 @@ +package net.pitan76.mcpitanlib.api.sound; + +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.sound.SoundEvent; + +public class CompatBlockSoundGroup { + public static final CompatBlockSoundGroup INTENTIONALLY_EMPTY = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup WOOD = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup GRAVEL = of(BlockSoundGroup.GRAVEL); + public static final CompatBlockSoundGroup GRASS = of(BlockSoundGroup.GRASS); + public static final CompatBlockSoundGroup LILY_PAD = of(BlockSoundGroup.LILY_PAD); + public static final CompatBlockSoundGroup STONE = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup METAL = of(BlockSoundGroup.METAL); + public static final CompatBlockSoundGroup GLASS = of(BlockSoundGroup.GLASS); + public static final CompatBlockSoundGroup WOOL = of(BlockSoundGroup.WOOL); + public static final CompatBlockSoundGroup SAND = of(BlockSoundGroup.SAND); + public static final CompatBlockSoundGroup SNOW = of(BlockSoundGroup.SNOW); + public static final CompatBlockSoundGroup POWDER_SNOW = of(BlockSoundGroup.POWDER_SNOW); + public static final CompatBlockSoundGroup LADDER = of(BlockSoundGroup.LADDER); + public static final CompatBlockSoundGroup ANVIL = of(BlockSoundGroup.ANVIL); + public static final CompatBlockSoundGroup SLIME = of(BlockSoundGroup.SLIME); + public static final CompatBlockSoundGroup HONEY = of(BlockSoundGroup.HONEY); + public static final CompatBlockSoundGroup WET_GRASS = of(BlockSoundGroup.WET_GRASS); + public static final CompatBlockSoundGroup CORAL = of(BlockSoundGroup.CORAL); + public static final CompatBlockSoundGroup BAMBOO = of(BlockSoundGroup.BAMBOO); + public static final CompatBlockSoundGroup BAMBOO_SAPLING = of(BlockSoundGroup.BAMBOO_SAPLING); + public static final CompatBlockSoundGroup SCAFFOLDING = of(BlockSoundGroup.SCAFFOLDING); + public static final CompatBlockSoundGroup SWEET_BERRY_BUSH = of(BlockSoundGroup.SWEET_BERRY_BUSH); + public static final CompatBlockSoundGroup CROP = of(BlockSoundGroup.CROP); + public static final CompatBlockSoundGroup STEM = of(BlockSoundGroup.STEM); + public static final CompatBlockSoundGroup VINE = of(BlockSoundGroup.VINE); + public static final CompatBlockSoundGroup NETHER_WART = of(BlockSoundGroup.NETHER_WART); + public static final CompatBlockSoundGroup LANTERN = of(BlockSoundGroup.LANTERN); + public static final CompatBlockSoundGroup NETHER_STEM = of(BlockSoundGroup.NETHER_STEM); + public static final CompatBlockSoundGroup NYLIUM = of(BlockSoundGroup.NYLIUM); + public static final CompatBlockSoundGroup FUNGUS = of(BlockSoundGroup.FUNGUS); + public static final CompatBlockSoundGroup ROOTS = of(BlockSoundGroup.ROOTS); + public static final CompatBlockSoundGroup SHROOMLIGHT = of(BlockSoundGroup.SHROOMLIGHT); + public static final CompatBlockSoundGroup WEEPING_VINES = of(BlockSoundGroup.WEEPING_VINES); + public static final CompatBlockSoundGroup WEEPING_VINES_LOW_PITCH = of(BlockSoundGroup.WEEPING_VINES_LOW_PITCH); + public static final CompatBlockSoundGroup SOUL_SAND = of(BlockSoundGroup.SOUL_SAND); + public static final CompatBlockSoundGroup SOUL_SOIL = of(BlockSoundGroup.SOUL_SOIL); + public static final CompatBlockSoundGroup BASALT = of(BlockSoundGroup.BASALT); + public static final CompatBlockSoundGroup WART_BLOCK = of(BlockSoundGroup.WART_BLOCK); + public static final CompatBlockSoundGroup NETHERRACK = of(BlockSoundGroup.NETHERRACK); + public static final CompatBlockSoundGroup NETHER_BRICKS = of(BlockSoundGroup.NETHER_BRICKS); + public static final CompatBlockSoundGroup NETHER_SPROUTS = of(BlockSoundGroup.NETHER_SPROUTS); + public static final CompatBlockSoundGroup NETHER_ORE = of(BlockSoundGroup.NETHER_ORE); + public static final CompatBlockSoundGroup BONE = of(BlockSoundGroup.BONE); + public static final CompatBlockSoundGroup NETHERITE = of(BlockSoundGroup.NETHERITE); + public static final CompatBlockSoundGroup ANCIENT_DEBRIS = of(BlockSoundGroup.ANCIENT_DEBRIS); + public static final CompatBlockSoundGroup LODESTONE = of(BlockSoundGroup.LODESTONE); + public static final CompatBlockSoundGroup CHAIN = of(BlockSoundGroup.CHAIN); + public static final CompatBlockSoundGroup NETHER_GOLD_ORE = of(BlockSoundGroup.NETHER_GOLD_ORE); + public static final CompatBlockSoundGroup GILDED_BLACKSTONE = of(BlockSoundGroup.GILDED_BLACKSTONE); + public static final CompatBlockSoundGroup CANDLE = of(BlockSoundGroup.CANDLE); + public static final CompatBlockSoundGroup AMETHYST_BLOCK = of(BlockSoundGroup.AMETHYST_BLOCK); + public static final CompatBlockSoundGroup AMETHYST_CLUSTER = of(BlockSoundGroup.AMETHYST_CLUSTER); + public static final CompatBlockSoundGroup SMALL_AMETHYST_BUD = of(BlockSoundGroup.SMALL_AMETHYST_BUD); + public static final CompatBlockSoundGroup MEDIUM_AMETHYST_BUD = of(BlockSoundGroup.MEDIUM_AMETHYST_BUD); + public static final CompatBlockSoundGroup LARGE_AMETHYST_BUD = of(BlockSoundGroup.LARGE_AMETHYST_BUD); + public static final CompatBlockSoundGroup TUFF = of(BlockSoundGroup.TUFF); + public static final CompatBlockSoundGroup TUFF_BRICKS = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup POLISHED_TUFF = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup CALCITE = of(BlockSoundGroup.CALCITE); + public static final CompatBlockSoundGroup DRIPSTONE_BLOCK = of(BlockSoundGroup.DRIPSTONE_BLOCK); + public static final CompatBlockSoundGroup POINTED_DRIPSTONE = of(BlockSoundGroup.POINTED_DRIPSTONE); + public static final CompatBlockSoundGroup COPPER = of(BlockSoundGroup.COPPER); + public static final CompatBlockSoundGroup COPPER_BULB = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup COPPER_GRATE = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup CAVE_VINES = of(BlockSoundGroup.CAVE_VINES); + public static final CompatBlockSoundGroup SPORE_BLOSSOM = of(BlockSoundGroup.SPORE_BLOSSOM); + public static final CompatBlockSoundGroup AZALEA = of(BlockSoundGroup.AZALEA); + public static final CompatBlockSoundGroup FLOWERING_AZALEA = of(BlockSoundGroup.FLOWERING_AZALEA); + public static final CompatBlockSoundGroup MOSS_CARPET = of(BlockSoundGroup.MOSS_CARPET); + public static final CompatBlockSoundGroup PINK_PETALS = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup MOSS_BLOCK = of(BlockSoundGroup.MOSS_BLOCK); + public static final CompatBlockSoundGroup BIG_DRIPLEAF = of(BlockSoundGroup.BIG_DRIPLEAF); + public static final CompatBlockSoundGroup SMALL_DRIPLEAF = of(BlockSoundGroup.SMALL_DRIPLEAF); + public static final CompatBlockSoundGroup ROOTED_DIRT = of(BlockSoundGroup.ROOTED_DIRT); + public static final CompatBlockSoundGroup HANGING_ROOTS = of(BlockSoundGroup.HANGING_ROOTS); + public static final CompatBlockSoundGroup AZALEA_LEAVES = of(BlockSoundGroup.AZALEA_LEAVES); + public static final CompatBlockSoundGroup SCULK_SENSOR = of(BlockSoundGroup.SCULK_SENSOR); + public static final CompatBlockSoundGroup SCULK_CATALYST = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup SCULK = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup SCULK_VEIN = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup SCULK_SHRIEKER = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup GLOW_LICHEN = of(BlockSoundGroup.GLOW_LICHEN); + public static final CompatBlockSoundGroup DEEPSLATE = of(BlockSoundGroup.DEEPSLATE); + public static final CompatBlockSoundGroup DEEPSLATE_BRICKS = of(BlockSoundGroup.DEEPSLATE_BRICKS); + public static final CompatBlockSoundGroup DEEPSLATE_TILES = of(BlockSoundGroup.DEEPSLATE_TILES); + public static final CompatBlockSoundGroup POLISHED_DEEPSLATE = of(BlockSoundGroup.POLISHED_DEEPSLATE); + public static final CompatBlockSoundGroup FROGLIGHT = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup FROGSPAWN = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup MANGROVE_ROOTS = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup MUDDY_MANGROVE_ROOTS = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup MUD = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup MUD_BRICKS = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup PACKED_MUD = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup HANGING_SIGN = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup NETHER_WOOD_HANGING_SIGN = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup BAMBOO_WOOD_HANGING_SIGN = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup BAMBOO_WOOD = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup NETHER_WOOD = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup CHERRY_WOOD = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup CHERRY_SAPLING = of(BlockSoundGroup.GRASS); + public static final CompatBlockSoundGroup CHERRY_LEAVES = of(BlockSoundGroup.GRASS); + public static final CompatBlockSoundGroup CHERRY_WOOD_HANGING_SIGN = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup CHISELED_BOOKSHELF = of(BlockSoundGroup.WOOD); + public static final CompatBlockSoundGroup SUSPICIOUS_SAND = of(BlockSoundGroup.SAND); + public static final CompatBlockSoundGroup SUSPICIOUS_GRAVEL = of(BlockSoundGroup.GRAVEL); + public static final CompatBlockSoundGroup DECORATED_POT = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup DECORATED_POT_SHATTER = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup TRIAL_SPAWNER = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup SPONGE = of(BlockSoundGroup.GRASS); + public static final CompatBlockSoundGroup WET_SPONGE = of(BlockSoundGroup.WET_GRASS); + public static final CompatBlockSoundGroup VAULT = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup HEAVY_CORE = of(BlockSoundGroup.STONE); + public static final CompatBlockSoundGroup COBWEB = of(BlockSoundGroup.STONE); + + public BlockSoundGroup blockSoundGroup; + + private final float volume; + private final float pitch; + private final SoundEvent breakSound; + private final SoundEvent stepSound; + private final SoundEvent placeSound; + private final SoundEvent hitSound; + private final SoundEvent fallSound; + + public CompatBlockSoundGroup(BlockSoundGroup blockSoundGroup) { + this.blockSoundGroup = blockSoundGroup; + + this.volume = blockSoundGroup.getVolume(); + this.pitch = blockSoundGroup.getPitch(); + this.breakSound = blockSoundGroup.getBreakSound(); + this.stepSound = blockSoundGroup.getStepSound(); + this.placeSound = blockSoundGroup.getPlaceSound(); + this.hitSound = blockSoundGroup.getHitSound(); + this.fallSound = blockSoundGroup.getFallSound(); + } + + public CompatBlockSoundGroup(float volume, float pitch, SoundEvent breakSound, SoundEvent stepSound, SoundEvent placeSound, SoundEvent hitSound, SoundEvent fallSound) { + this.blockSoundGroup = new BlockSoundGroup(volume, pitch, breakSound, stepSound, placeSound, hitSound, fallSound); + + this.volume = volume; + this.pitch = pitch; + this.breakSound = breakSound; + this.stepSound = stepSound; + this.placeSound = placeSound; + this.hitSound = hitSound; + this.fallSound = fallSound; + } + + public BlockSoundGroup get() { + if (blockSoundGroup == null) { + return new BlockSoundGroup(volume, pitch, breakSound, stepSound, placeSound, hitSound, fallSound); + } + return blockSoundGroup; + } + + public static CompatBlockSoundGroup of(BlockSoundGroup blockSoundGroup) { + return new CompatBlockSoundGroup(blockSoundGroup); + } + + public static CompatBlockSoundGroup of(float volume, float pitch, SoundEvent breakSound, SoundEvent stepSound, SoundEvent placeSound, SoundEvent hitSound, SoundEvent fallSound) { + return new CompatBlockSoundGroup(volume, pitch, breakSound, stepSound, placeSound, hitSound, fallSound); + } + + public static CompatBlockSoundGroup of(float volume, float pitch, CompatSoundEvent breakSound, CompatSoundEvent stepSound, CompatSoundEvent placeSound, CompatSoundEvent hitSound, CompatSoundEvent fallSound) { + return new CompatBlockSoundGroup(volume, pitch, breakSound.get(), stepSound.get(), placeSound.get(), hitSound.get(), fallSound.get()); + } + + public float getVolume() { + return volume; + } + + public float getPitch() { + return pitch; + } + + public SoundEvent getRawBreakSound() { + return breakSound; + } + + public SoundEvent getRawStepSound() { + return stepSound; + } + + public SoundEvent getRawPlaceSound() { + return placeSound; + } + + public SoundEvent getRawHitSound() { + return hitSound; + } + + public SoundEvent getRawFallSound() { + return fallSound; + } + + public CompatSoundEvent getBreakSound() { + return CompatSoundEvent.of(breakSound); + } + + public CompatSoundEvent getStepSound() { + return CompatSoundEvent.of(stepSound); + } + + public CompatSoundEvent getPlaceSound() { + return CompatSoundEvent.of(placeSound); + } + + public CompatSoundEvent getHitSound() { + return CompatSoundEvent.of(hitSound); + } + + public CompatSoundEvent getFallSound() { + return CompatSoundEvent.of(fallSound); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CommandManagerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CommandManagerUtil.java new file mode 100644 index 000000000..30ef31a72 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CommandManagerUtil.java @@ -0,0 +1,84 @@ +package net.pitan76.mcpitanlib.api.util; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.CommandManager; +import net.minecraft.server.command.ServerCommandSource; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.core.command.CommandResult; + +public class CommandManagerUtil { + public static CommandManager getCommandManager(MinecraftServer server) { + return server.getCommandManager(); + } + + public static CommandResult execute(MinecraftServer server, String command) { + CommandDispatcher dispatcher = getCommandManager(server).getDispatcher(); + ServerCommandSource source = server.getCommandSource(); + + if (command.startsWith("/")) { + command = command.substring(1); + } + + CommandResult cr = new CommandResult(); + cr.setSuccess(false); + cr.setSource(source); + + try { + int result = dispatcher.execute(command, source); + cr.setResult(result); + cr.setSuccess(true); + } catch (CommandSyntaxException e) { + cr.setMessage(e.getMessage()); + cr.setErrorType(CommandResult.ErrorType.COMMAND_SYNTAX_ERROR); + } catch (RuntimeException e) { + cr.setMessage(e.getMessage()); + cr.setErrorType(CommandResult.ErrorType.RUNTIME_ERROR); + } + + return cr; + } + + public static CommandResult execute(ServerCommandSource source, String command) { + CommandDispatcher dispatcher = source.getServer().getCommandManager().getDispatcher(); + + if (command.startsWith("/")) { + command = command.substring(1); + } + + CommandResult cr = new CommandResult(); + cr.setSuccess(false); + cr.setSource(source); + + try { + int result = dispatcher.execute(command, source); + cr.setResult(result); + cr.setSuccess(true); + } catch (CommandSyntaxException e) { + cr.setMessage(e.getMessage()); + cr.setErrorType(CommandResult.ErrorType.COMMAND_SYNTAX_ERROR); + } catch (RuntimeException e) { + cr.setMessage(e.getMessage()); + cr.setErrorType(CommandResult.ErrorType.RUNTIME_ERROR); + } + + return cr; + } + + public static CommandResult execute(Player player, String command) { + return execute(getCommandSource(player), command); + } + + public static ServerCommandSource getCommandSource(MinecraftServer server) { + return server.getCommandSource(); + } + + public static ServerCommandSource getCommandSource(Player player) { + return player.getEntity().getCommandSource(); + } + + public static ServerCommandSource withLevel(ServerCommandSource source, int level) { + return source.withLevel(level); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CommandUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CommandUtil.java new file mode 100644 index 000000000..8ba934d53 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CommandUtil.java @@ -0,0 +1,53 @@ +package net.pitan76.mcpitanlib.api.util; + +import com.mojang.brigadier.arguments.*; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.block.Block; +import net.minecraft.command.argument.BlockStateArgumentType; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.command.argument.ItemStackArgumentType; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.pitan76.mcpitanlib.api.event.ServerCommandEvent; + +public class CommandUtil { + public static Item getItemArgument(String name, ServerCommandEvent e) { + return ItemStackArgumentType.getItemStackArgument(e.getContext(), name).getItem(); + } + + public static Block getBlockArgument(String name, ServerCommandEvent e) { + return BlockStateArgumentType.getBlockState(e.getContext(), name).getBlockState().getBlock(); + } + + public static Integer getIntegerArgument(String name, ServerCommandEvent e) { + return IntegerArgumentType.getInteger(e.getContext(), name); + } + + public static Double getDoubleArgument(String name, ServerCommandEvent e) { + return DoubleArgumentType.getDouble(e.getContext(), name); + } + + public static Float getFloatArgument(String name, ServerCommandEvent e) { + return FloatArgumentType.getFloat(e.getContext(), name); + } + + public static Long getLongArgument(String name, ServerCommandEvent e) { + return LongArgumentType.getLong(e.getContext(), name); + } + + public static Boolean getBooleanArgument(String name, ServerCommandEvent e) { + return BoolArgumentType.getBool(e.getContext(), name); + } + + public static String getStringArgument(String name, ServerCommandEvent e) { + return StringArgumentType.getString(e.getContext(), name); + } + + public static Entity getEntityArgument(String name, ServerCommandEvent e) { + try { + return EntityArgumentType.getEntity(e.getContext(), name); + } catch (CommandSyntaxException ex) { + return null; + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java index 9d0ebc80a..a1a46fe28 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java @@ -221,6 +221,14 @@ public static List getItems(Identifier identifier, List items) { return ItemUtilV2.getItems(identifier, items); } + public static List getItems(CompatIdentifier identifier) { + return getItems(identifier.toMinecraft()); + } + + public static List getItems(CompatIdentifier identifier, List items) { + return getItems(identifier.toMinecraft(), items); + } + /** * Get all items in the tag. * @param id String of the tag. @@ -250,6 +258,10 @@ public static boolean isItemInTag(Item item, Identifier identifier) { return ItemUtilV2.isItemInTag(item, identifier); } + public static boolean isItemInTag(Item item, CompatIdentifier identifier) { + return isItemInTag(item, identifier.toMinecraft()); + } + /** * Check if the item is in the tag. * @param item Item to check. diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java index 728eeab5b..00967c3cb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/Logger.java @@ -48,6 +48,11 @@ public void debug(String message) { LoggerUtil.debug(logger, message); } + public void infoIfDev(String message) { + if (!PlatformUtil.isDevelopmentEnvironment()) return; + LoggerUtil.debug(logger, message); + } + public void trace(String message) { LoggerUtil.trace(logger, message); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java index b22d7129d..ec6adbdf2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java @@ -106,7 +106,7 @@ public static T get(NbtCompound nbt, String key, Class clazz) { return (T) nbt.getCompound(key); } if (clazz == NbtList.class) { - return (T) nbt.getList(key, 9); + return (T) nbt.get(key); } if (clazz == Byte.class) { return (T) Byte.valueOf(nbt.getByte(key)); @@ -187,7 +187,23 @@ public static Set getKeys(NbtCompound nbt) { * @return NbtList */ public static NbtList getList(NbtCompound nbt, String key) { - return nbt.getList(key, 9); + return (NbtList) nbt.get(key); + } + + /** + * NbtListを取得する。 + * @return NbtList + */ + public static NbtList getList(NbtCompound nbt, String key, int type) { + return nbt.getList(key, type); + } + + /** + * NbtCompoundのリストを取得する。 + * @return NbtList + */ + public static NbtList getNbtCompoundList(NbtCompound nbt, String key) { + return nbt.getList(key, NbtElement.COMPOUND_TYPE); } /** @@ -398,4 +414,58 @@ public static Optional getSimpleItemStack(NbtCompound nbt, String key public static NbtList createNbtList() { return new NbtList(); } + + public static int getIntOrDefault(NbtCompound nbt, String key, int defaultValue) { + if (has(nbt, key)) + return getInt(nbt, key); + return defaultValue; + } + + public static String getStringOrDefault(NbtCompound nbt, String key, String defaultValue) { + if (has(nbt, key)) + return getString(nbt, key); + return defaultValue; + } + + public static boolean getBooleanOrDefault(NbtCompound nbt, String key, boolean defaultValue) { + if (has(nbt, key)) + return getBoolean(nbt, key); + return defaultValue; + } + + public static float getFloatOrDefault(NbtCompound nbt, String key, float defaultValue) { + if (has(nbt, key)) + return getFloat(nbt, key); + return defaultValue; + } + + public static double getDoubleOrDefault(NbtCompound nbt, String key, double defaultValue) { + if (has(nbt, key)) + return getDouble(nbt, key); + return defaultValue; + } + + public static long getLongOrDefault(NbtCompound nbt, String key, long defaultValue) { + if (has(nbt, key)) + return getLong(nbt, key); + return defaultValue; + } + + public static byte getByteOrDefault(NbtCompound nbt, String key, byte defaultValue) { + if (has(nbt, key)) + return getByte(nbt, key); + return defaultValue; + } + + public static short getShortOrDefault(NbtCompound nbt, String key, short defaultValue) { + if (has(nbt, key)) + return getShort(nbt, key); + return defaultValue; + } + + public static UUID getUuidOrDefault(NbtCompound nbt, String key, UUID defaultValue) { + if (has(nbt, key)) + return getUuid(nbt, key); + return defaultValue; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/command/CommandResult.java b/common/src/main/java/net/pitan76/mcpitanlib/core/command/CommandResult.java new file mode 100644 index 000000000..c93a48bcd --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/command/CommandResult.java @@ -0,0 +1,73 @@ +package net.pitan76.mcpitanlib.core.command; + +import net.minecraft.server.command.ServerCommandSource; + +public class CommandResult { + private boolean isSuccess = false; + private String message = ""; + private int result = 0; + private ErrorType errorType = ErrorType.NONE; + private ServerCommandSource source; + + public CommandResult() { + + } + + public CommandResult(boolean isSuccess, String message) { + this.isSuccess = isSuccess; + this.message = message; + } + + public void setResult(int result) { + this.result = result; + } + + public void setMessage(String message) { + this.message = message; + } + + public void setSuccess(boolean success) { + isSuccess = success; + } + + public boolean isSuccess() { + return isSuccess; + } + + public String getMessage() { + return message; + } + + public int getResult() { + return result; + } + + public void setErrorType(ErrorType errorType) { + this.errorType = errorType; + } + + public ErrorType getErrorType() { + return errorType; + } + + public void setSource(ServerCommandSource source) { + this.source = source; + } + + public ServerCommandSource getSource() { + return source; + } + + public boolean hasError() { + return errorType != ErrorType.NONE; + } + + public enum ErrorType { + NONE, + COMMAND_SYNTAX_ERROR, + COMMAND_NOT_FOUND, + COMMAND_PERMISSION_ERROR, + COMMAND_UNKNOWN_ERROR, + RUNTIME_ERROR + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry.java index 92cb1c97a..b61391b5c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/MCPLRegistry.java @@ -6,7 +6,9 @@ import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.EntityType; +import net.minecraft.entity.effect.StatusEffect; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; import net.minecraft.particle.ParticleType; @@ -30,6 +32,8 @@ public class MCPLRegistry { public Registrar SOUND_EVENT; public Registrar FLUID; public Registrar> PARTICLE_TYPE; + public Registrar ENCHANTMENT; + public Registrar STATUS_EFFECT; public MCPLRegistry(String MOD_ID) { REGISTRIES = Suppliers.memoize(() -> Registries.get(MOD_ID)); @@ -42,6 +46,8 @@ public MCPLRegistry(String MOD_ID) { SOUND_EVENT = REGISTRIES.get().get(Registry.SOUND_EVENT_KEY); FLUID = REGISTRIES.get().get(Registry.FLUID_KEY); PARTICLE_TYPE = REGISTRIES.get().get(Registry.PARTICLE_TYPE); + ENCHANTMENT = REGISTRIES.get().get(Registry.ENCHANTMENT); + STATUS_EFFECT = REGISTRIES.get().get(Registry.STATUS_EFFECT); } public RegistrySupplier registryItem(Identifier id, Supplier supplier) { @@ -76,6 +82,14 @@ public RegistrySupplier> registryParticleType(Identifier id, Sup return PARTICLE_TYPE.register(id, supplier); } + public RegistrySupplier registryEnchantment(Identifier id, Supplier supplier) { + return ENCHANTMENT.register(id, supplier); + } + + public RegistrySupplier registryStatusEffect(Identifier id, Supplier supplier) { + return STATUS_EFFECT.register(id, supplier); + } + public void allRegister1_16() { } diff --git a/info.properties b/info.properties index 834e58920..f66fb9aaf 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.3 +mod_version=2.4.4 maven_group=net.pitan76 \ No newline at end of file From de804e27d9eada3e304cb4c89e1baa88e09076df Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 19 Sep 2024 13:17:48 +0900 Subject: [PATCH 371/617] add APIs --- .../mcpitanlib/api/block/ExtendBlock.java | 40 +++++++ .../api/client/SimpleHandledScreen.java | 7 +- .../entity/CompatBlockEntityRenderer.java | 17 +++ .../entity/event/BlockEntityRenderEvent.java | 85 ++++++++++++++ .../pitan76/mcpitanlib/api/entity/Player.java | 25 ++++ .../api/event/block/FluidStateArgs.java | 15 +++ .../api/event/block/ShapesForStatesArgs.java | 22 ++++ .../block/StateForNeighborUpdateArgs.java | 61 ++++++++++ .../mcpitanlib/api/util/BlockEntityUtil.java | 5 + .../mcpitanlib/api/util/BlockStateUtil.java | 20 ++++ .../mcpitanlib/api/util/EntityUtil.java | 109 ++++++++++++++++++ .../mcpitanlib/api/util/FluidUtil.java | 78 +++++++++++++ .../api/util/PlayerManagerUtil.java | 45 ++++++++ .../mcpitanlib/api/util/PropertyUtil.java | 4 + .../mcpitanlib/api/util/ServerUtil.java | 5 + .../mcpitanlib/api/util/StateManagerUtil.java | 5 + .../api/util/client/MatrixStackUtil.java | 16 +++ .../api/util/entity/LivingEntityUtil.java | 35 ++++++ .../mcpitanlib/api/util/math/PosUtil.java | 8 ++ .../api/util/world/WorldAccessUtil.java | 17 +++ .../api/util/world/WorldViewUtil.java | 70 +++++++++++ info.properties | 2 +- 22 files changed, 689 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/FluidStateArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ShapesForStatesArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateForNeighborUpdateArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldAccessUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldViewUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index d5ecc3ea1..538f98601 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.block; +import com.google.common.collect.ImmutableMap; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; @@ -8,6 +9,7 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.FluidState; import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContext; @@ -21,12 +23,15 @@ import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.block.*; import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; +import net.pitan76.mcpitanlib.api.event.block.StateForNeighborUpdateArgs; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.util.TextUtil; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; @@ -34,6 +39,7 @@ import java.util.List; import java.util.Random; +import java.util.function.Function; public class ExtendBlock extends Block { public CompatibleBlockSettings compatSettings; @@ -323,4 +329,38 @@ public void onBlockBreakStart(BlockBreakStartEvent e) { public CompatMapCodec getCompatCodec() { return CompatMapCodec.of(); } + + @Deprecated + @Override + public FluidState getFluidState(BlockState state) { + return getFluidState(new FluidStateArgs(state)); + } + + public FluidState getFluidState(FluidStateArgs args) { + return super.getFluidState(args.getState()); + } + + @Deprecated + @Override + public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + return getStateForNeighborUpdate(new StateForNeighborUpdateArgs(state, direction, neighborState, world, pos, neighborPos)); + } + + public BlockState getStateForNeighborUpdate(StateForNeighborUpdateArgs args) { + return super.getStateForNeighborUpdate(args.state, args.direction, args.neighborState, args.world, args.pos, args.neighborPos); + } + + @Deprecated + @Override + protected ImmutableMap getShapesForStates(Function stateToShape) { + return getShapesForStates(new ShapesForStatesArgs(stateToShape)); + } + + public ImmutableMap getShapesForStates(ShapesForStatesArgs args) { + return super.getShapesForStates(args.stateToShape); + } + + public StateManager callGetStateManager() { + return super.getStateManager(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index e736aab21..74f07ab4c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -20,6 +20,8 @@ import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.client.ClientUtil; +import net.pitan76.mcpitanlib.api.util.client.RenderUtil; public abstract class SimpleHandledScreen extends HandledScreen { @@ -271,7 +273,10 @@ public void setTitlePos(int x, int y) { } public void setTitleXCenter() { - setTitleX(width / 2 - textRenderer.getWidth(title) / 2); + if (textRenderer == null) + textRenderer = ClientUtil.getTextRenderer(); + + setTitleX(backgroundWidth / 2 - textRenderer.getWidth(title) / 2); } public int getTitleX() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java new file mode 100644 index 000000000..ac24bdd4e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.client.render.block.entity; + +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.pitan76.mcpitanlib.api.client.render.block.entity.event.BlockEntityRenderEvent; +import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; + +public interface CompatBlockEntityRenderer extends BlockEntityRenderer { + void render(BlockEntityRenderEvent event); + + @Override + default void render(T entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + render(new BlockEntityRenderEvent<>(entity, tickDelta, matrices, vertexConsumers, light, overlay)); + } + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java new file mode 100644 index 000000000..5d7536490 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java @@ -0,0 +1,85 @@ +package net.pitan76.mcpitanlib.api.client.render.block.entity.event; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; +import net.pitan76.mcpitanlib.api.util.MathUtil; +import net.pitan76.mcpitanlib.api.util.client.ClientUtil; +import net.pitan76.mcpitanlib.api.util.client.MatrixStackUtil; + +public class BlockEntityRenderEvent { + public T blockEntity; + public float tickDelta; + public MatrixStack matrices; + public VertexConsumerProvider vertexConsumers; + int light; + int overlay; + + public BlockEntityRenderEvent(T blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + this.blockEntity = blockEntity; + this.tickDelta = tickDelta; + this.matrices = matrices; + this.vertexConsumers = vertexConsumers; + this.light = light; + this.overlay = overlay; + } + + public T getBlockEntity() { + return blockEntity; + } + + public MatrixStack getMatrices() { + return matrices; + } + + public float getTickDelta() { + return tickDelta; + } + + public int getLight() { + return light; + } + + public int getOverlay() { + return overlay; + } + + public VertexConsumer getVertexConsumer(RenderLayer layer) { + return vertexConsumers.getBuffer(layer); + } + + public VertexConsumerProvider getVertexConsumers() { + return vertexConsumers; + } + + public void push() { + MatrixStackUtil.push(matrices); + } + + public void translate(double x, double y, double z) { + MatrixStackUtil.translate(matrices, x, y, z); + } + + public void pop() { + MatrixStackUtil.pop(matrices); + } + + public void multiply(MathUtil.RotationAxisType type, float deg) { + MatrixStackUtil.multiply(matrices, type, deg); + } + + public void scale(float x, float y, float z) { + MatrixStackUtil.scale(matrices, x, y, z); + } + + public ItemRenderer getItemRenderer() { + return ClientUtil.getItemRenderer(); + } + + public boolean isRemoved() { + return blockEntity.isRemoved(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index ed6f6d176..a6292be85 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -476,4 +476,29 @@ public int getTotalExperience() { public void setTotalExperience(int experience) { getEntity().totalExperience = experience; } + + public boolean isFallFlying() { + return getEntity().isFallFlying(); + } + + public boolean isSwimming() { + return getEntity().isSwimming(); + } + + public void startFallFlying() { + getEntity().startFallFlying(); + } + + public void stopFallFlying() { + getEntity().stopFallFlying(); + } + + @Deprecated + public int getFallFlyingTicks() { + return 0; + } + + public boolean checkFallFlying() { + return getEntity().checkFallFlying(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/FluidStateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/FluidStateArgs.java new file mode 100644 index 000000000..12482458a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/FluidStateArgs.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; + +public class FluidStateArgs { + public BlockState state; + + public FluidStateArgs(BlockState state) { + this.state = state; + } + + public BlockState getState() { + return state; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ShapesForStatesArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ShapesForStatesArgs.java new file mode 100644 index 000000000..75cacef6a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ShapesForStatesArgs.java @@ -0,0 +1,22 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.util.shape.VoxelShape; + +import java.util.function.Function; + +public class ShapesForStatesArgs { + public Function stateToShape; + + public ShapesForStatesArgs(Function stateToShape) { + this.stateToShape = stateToShape; + } + + public Function getStateToShape() { + return stateToShape; + } + + public VoxelShape getShape(BlockState state) { + return stateToShape.apply(state); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateForNeighborUpdateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateForNeighborUpdateArgs.java new file mode 100644 index 000000000..b48adc4d9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateForNeighborUpdateArgs.java @@ -0,0 +1,61 @@ +package net.pitan76.mcpitanlib.api.event.block; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.WorldAccess; + +public class StateForNeighborUpdateArgs { + public BlockState state; + public Direction direction; + public BlockState neighborState; + public WorldAccess world; + public BlockPos pos; + public BlockPos neighborPos; + + public StateForNeighborUpdateArgs(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + this.state = state; + this.direction = direction; + this.neighborState = neighborState; + this.world = world; + this.pos = pos; + this.neighborPos = neighborPos; + } + + public BlockState getState() { + return state; + } + + public BlockEntity getBlockEntity() { + return world.getBlockEntity(pos); + } + + public BlockState getBlockState(BlockPos pos) { + return world.getBlockState(pos); + } + + public BlockEntity getBlockEntity(BlockPos pos) { + return world.getBlockEntity(pos); + } + + public Direction getDirection() { + return direction; + } + + public BlockState getNeighborState() { + return neighborState; + } + + public WorldAccess getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public BlockPos getNeighborPos() { + return neighborPos; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index ecdba9a58..2e2e6e280 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -3,6 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -58,4 +59,8 @@ public static void markRemoved(BlockEntity blockEntity) { public static void markDirty(BlockEntity blockEntity) { blockEntity.markDirty(); } + + public static BlockEntityType getType(BlockEntity blockEntity) { + return blockEntity.getType(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index 53209c900..8d60dbd0c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -2,9 +2,13 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.state.StateManager; import net.minecraft.state.property.Property; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; public class BlockStateUtil { public static Block getBlock(BlockState state) { @@ -34,4 +38,20 @@ public static StateManager getStateManager(Block block) { public static , V extends T> BlockState with(BlockState state, Property property, V value) { return state.with(property, value); } + + public static void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean notify) { + state.neighborUpdate(world, pos, block, fromPos, notify); + } + + public static void updateNeighbors(BlockState state, WorldAccess world, BlockPos pos, int flags) { + state.updateNeighbors(world, pos, flags); + } + + public static boolean hasRandomTicks(BlockState state) { + return state.hasRandomTicks(); + } + + public static void randomTick(BlockState state, ServerWorld world, BlockPos pos) { + state.randomTick(world, pos, world.random); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index 647f74c2d..2edc19edc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -3,6 +3,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; @@ -38,4 +39,112 @@ public static void discard(Entity entity) { public static void kill(Entity entity) { entity.kill(); } + + public static void setVelocity(Entity entity, double x, double y, double z) { + entity.setVelocity(x, y, z); + } + + public static Vec3d getVelocity(Entity entity) { + return entity.getVelocity(); + } + + public static void setNoGravity(Entity entity, boolean noGravity) { + entity.setNoGravity(noGravity); + } + + public static boolean hasNoGravity(Entity entity) { + return entity.hasNoGravity(); + } + + public static void setInvulnerable(Entity entity, boolean invulnerable) { + entity.setInvulnerable(invulnerable); + } + + public static boolean isInvulnerable(Entity entity) { + return entity.isInvulnerable(); + } + + public static void setSilent(Entity entity, boolean silent) { + entity.setSilent(silent); + } + + public static boolean isSilent(Entity entity) { + return entity.isSilent(); + } + + public static void setGlowing(Entity entity, boolean glowing) { + entity.setGlowing(glowing); + } + + public static boolean isGlowing(Entity entity) { + return entity.isGlowing(); + } + + public static void setFire(Entity entity, int seconds) { + entity.setOnFireFor(seconds); + } + + public static void extinguish(Entity entity) { + entity.extinguish(); + } + + public static boolean isOnFire(Entity entity) { + return entity.isOnFire(); + } + + public static void setInvisible(Entity entity, boolean invisible) { + entity.setInvisible(invisible); + } + + public static boolean isInvisible(Entity entity) { + return entity.isInvisible(); + } + + public static void setSneaking(Entity entity, boolean sneaking) { + entity.setSneaking(sneaking); + } + + public static boolean isSneaking(Entity entity) { + return entity.isSneaking(); + } + + public static void setSprinting(Entity entity, boolean sprinting) { + entity.setSprinting(sprinting); + } + + public static boolean isSprinting(Entity entity) { + return entity.isSprinting(); + } + + public static void setSwimming(Entity entity, boolean swimming) { + entity.setSwimming(swimming); + } + + public static boolean isSwimming(Entity entity) { + return entity.isSwimming(); + } + + public static void detach(Entity entity) { + entity.detach(); + } + + public static void attach(Entity entity, Entity vehicle) { + entity.startRiding(vehicle, true); + } + + public static void detachFromVehicle(Entity entity) { + entity.stopRiding(); + } + + public static boolean isRiding(Entity entity) { + return entity.hasVehicle(); + } + + public static Entity getVehicle(Entity entity) { + return entity.getVehicle(); + } + + public static void setVehicle(Entity entity, Entity vehicle) { + entity.startRiding(vehicle, true); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java index 44334ccc2..278f1f370 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java @@ -1,8 +1,12 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.fluid.FlowableFluid; import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import net.minecraft.world.WorldView; public class FluidUtil { public static Identifier toID(Fluid fluid) { @@ -20,4 +24,78 @@ public static int getRawId(Fluid fluid) { public static Fluid fromIndex(int index) { return Registry.FLUID.get(index); } + + public static boolean isExist(CompatIdentifier id) { + return Registry.FLUID.containsId(id.toMinecraft()); + } + + public static CompatIdentifier toCompatId(Fluid fluid) { + return CompatIdentifier.fromMinecraft(toID(fluid)); + } + + public static Fluid fromCompatId(CompatIdentifier id) { + return fromId(id.toMinecraft()); + } + + public static FlowableFluid water() { + return Fluids.WATER; + } + + public static FlowableFluid lava() { + return Fluids.LAVA; + } + + public static Fluid empty() { + return Fluids.EMPTY; + } + + public static FlowableFluid flowingWater() { + return Fluids.FLOWING_WATER; + } + + public static FlowableFluid flowingLava() { + return Fluids.FLOWING_LAVA; + } + + public static boolean isStill(Fluid fluid) { + return fluid == water() || fluid == lava(); + } + + public static boolean isStill(FluidState state) { + return state.isStill(); + } + + public static FluidState getStill(FlowableFluid fluid, boolean falling) { + return fluid.getStill(falling); + } + + public static FluidState getFlowing(FlowableFluid fluid, int level, boolean falling) { + return fluid.getFlowing(level, falling); + } + + public static FluidState getStill(FlowableFluid fluid) { + return getStill(fluid, false); + } + + public static FluidState getStillWater() { + return getStill(water()); + } + + public static FluidState getStillLava() { + return getStill(lava()); + } + + public static boolean isFlowing(Fluid fluid) { + return fluid == flowingWater() || fluid == flowingLava(); + } + + public static int getTickRate(Fluid fluid, WorldView world) { + return fluid.getTickRate(world); + } + + public static FluidState getDefaultState(Fluid fluid) { + return fluid.getDefaultState(); + } + + } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerManagerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerManagerUtil.java index 2dbcfa02d..ae2e7ecc5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerManagerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PlayerManagerUtil.java @@ -2,6 +2,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.PlayerManager; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; @@ -82,4 +83,48 @@ public static Player getPlayerByUUID(World world, UUID uuid) { public static Player getPlayerByName(World world, String name) { return PlayerUtil.getPlayerByName(world, name); } + + public static PlayerManager getPlayerManager(MinecraftServer server) { + return ServerUtil.getPlayerManager(server); + } + + public static PlayerManager getPlayerManager(World world) { + return getPlayerManager(world.getServer()); + } + + public static boolean hasPlayerByUUID(PlayerManager playerManager, UUID uuid) { + return playerManager.getPlayer(uuid) != null; + } + + public static boolean hasPlayerByName(PlayerManager playerManager, String name) { + return playerManager.getPlayer(name) != null; + } + + public static boolean hasPlayerByIP(PlayerManager playerManager, String ip) { + return !playerManager.getPlayersByIp(ip).isEmpty(); + } + + public static boolean hasPlayerByUUID(MinecraftServer server, UUID uuid) { + return hasPlayerByUUID(getPlayerManager(server), uuid); + } + + public static boolean hasPlayerByName(MinecraftServer server, String name) { + return hasPlayerByName(getPlayerManager(server), name); + } + + public static boolean hasPlayerByIP(MinecraftServer server, String ip) { + return hasPlayerByIP(getPlayerManager(server), ip); + } + + public static boolean hasPlayerByUUID(World world, UUID uuid) { + return hasPlayerByUUID(getPlayerManager(world), uuid); + } + + public static boolean hasPlayerByName(World world, String name) { + return hasPlayerByName(getPlayerManager(world), name); + } + + public static boolean hasPlayerByIP(World world, String ip) { + return hasPlayerByIP(getPlayerManager(world), ip); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java index e6d3b9a58..6209a1587 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java @@ -148,4 +148,8 @@ public static BooleanProperty open() { public static BooleanProperty occupied() { return Properties.OCCUPIED; } + + public static boolean contains(BlockState state, Property property) { + return state.contains(property); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java index e4e74f1f9..f19efd9b3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.PlayerManager; import net.minecraft.world.World; public class ServerUtil { @@ -47,4 +48,8 @@ public static boolean isServerDedicated(MinecraftServer server) { public static boolean isSingleplayer(MinecraftServer server) { return server.isSingleplayer(); } + + public static PlayerManager getPlayerManager(MinecraftServer server) { + return server.getPlayerManager(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/StateManagerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StateManagerUtil.java index 9591bbdb9..a51ef0e36 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/StateManagerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StateManagerUtil.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.util; +import com.google.common.collect.ImmutableList; import net.minecraft.state.State; import net.minecraft.state.StateManager; @@ -7,4 +8,8 @@ public class StateManagerUtil { public static > S getDefaultState(StateManager manager) { return manager.getDefaultState(); } + + public > ImmutableList getStates(StateManager manager) { + return manager.getStates(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java index e9a7aecc2..cb3c46d85 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java @@ -9,4 +9,20 @@ public class MatrixStackUtil { public static void multiply(MatrixStack matrixStack, MathUtil.RotationAxisType type, float deg) { matrixStack.multiply(getRotationDegrees(type, deg)); } + + public static void push(MatrixStack matrices) { + matrices.push(); + } + + public static void pop(MatrixStack matrices) { + matrices.pop(); + } + + public static void translate(MatrixStack matrices, double x, double y, double z) { + matrices.translate(x, y, z); + } + + public static void scale(MatrixStack matrices, float x, float y, float z) { + matrices.scale(x, y, z); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java new file mode 100644 index 000000000..58c13cd8a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffect; +import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffectInstance; +import net.pitan76.mcpitanlib.api.util.EntityUtil; + +import java.util.ArrayList; +import java.util.List; + +public class LivingEntityUtil extends EntityUtil { + public static void addStatusEffect(LivingEntity entity, CompatStatusEffectInstance effect) { + entity.addStatusEffect(effect.getInstance()); + } + + public static void removeStatusEffect(LivingEntity entity, CompatStatusEffectInstance effect) { + entity.removeStatusEffect(effect.getInstance().getEffectType()); + } + + public static void removeStatusEffect(LivingEntity entity, CompatStatusEffect effect, World world) { + entity.removeStatusEffect(effect.getStatusEffect(world)); + } + + public List getStatusEffects(LivingEntity entity) { + List compatEffects = new ArrayList<>(); + + for (StatusEffectInstance effect : entity.getStatusEffects()) { + compatEffects.add(new CompatStatusEffectInstance(effect)); + } + + return compatEffects; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java index 0364cda41..1c3e51f97 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java @@ -24,4 +24,12 @@ public static double getSquaredDistance(BlockPos pos1, BlockPos pos2) { public static double getSquaredDistance(BlockPos pos1, double x, double y, double z) { return pos1.getSquaredDistance(x, y, z); } + + public static Iterable iterate(BlockPos start, BlockPos end) { + return BlockPos.iterate(start, end); + } + + public static BlockPos[] getNeighborPoses(BlockPos pos) { + return new BlockPos[]{pos.north(), pos.south(), pos.east(), pos.west(), pos.up(), pos.down()}; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldAccessUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldAccessUtil.java new file mode 100644 index 000000000..08797bef1 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldAccessUtil.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.util.world; + +import net.minecraft.block.Block; +import net.minecraft.fluid.Fluid; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldAccess; + +public class WorldAccessUtil extends WorldViewUtil { + + public static void scheduleBlockTick(WorldAccess world, BlockPos pos, Block block, int delay) { + world.createAndScheduleBlockTick(pos, block, delay); + } + + public static void scheduleFluidTick(WorldAccess world, BlockPos pos, Fluid fluid, int delay) { + world.createAndScheduleFluidTick(pos, fluid, delay); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldViewUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldViewUtil.java new file mode 100644 index 000000000..2f773c1cf --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldViewUtil.java @@ -0,0 +1,70 @@ +package net.pitan76.mcpitanlib.api.util.world; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.tag.FluidTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldView; +import net.minecraft.world.dimension.DimensionType; + +public class WorldViewUtil { + + public static boolean isClient(WorldView world) { + return world.isClient(); + } + + public static BlockState getBlockState(WorldView world, BlockPos pos) { + return world.getBlockState(pos); + } + + public static Block getBlock(WorldView world, BlockPos pos) { + return getBlockState(world, pos).getBlock(); + } + + public static BlockEntity getBlockEntity(WorldView world, BlockPos pos) { + return world.getBlockEntity(pos); + } + + public static FluidState getFluidState(WorldView world, BlockPos pos) { + return getBlockState(world, pos).getFluidState(); + } + + public static Fluid getFluid(WorldView world, BlockPos pos) { + return getFluidState(world, pos).getFluid(); + } + + public static int getBottomY(WorldView world) { + return world.getBottomY(); + } + + public static int getTopY(WorldView world) { + return world.getTopY(); + } + + public static boolean isChunkLoaded(WorldView world, BlockPos pos) { + return world.isChunkLoaded(pos); + } + + public static boolean isRegionLoaded(WorldView world, BlockPos min, BlockPos max) { + return world.isRegionLoaded(min, max); + } + + public static DimensionType getDimensionType(WorldView world) { + return world.getDimension(); + } + + public static boolean isAirBlock(WorldView world, BlockPos pos) { + return getBlockState(world, pos).isAir(); + } + + public static boolean isOpaqueBlock(WorldView world, BlockPos pos) { + return getBlockState(world, pos).isOpaque(); + } + + public static boolean isWater(WorldView world, BlockPos pos) { + return getFluidState(world, pos).isIn(FluidTags.WATER); + } +} diff --git a/info.properties b/info.properties index f66fb9aaf..f95acddb6 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.4 +mod_version=2.4.5 maven_group=net.pitan76 \ No newline at end of file From 306b443bcdca2699511f49e7184f423833a47bfa Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Fri, 27 Sep 2024 23:18:32 +0900 Subject: [PATCH 372/617] add APIs --- .../client/registry/CompatRegistryClient.java | 7 ++ .../entity/CompatBlockEntityRenderer.java | 1 + ...ompatBlockEntityRendererConstructArgs.java | 16 ++++ .../entity/v2/CompatBlockEntityRenderer.java | 15 ++++ .../pitan76/mcpitanlib/api/entity/Player.java | 4 + .../api/event/item/CanMineArgs.java | 46 ++++++++++ .../api/event/item/CanRepairArgs.java | 22 +++++ .../api/event/result/EventResult.java | 43 ++++++++++ .../api/event/result/TypedEventResult.java | 42 ++++++++++ .../event/v0/InteractionEventRegistry.java | 84 +++++++++++++++++++ .../api/event/v0/event/ClickBlockEvent.java | 78 +++++++++++++++++ .../api/event/v1/LivingHurtEventRegistry.java | 23 +++++ .../api/gui/ExtendedScreenHandlerFactory.java | 1 + .../api/gui/args/CreateMenuEvent.java | 46 ++++++++++ .../gui/v2/ExtendedScreenHandlerFactory.java | 17 ++++ .../gui/v2/SimpleScreenHandlerFactory.java | 25 ++++++ .../mcpitanlib/api/item/ExtendItem.java | 20 +++++ .../api/registry/CompatRegistry.java | 4 + .../mcpitanlib/api/registry/FuelRegistry.java | 27 ++++++ .../api/registry/v2/CompatRegistryV2.java | 5 ++ .../mcpitanlib/api/text/TextComponent.java | 12 +++ .../mcpitanlib/api/util/BlockStateUtil.java | 25 ++++++ .../mcpitanlib/api/util/CompatIdentifier.java | 19 +++++ .../mcpitanlib/api/util/IngredientUtil.java | 4 + .../mcpitanlib/api/util/InventoryUtil.java | 13 +++ .../api/util/RegistryLookupUtil.java | 22 ++++- .../mcpitanlib/api/util/StyleUtil.java | 60 +++++++++++++ .../pitan76/mcpitanlib/api/util/TextUtil.java | 28 +++++++ .../mcpitanlib/api/util/WorldUtil.java | 27 ++++-- .../api/util/block/BlockHitResultUtil.java | 33 ++++++++ .../util/collection/DefaultedListUtil.java | 15 ++++ .../api/util/collection/ItemStackList.java | 64 ++++++++++++++ .../api/util/inventory/CompatInventory.java | 45 ++++++++++ .../util/inventory/ContainerInventory.java | 17 ++++ .../util/inventory/PlayerInventoryUtil.java | 18 ++++ .../api/util/math/DirectionUtil.java | 34 ++++++++ info.properties | 2 +- 37 files changed, 954 insertions(+), 10 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/CompatBlockEntityRendererConstructArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/v2/CompatBlockEntityRenderer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanMineArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanRepairArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/result/EventResult.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/result/TypedEventResult.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/InteractionEventRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ClickBlockEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/LivingHurtEventRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/CreateMenuEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/v2/ExtendedScreenHandlerFactory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/v2/SimpleScreenHandlerFactory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/registry/FuelRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/StyleUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockHitResultUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/DefaultedListUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ContainerInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/math/DirectionUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index 84c111f8b..637f1756c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -41,6 +41,7 @@ import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.MCPitanLib; import net.pitan76.mcpitanlib.api.client.render.EntityModelLayerContext; +import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import java.util.List; import java.util.Random; @@ -192,4 +193,10 @@ public static void registerRenderTypeFluid(RenderLayer layer, Fluid fluid) { public static void registerCutoutBlock(Block block) { registerRenderTypeBlock(RenderLayer.getCutout(), block); } + + public static void registerCompatBlockEntityRenderer(BlockEntityType type, BlockEntityRendererFactory provider) { + BlockEntityRendererRegistry.register(type, ctx -> provider.create(new BlockEntityRendererFactory.Context( + ctx.getRenderDispatcher(), ctx.getRenderManager(), ClientUtil.getItemRenderer(), ClientUtil.getClient().getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() + ))); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java index ac24bdd4e..bdb78967b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java @@ -6,6 +6,7 @@ import net.pitan76.mcpitanlib.api.client.render.block.entity.event.BlockEntityRenderEvent; import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; +@Deprecated public interface CompatBlockEntityRenderer extends BlockEntityRenderer { void render(BlockEntityRenderEvent event); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/CompatBlockEntityRendererConstructArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/CompatBlockEntityRendererConstructArgs.java new file mode 100644 index 000000000..d0dc58e39 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/CompatBlockEntityRendererConstructArgs.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.client.render.block.entity.event; + +import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.pitan76.mcpitanlib.api.util.client.ClientUtil; + +public class CompatBlockEntityRendererConstructArgs { + public final BlockEntityRenderDispatcher dispatcher; + + public CompatBlockEntityRendererConstructArgs(BlockEntityRenderDispatcher dispatcher) { + this.dispatcher = dispatcher; + } + + public CompatBlockEntityRendererConstructArgs() { + this(ClientUtil.getClient().getBlockEntityRenderDispatcher()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/v2/CompatBlockEntityRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/v2/CompatBlockEntityRenderer.java new file mode 100644 index 000000000..cec057a47 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/v2/CompatBlockEntityRenderer.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.client.render.block.entity.v2; + +import net.pitan76.mcpitanlib.api.client.registry.CompatRegistryClient; +import net.pitan76.mcpitanlib.api.client.render.block.entity.event.CompatBlockEntityRendererConstructArgs; +import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; + +public abstract class CompatBlockEntityRenderer implements net.pitan76.mcpitanlib.api.client.render.block.entity.CompatBlockEntityRenderer { + public CompatBlockEntityRenderer(CompatBlockEntityRendererConstructArgs args) { + + } + + public CompatBlockEntityRenderer(CompatRegistryClient.BlockEntityRendererFactory.Context ctx) { + + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index a6292be85..e057abc8c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -501,4 +501,8 @@ public int getFallFlyingTicks() { public boolean checkFallFlying() { return getEntity().checkFallFlying(); } + + public void setStackInHand(Hand hand, ItemStack stack) { + getEntity().setStackInHand(hand, stack); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanMineArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanMineArgs.java new file mode 100644 index 000000000..5ab21de8b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanMineArgs.java @@ -0,0 +1,46 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.util.WorldUtil; + +public class CanMineArgs { + public BlockState state; + public World world; + public BlockPos pos; + public Player miner; + + public CanMineArgs(BlockState state, World world, BlockPos pos, PlayerEntity miner) { + this.state = state; + this.world = world; + this.pos = pos; + this.miner = new Player(miner); + } + + public BlockState getState() { + return state; + } + + public World getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public Player getMiner() { + return miner; + } + + public boolean isExistMiner() { + return miner.getEntity() != null; + } + + public boolean isClient() { + return WorldUtil.isClient(world); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanRepairArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanRepairArgs.java new file mode 100644 index 000000000..2bd98d890 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanRepairArgs.java @@ -0,0 +1,22 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.event.BaseEvent; + +public class CanRepairArgs extends BaseEvent { + public ItemStack stack; + public ItemStack ingredient; + + public CanRepairArgs(ItemStack stack, ItemStack ingredient) { + this.stack = stack; + this.ingredient = ingredient; + } + + public ItemStack getStack() { + return stack; + } + + public ItemStack getIngredient() { + return ingredient; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/EventResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/EventResult.java new file mode 100644 index 000000000..eefce4ca1 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/EventResult.java @@ -0,0 +1,43 @@ +package net.pitan76.mcpitanlib.api.event.result; + +import net.minecraft.util.ActionResult; + +public class EventResult { + + protected final dev.architectury.event.EventResult result; + + private static final EventResult TRUE = new EventResult(dev.architectury.event.EventResult.interruptTrue()); + private static final EventResult STOP = new EventResult(dev.architectury.event.EventResult.interruptDefault()); + private static final EventResult PASS = new EventResult(dev.architectury.event.EventResult.pass()); + private static final EventResult FALSE = new EventResult(dev.architectury.event.EventResult.interruptFalse()); + + + protected EventResult(dev.architectury.event.EventResult result) { + this.result = result; + } + + public static EventResult success() { + return TRUE; + } + + public static EventResult stop() { + return STOP; + } + + public static EventResult pass() { + return PASS; + } + + public static EventResult fail() { + return FALSE; + } + + @Deprecated + public dev.architectury.event.EventResult getResult() { + return result; + } + + public ActionResult toActionResult() { + return result.asMinecraft(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/TypedEventResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/TypedEventResult.java new file mode 100644 index 000000000..971177e9b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/TypedEventResult.java @@ -0,0 +1,42 @@ +package net.pitan76.mcpitanlib.api.event.result; + +import dev.architectury.event.CompoundEventResult; +import net.minecraft.util.ActionResult; +import net.minecraft.util.TypedActionResult; + +public class TypedEventResult { + protected final dev.architectury.event.CompoundEventResult result; + + protected TypedEventResult(dev.architectury.event.CompoundEventResult result) { + this.result = result; + } + + public static TypedEventResult success(T value) { + return new TypedEventResult<>(CompoundEventResult.interruptTrue(value)); + } + + public static TypedEventResult stop(T value) { + return new TypedEventResult<>(CompoundEventResult.interruptDefault(value)); + } + + public static TypedEventResult pass() { + return new TypedEventResult<>(CompoundEventResult.pass()); + } + + public static TypedEventResult fail(T value) { + return new TypedEventResult<>(CompoundEventResult.interruptFalse(value)); + } + + @Deprecated + public dev.architectury.event.CompoundEventResult getResult() { + return result; + } + + public TypedActionResult toTypedActionResult() { + return result.asMinecraft(); + } + + public ActionResult toActionResult() { + return result.asMinecraft().getResult(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/InteractionEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/InteractionEventRegistry.java new file mode 100644 index 000000000..d31cf54c5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/InteractionEventRegistry.java @@ -0,0 +1,84 @@ +package net.pitan76.mcpitanlib.api.event.v0; + +import dev.architectury.event.CompoundEventResult; +import dev.architectury.event.events.common.InteractionEvent; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.result.EventResult; +import net.pitan76.mcpitanlib.api.event.result.TypedEventResult; +import net.pitan76.mcpitanlib.api.event.v0.event.ClickBlockEvent; + +public class InteractionEventRegistry { + @SuppressWarnings("deprecation") + public static void registerRightClickBlock(RightClickBlock rightClickBlock) { + InteractionEvent.RIGHT_CLICK_BLOCK.register((player, hand, pos, direction) -> rightClickBlock.click(new ClickBlockEvent(player, hand, pos, direction)).getResult()); + } + + @SuppressWarnings("deprecation") + public static void registerLeftClickBlock(LeftClickBlock leftClickBlock) { + InteractionEvent.LEFT_CLICK_BLOCK.register((player, hand, pos, direction) -> leftClickBlock.click(new ClickBlockEvent(player, hand, pos, direction)).getResult()); + } + + public static void registerRightClickItem(RightClickItem rightClickItem) { + InteractionEvent.RIGHT_CLICK_ITEM.register(rightClickItem::click); + } + + public static void registerClientLeftClickAir(ClientLeftClickAir clientLeftClickAir) { + InteractionEvent.CLIENT_LEFT_CLICK_AIR.register(clientLeftClickAir::click); + } + + public static void registerClientRightClickAir(ClientRightClickAir clientRightClickAir) { + InteractionEvent.CLIENT_RIGHT_CLICK_AIR.register(clientRightClickAir::click); + } + + public static void registerInteractEntity(InteractEntity interactEntity) { + InteractionEvent.INTERACT_ENTITY.register(interactEntity::interact); + } + + // ---- + + public interface LeftClickBlock { + EventResult click(ClickBlockEvent event); + } + + public interface RightClickBlock { + EventResult click(ClickBlockEvent event); + } + + public interface RightClickItem { + @SuppressWarnings("deprecation") + default CompoundEventResult click(PlayerEntity var1, Hand var2) { + return click(new Player(var1), var2).getResult(); + } + + TypedEventResult click(Player player, Hand hand); + } + + public interface ClientLeftClickAir { + default void click(PlayerEntity var1, Hand var2) { + click(new Player(var1), var2); + } + + void click(Player player, Hand hand); + } + + public interface ClientRightClickAir { + default void click(PlayerEntity var1, Hand var2) { + click(new Player(var1), var2); + } + + void click(Player player, Hand hand); + } + + public interface InteractEntity { + @SuppressWarnings("deprecation") + default dev.architectury.event.EventResult interact(PlayerEntity var1, Entity var2, Hand var3) { + return interact(new Player(var1), var2, var3).getResult(); + } + + EventResult interact(Player player, Entity entity, Hand hand); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ClickBlockEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ClickBlockEvent.java new file mode 100644 index 000000000..231235154 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/ClickBlockEvent.java @@ -0,0 +1,78 @@ +package net.pitan76.mcpitanlib.api.event.v0.event; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.util.BlockStateUtil; +import net.pitan76.mcpitanlib.api.util.WorldUtil; + +public class ClickBlockEvent { + public Player player; + public Hand hand; + public BlockPos pos; + public Direction direction; + + public ClickBlockEvent(Player player, Hand hand, BlockPos pos, Direction direction) { + this.player = player; + this.hand = hand; + this.pos = pos; + this.direction = direction; + } + + public ClickBlockEvent(PlayerEntity player, Hand hand, BlockPos pos, Direction direction) { + this.player = new Player(player); + this.hand = hand; + this.pos = pos; + this.direction = direction; + } + + public Player getPlayer() { + return player; + } + + public Hand getHand() { + return hand; + } + + public BlockPos getPos() { + return pos; + } + + public Direction getDirection() { + return direction; + } + + public boolean isExistPlayer() { + return player.getEntity() != null; + } + + public ItemStack getStackInHand() { + return player.getStackInHand(hand); + } + + public boolean isEmptyStackInHand() { + return getStackInHand().isEmpty(); + } + + public World getWorld() { + return player.getWorld(); + } + + public BlockState getBlockState() { + return WorldUtil.getBlockState(getWorld(), getPos()); + } + + public Block getBlock() { + return BlockStateUtil.getBlock(getBlockState()); + } + + + + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/LivingHurtEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/LivingHurtEventRegistry.java new file mode 100644 index 000000000..a95a7e9be --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/LivingHurtEventRegistry.java @@ -0,0 +1,23 @@ +package net.pitan76.mcpitanlib.api.event.v1; + +import dev.architectury.event.EventResult; +import dev.architectury.event.events.common.EntityEvent; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.pitan76.mcpitanlib.api.event.v0.event.LivingHurtEvent; + +public class LivingHurtEventRegistry { + public static void register(LivingHurt livingHurt) { + EntityEvent.LIVING_HURT.register(livingHurt::hurt); + } + + public interface LivingHurt { + + @SuppressWarnings("deprecation") + default EventResult hurt(LivingEntity var1, DamageSource var2, float var3) { + return hurt(new LivingHurtEvent(var1, var2, var3)).getResult(); + } + + net.pitan76.mcpitanlib.api.event.result.EventResult hurt(LivingHurtEvent event); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerFactory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerFactory.java index 1bb6de4a8..17d6586b0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerFactory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerFactory.java @@ -6,6 +6,7 @@ import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; import net.pitan76.mcpitanlib.api.event.container.factory.ExtraDataArgs; +@Deprecated public interface ExtendedScreenHandlerFactory extends ExtendedMenuProvider { @Override default Text getDisplayName() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/CreateMenuEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/CreateMenuEvent.java new file mode 100644 index 000000000..144c963f5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/CreateMenuEvent.java @@ -0,0 +1,46 @@ +package net.pitan76.mcpitanlib.api.gui.args; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; + +public class CreateMenuEvent { + public int syncId; + public PlayerInventory playerInventory; + public PlayerEntity player; + + public CreateMenuEvent(int syncId, PlayerInventory playerInventory, PlayerEntity player) { + this.syncId = syncId; + this.playerInventory = playerInventory; + this.player = player; + } + + public int getSyncId() { + return syncId; + } + + public PlayerInventory getPlayerInventory() { + return playerInventory; + } + + public PlayerEntity getPlayerEntity() { + return player; + } + + public Player getPlayer() { + return new Player(player); + } + + public boolean isExistPlayer() { + return player != null; + } + + public boolean isClient() { + return getPlayer().isClient(); + } + + public World getWorld() { + return getPlayer().getWorld(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/v2/ExtendedScreenHandlerFactory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/v2/ExtendedScreenHandlerFactory.java new file mode 100644 index 000000000..b26d1915f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/v2/ExtendedScreenHandlerFactory.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.gui.v2; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; + +@SuppressWarnings("deprecation") +public interface ExtendedScreenHandlerFactory extends net.pitan76.mcpitanlib.api.gui.ExtendedScreenHandlerFactory { + + @Override + default ScreenHandler createMenu(int syncId, PlayerInventory playerInventory, PlayerEntity player) { + return createMenu(new CreateMenuEvent(syncId, playerInventory, player)); + } + + ScreenHandler createMenu(CreateMenuEvent event); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/v2/SimpleScreenHandlerFactory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/v2/SimpleScreenHandlerFactory.java new file mode 100644 index 000000000..8d447ebb3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/v2/SimpleScreenHandlerFactory.java @@ -0,0 +1,25 @@ +package net.pitan76.mcpitanlib.api.gui.v2; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; + +public interface SimpleScreenHandlerFactory extends NamedScreenHandlerFactory { + @Override + default Text getDisplayName() { + return getDisplayName(new DisplayNameArgs()); + } + + Text getDisplayName(DisplayNameArgs args); + + @Override + default ScreenHandler createMenu(int syncId, PlayerInventory playerInventory, PlayerEntity player) { + return createMenu(new CreateMenuEvent(syncId, playerInventory, player)); + } + + ScreenHandler createMenu(CreateMenuEvent event); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index 777b1d9ac..3f1484e15 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -225,4 +225,24 @@ public int getItemBarStep(ItemBarStepArgs args) { public float getBonusAttackDamage(BonusAttackDamageArgs args) { return 0; } + + @Deprecated + @Override + public boolean canRepair(ItemStack stack, ItemStack ingredient) { + return canRepair(new CanRepairArgs(stack, ingredient)); + } + + public boolean canRepair(CanRepairArgs args) { + return super.canRepair(args.stack, args.ingredient); + } + + @Deprecated + @Override + public boolean canMine(BlockState state, World world, BlockPos pos, PlayerEntity miner) { + return canMine(new CanMineArgs(state, world, pos, miner)); + } + + public boolean canMine(CanMineArgs args) { + return super.canMine(args.state, args.world, args.pos, args.miner.getEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index 7516ece2d..a113d127a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -173,4 +173,8 @@ public MCPLRegistry getMcplr() { public MCPLRegistry1_20 getMcplr1_20() { return mcplr1_20; } + + public String getNamespace() { + return MOD_ID; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/FuelRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/FuelRegistry.java new file mode 100644 index 000000000..66873fc56 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/FuelRegistry.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.registry; + +import net.minecraft.item.ItemConvertible; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Supplier; + +public class FuelRegistry { + + private static final Map, Integer>> FUEL_MAP = new HashMap<>(); + + public static void register(Supplier itemSupplier, int time, String namespace) { + Map, Integer> map = new HashMap<>(); + map.put(itemSupplier, time); + + FUEL_MAP.put(namespace, map); + } + + @Deprecated + public static void allRegister(String namespace) { + Map, Integer> map = FUEL_MAP.get(namespace); + for (Map.Entry, Integer> entry : map.entrySet()) { + net.pitan76.mcpitanlib.core.registry.FuelRegistry.register(entry.getValue(), entry.getKey().get()); + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 5e279691d..7c022c61e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -17,6 +17,7 @@ import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.pitan76.mcpitanlib.api.registry.CompatRegistry; +import net.pitan76.mcpitanlib.api.registry.FuelRegistry; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.sound.RegistryResultCompatSoundEvent; @@ -133,6 +134,10 @@ public RegistryResult registerItemGroup(CreativeTabBuilder builder) { return cr1.registerItemGroup(builder.getIdentifier(), builder); } + public void registerFuel(Supplier itemSupplier, int time) { + FuelRegistry.register(itemSupplier::get, time, cr1.getNamespace()); + } + public void allRegister() { cr1.allRegister(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java index 042977e26..c0c91314b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.text; import net.minecraft.text.MutableText; +import net.minecraft.text.Style; import net.minecraft.text.Text; import net.pitan76.mcpitanlib.api.util.TextUtil; import org.jetbrains.annotations.Nullable; @@ -77,4 +78,15 @@ public String superToString() { public TextComponent copy() { return new TextComponent(getText()); } + + public Style getStyle() { + return text.getStyle(); + } + + public TextComponent setStyle(Style style) { + if (text instanceof MutableText) + TextUtil.setStyle((MutableText) text, style); + + return this; + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index 8d60dbd0c..d2cbd80fb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -2,13 +2,21 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.state.StateManager; import net.minecraft.state.property.Property; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import net.minecraft.world.World; import net.minecraft.world.WorldAccess; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.util.block.BlockHitResultUtil; public class BlockStateUtil { public static Block getBlock(BlockState state) { @@ -54,4 +62,21 @@ public static boolean hasRandomTicks(BlockState state) { public static void randomTick(BlockState state, ServerWorld world, BlockPos pos) { state.randomTick(world, pos, world.random); } + + public static ActionResult onUse(BlockState state, World world, Player player, BlockHitResult hitResult) { + Hand hand = player.getMainHandStack().isEmpty() ? Hand.OFF_HAND : Hand.MAIN_HAND; + return state.onUse(world, player.getEntity(), hand, hitResult); + } + + public static ActionResult onUse(BlockState state, World world, Player player, Direction dir, BlockPos blockPos) { + return onUse(state, world, player, BlockHitResultUtil.create(player.getPos(), dir, blockPos)); + } + + public static ActionResult onUseWithItem(BlockState state, ItemStack stack, World world, PlayerEntity player, Hand hand, BlockHitResult hit) { + return state.onUse(world, player, hand, hit); + } + + public static ActionResult onUseWithItem_actionResult(BlockState state, ItemStack stack, World world, PlayerEntity player, Hand hand, BlockHitResult hit) { + return onUseWithItem(state, stack, world, player, hand, hit); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java index 1d786c02e..4a40880dd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java @@ -2,6 +2,8 @@ import net.minecraft.util.Identifier; +import java.util.Objects; + /** * This is the Identifier class unique to MCPitanLib. * It is different from Minecraft's Identifier class. @@ -105,6 +107,23 @@ public static boolean equals(CompatIdentifier id1, CompatIdentifier id2) { return id1.namespace.equals(id2.namespace) && id1.path.equals(id2.path); } + public static boolean equals(CompatIdentifier id1, Identifier id2) { + return id1.toString().equals(id2.toString()); + } + + public static boolean equals(Identifier id1, CompatIdentifier id2) { + return id1.toString().equals(id2.toString()); + } + + public static boolean equals(Identifier id1, Identifier id2) { + return id1.toString().equals(id2.toString()); + } + + @Override + public int hashCode() { + return 31 * this.namespace.hashCode() + this.path.hashCode(); + } + // ---- /** diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java index 8f6716544..6b4e4275d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java @@ -46,4 +46,8 @@ public static List getMatchingStacksAsList(Ingredient ingredient) { public static ItemStack[] getMatchingStacks(Ingredient ingredient) { return ingredient.getMatchingStacks(); } + + public static Ingredient empty() { + return Ingredient.EMPTY; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index 617394747..25decf70c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.inventory.Inventories; +import net.minecraft.inventory.Inventory; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -107,4 +108,16 @@ public static void readNbt(World world, NbtCompound nbt, DefaultedList from, Inventory to) { + for (int i = 0; i < from.size(); i++) { + to.setStack(i, from.get(i)); + } + } + + public static void copyToList(Inventory from, DefaultedList to) { + for (int i = 0; i < from.size(); i++) { + to.set(i, from.getStack(i)); + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RegistryLookupUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RegistryLookupUtil.java index 8ab2c899f..70a3d6a51 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RegistryLookupUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RegistryLookupUtil.java @@ -1,11 +1,27 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.CompatEntity; +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; public class RegistryLookupUtil { + public static CompatRegistryLookup getRegistryLookup(ItemAppendTooltipEvent e) { + return new CompatRegistryLookup(); + } + + public static CompatRegistryLookup getRegistryLookup(CompatEntity entity) { + return new CompatRegistryLookup(); + } + + public static CompatRegistryLookup getRegistryLookup(Entity entity) { + return new CompatRegistryLookup(); + } + public static CompatRegistryLookup getRegistryLookup(CompatBlockEntity entity) { return new CompatRegistryLookup(); } @@ -17,4 +33,8 @@ public static CompatRegistryLookup getRegistryLookup(BlockEntity entity) { public static CompatRegistryLookup getRegistryLookup(NbtRWArgs args) { return args.getRegistryLookup(); } -} + + public static CompatRegistryLookup getRegistryLookup(World world) { + return new CompatRegistryLookup(); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/StyleUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StyleUtil.java new file mode 100644 index 000000000..6bbaac18b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StyleUtil.java @@ -0,0 +1,60 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.text.ClickEvent; +import net.minecraft.text.HoverEvent; +import net.minecraft.text.Style; +import net.minecraft.util.Formatting; + +public class StyleUtil { + public static Style emptyStyle() { + return Style.EMPTY; + } + + public static Style withColor(Style style, int color) { + return style.withColor(color); + } + + public static Style withBold(Style style, boolean bold) { + return style.withBold(bold); + } + + public static Style withItalic(Style style, boolean italic) { + return style.withItalic(italic); + } + + public static Style withUnderline(Style style, boolean underline) { + return style.withUnderline(underline); + } + + public static Style withStrikethrough(Style style, boolean strikethrough) { + return style.withStrikethrough(strikethrough); + } + + public static Style withObfuscated(Style style, boolean obfuscated) { + return style.withObfuscated(obfuscated); + } + + public static Style withInsertion(Style style, String insertion) { + return style.withInsertion(insertion); + } + + public static Style withClickEvent(Style style, ClickEvent clickEvent) { + return style.withClickEvent(clickEvent); + } + + public static Style withHoverEvent(Style style, HoverEvent hoverEvent) { + return style.withHoverEvent(hoverEvent); + } + + public static Style withFont(Style style, CompatIdentifier font) { + return style.withFont(font.toMinecraft()); + } + + public static Style withFormatting(Style style, Formatting formatting) { + return style.withFormatting(formatting); + } + + public static Style withExclusiveFormatting(Style style, Formatting formatting) { + return style.withExclusiveFormatting(formatting); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java index 49cbbcd4f..6b8c2d878 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java @@ -31,4 +31,32 @@ public static MutableText keybind(String string) { public static String txt2str(Text text) { return text.getString(); } + + public static MutableText setStyle(MutableText text, Style style) { + return text.setStyle(style); + } + + public static Style getStyle(MutableText text) { + return text.getStyle(); + } + + public static MutableText withColor(MutableText text, int color) { + return setStyle(text, StyleUtil.withColor(text.getStyle(), color)); + } + + public static MutableText withBold(MutableText text, boolean bold) { + return setStyle(text, StyleUtil.withBold(text.getStyle(), bold)); + } + + public static MutableText append(MutableText text, Text sibling) { + return text.append(sibling); + } + + public static MutableText append(MutableText text, String string) { + return text.append(string); + } + + public static MutableText of(String string) { + return literal(string); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 31e8b5dfc..45f487de3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -17,7 +17,9 @@ import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; +import net.minecraft.util.TypeFilter; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; @@ -30,6 +32,7 @@ import org.jetbrains.annotations.Nullable; import java.util.*; +import java.util.function.Predicate; public class WorldUtil { public static boolean hasSkyLight(World world) { @@ -206,20 +209,20 @@ public static boolean isAir(World world, BlockPos pos) { return getBlockState(world, pos).isAir(); } - public static void setBlockState(World world, BlockPos pos, BlockState state, int flags) { - world.setBlockState(pos, state, flags); + public static boolean setBlockState(World world, BlockPos pos, BlockState state, int flags) { + return world.setBlockState(pos, state, flags); } - public static void setBlockState(World world, BlockPos pos, BlockState state) { - setBlockState(world, pos, state, 3); + public static boolean setBlockState(World world, BlockPos pos, BlockState state) { + return setBlockState(world, pos, state, 3); } - public static void setBlockState(World world, BlockPos pos, Block block, int flags) { - setBlockState(world, pos, block.getDefaultState(), flags); + public static boolean setBlockState(World world, BlockPos pos, Block block, int flags) { + return setBlockState(world, pos, block.getDefaultState(), flags); } - public static void setBlockState(World world, BlockPos pos, Block block) { - setBlockState(world, pos, block, 3); + public static boolean setBlockState(World world, BlockPos pos, Block block) { + return setBlockState(world, pos, block, 3); } public static boolean breakBlock(World world, BlockPos pos, boolean drop) { @@ -281,4 +284,12 @@ public static CompatRandom getRandom(World world) { public static long getTime(World world) { return world.getTime(); } + + public static List getEntitiesByType(World world, TypeFilter filter, Box box, Predicate predicate) { + return world.getEntitiesByType(filter, box, predicate); + } + + public static List getEntitiesByClass(World world, Class entityClass, Box box, Predicate predicate) { + return world.getEntitiesByClass(entityClass, box, predicate); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockHitResultUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockHitResultUtil.java new file mode 100644 index 000000000..4c42a10e8 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockHitResultUtil.java @@ -0,0 +1,33 @@ +package net.pitan76.mcpitanlib.api.util.block; + +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; + +public class BlockHitResultUtil { + + public static BlockHitResult create(Vec3d pos, Direction direction, BlockPos blockPos, boolean insideBlock) { + return new BlockHitResult(pos, direction, blockPos, insideBlock); + } + + public static BlockHitResult create(Vec3d pos, Direction direction, BlockPos blockPos) { + return new BlockHitResult(pos, direction, blockPos, false); + } + + public static Vec3d getPos(BlockHitResult blockHitResult) { + return blockHitResult.getPos(); + } + + public static Direction getSide(BlockHitResult blockHitResult) { + return blockHitResult.getSide(); + } + + public static BlockPos getBlockPos(BlockHitResult blockHitResult) { + return blockHitResult.getBlockPos(); + } + + public static boolean isInsideBlock(BlockHitResult blockHitResult) { + return blockHitResult.isInsideBlock(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/DefaultedListUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/DefaultedListUtil.java new file mode 100644 index 000000000..5db1133ae --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/DefaultedListUtil.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.util.collection; + +import net.minecraft.util.collection.DefaultedList; + +public class DefaultedListUtil { + + public static DefaultedList of() { + return DefaultedList.of(); + } + + public static DefaultedList ofSize(int size, E defaultElement) { + return DefaultedList.ofSize(size, defaultElement); + } + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java new file mode 100644 index 000000000..06123d5e9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java @@ -0,0 +1,64 @@ +package net.pitan76.mcpitanlib.api.util.collection; + +import com.google.common.collect.Lists; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.gui.inventory.IInventory; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; +import org.apache.commons.lang3.Validate; +import org.jetbrains.annotations.Nullable; + +import java.util.Arrays; +import java.util.List; + +public class ItemStackList extends DefaultedList { + + public ItemStackList(List delegate, @Nullable ItemStack initialElement) { + super(delegate, initialElement); + } + + public static ItemStackList of() { + return new ItemStackList(Lists.newArrayList(), ItemStackUtil.empty()); + } + + public static ItemStackList ofSize(int size) { + return new ItemStackList(Lists.newArrayListWithCapacity(size), ItemStackUtil.empty()); + } + + public static ItemStackList ofSize(int size, ItemStack defaultStack) { + Validate.notNull(defaultStack); + ItemStack[] objects = new ItemStack[size]; + Arrays.fill(objects, defaultStack); + return new ItemStackList(Arrays.asList(objects), defaultStack); + } + + public static ItemStackList copyOf(ItemStack defaultStack, ItemStack... stacks) { + return new ItemStackList(Arrays.asList(stacks), defaultStack); + } + + public static Inventory toInventory(DefaultedList list) { + return IInventory.of(list); + } + + public static DefaultedList toDefaultedList(Inventory inventory) { + DefaultedList list = DefaultedList.ofSize(inventory.size(), ItemStackUtil.empty()); + for (int i = 0; i < inventory.size(); i++) { + list.set(i, inventory.getStack(i)); + } + + return list; + } + + public static ItemStackList fromInventory(Inventory inventory) { + return new ItemStackList(toDefaultedList(inventory), ItemStackUtil.empty()); + } + + public Inventory toInventory() { + return toInventory(this); + } + + public DefaultedList defaultedList() { + return this; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java new file mode 100644 index 000000000..9d9261455 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java @@ -0,0 +1,45 @@ +package net.pitan76.mcpitanlib.api.util.inventory; + +import net.minecraft.inventory.SimpleInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class CompatInventory extends SimpleInventory { + public CompatInventory(int size) { + super(size); + } + + @Override + public void setStack(int slot, ItemStack stack) { + super.setStack(slot, stack); + } + + /** + * super method of setStack(slot, stack) + */ + public final void superSetStack(int slot, ItemStack stack) { + super.setStack(slot, stack); + } + + /** + * super method of removeStack(slot, amount) + */ + public final ItemStack superRemoveStack(int slot, int amount) { + return super.removeStack(slot, amount); + } + + @Override + public ItemStack removeStack(int slot, int amount) { + return super.removeStack(slot, amount); + } + + @Override + public ItemStack removeStack(int slot) { + return super.removeStack(slot); + } + + @Override + public ItemStack removeItem(Item item, int count) { + return super.removeItem(item, count); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ContainerInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ContainerInventory.java new file mode 100644 index 000000000..b4be9a037 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ContainerInventory.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.util.inventory; + +import net.minecraft.screen.ScreenHandler; + +public class ContainerInventory extends CompatInventory { + + public final T screenHandler; + + public ContainerInventory(T screenHandler, int size) { + super(size); + this.screenHandler = screenHandler; + } + + public T getScreenHandler() { + return screenHandler; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java new file mode 100644 index 000000000..689d156d4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java @@ -0,0 +1,18 @@ +package net.pitan76.mcpitanlib.api.util.inventory; + +import net.minecraft.entity.player.PlayerInventory; +import net.pitan76.mcpitanlib.api.entity.Player; + +public class PlayerInventoryUtil { + public static Player getPlayer(PlayerInventory playerInventory) { + return new Player(playerInventory.player); + } + + public static int getSelectedSlot(PlayerInventory playerInventory) { + return playerInventory.selectedSlot; + } + + public static void setSelectedSlot(PlayerInventory playerInventory, int slot) { + playerInventory.selectedSlot = slot; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/DirectionUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/DirectionUtil.java new file mode 100644 index 000000000..08ac22244 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/DirectionUtil.java @@ -0,0 +1,34 @@ +package net.pitan76.mcpitanlib.api.util.math; + +import net.minecraft.util.math.Direction; + +public class DirectionUtil { + + public static Direction north() { + return Direction.NORTH; + } + + public static Direction south() { + return Direction.SOUTH; + } + + public static Direction east() { + return Direction.EAST; + } + + public static Direction west() { + return Direction.WEST; + } + + public static Direction up() { + return Direction.UP; + } + + public static Direction down() { + return Direction.DOWN; + } + + public static Direction getOpposite(Direction direction) { + return direction.getOpposite(); + } +} diff --git a/info.properties b/info.properties index f95acddb6..3aeb94b5b 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.5 +mod_version=2.4.6 maven_group=net.pitan76 \ No newline at end of file From dd98efe5bb16da976c8aff155c7ee615abcfe16d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:43:09 +0900 Subject: [PATCH 373/617] add APIs --- .../net/pitan76/mcpitanlib/MCPitanLib.java | 7 + .../mcpitanlib/api/block/CompatBlocks.java | 90 +++++++++++ .../mcpitanlib/api/registry/FuelRegistry.java | 4 + .../api/registry/v2/CompatRegistryV2.java | 1 + .../pitan76/mcpitanlib/api/util/NbtUtil.java | 8 + .../mcpitanlib/midohra/MidohraAPI.java | 13 ++ .../mcpitanlib/midohra/item/ItemStack.java | 108 +++++++++++++ .../midohra/nbt/ElementConvertible.java | 9 ++ .../mcpitanlib/midohra/nbt/NbtCompound.java | 147 ++++++++++++++++++ .../mcpitanlib/midohra/nbt/NbtElement.java | 46 ++++++ .../mcpitanlib/midohra/nbt/NbtList.java | 111 +++++++++++++ info.properties | 2 +- 12 files changed, 545 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlocks.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/MidohraAPI.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/ElementConvertible.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtCompound.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtList.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java index 9ee0a0c38..e71e8481d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java @@ -1,3 +1,10 @@ +/* +Copyright (C) 2022-2024 Pitan + +MCPitanLib is under the MIT license. For more information, please refer to the LICENSE file at the root of the repository. +MCPitanLibはMITライセンスです。ライセンスについてはリポジトリ直下のLICENSEファイルを参照してください。 + */ + package net.pitan76.mcpitanlib; import net.minecraft.util.Identifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlocks.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlocks.java new file mode 100644 index 000000000..293cb29c4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlocks.java @@ -0,0 +1,90 @@ +package net.pitan76.mcpitanlib.api.block; + +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; + +public class CompatBlocks { + public static final Block AIR = Blocks.AIR; + public static final Block STONE = Blocks.STONE; + public static final Block COBBLESTONE = Blocks.COBBLESTONE; + public static final Block GRASS_BLOCK = Blocks.GRASS_BLOCK; + public static final Block DIRT = Blocks.DIRT; + public static final Block SAND = Blocks.SAND; + public static final Block RED_SAND = Blocks.RED_SAND; + public static final Block GRANITE = Blocks.GRANITE; + public static final Block POLISHED_GRANITE = Blocks.POLISHED_GRANITE; + public static final Block DIORITE = Blocks.DIORITE; + public static final Block POLISHED_DIORITE = Blocks.POLISHED_DIORITE; + public static final Block ANDESITE = Blocks.ANDESITE; + public static final Block POLISHED_ANDESITE = Blocks.POLISHED_ANDESITE; + public static final Block COARSE_DIRT = Blocks.COARSE_DIRT; + public static final Block PODZOL = Blocks.PODZOL; + + public static final Block OAK_LOG = Blocks.OAK_LOG; + public static final Block SPRUCE_LOG = Blocks.SPRUCE_LOG; + public static final Block BIRCH_LOG = Blocks.BIRCH_LOG; + public static final Block JUNGLE_LOG = Blocks.JUNGLE_LOG; + public static final Block ACACIA_LOG = Blocks.ACACIA_LOG; + public static final Block DARK_OAK_LOG = Blocks.DARK_OAK_LOG; + public static final Block OAK_PLANKS = Blocks.OAK_PLANKS; + public static final Block SPRUCE_PLANKS = Blocks.SPRUCE_PLANKS; + public static final Block BIRCH_PLANKS = Blocks.BIRCH_PLANKS; + public static final Block JUNGLE_PLANKS = Blocks.JUNGLE_PLANKS; + public static final Block ACACIA_PLANKS = Blocks.ACACIA_PLANKS; + public static final Block DARK_OAK_PLANKS = Blocks.DARK_OAK_PLANKS; + public static final Block OAK_SAPLING = Blocks.OAK_SAPLING; + public static final Block SPRUCE_SAPLING = Blocks.SPRUCE_SAPLING; + public static final Block BIRCH_SAPLING = Blocks.BIRCH_SAPLING; + public static final Block JUNGLE_SAPLING = Blocks.JUNGLE_SAPLING; + public static final Block ACACIA_SAPLING = Blocks.ACACIA_SAPLING; + public static final Block DARK_OAK_SAPLING = Blocks.DARK_OAK_SAPLING; + + public static final Block SANDSTONE = Blocks.SANDSTONE; + public static final Block CHISELED_SANDSTONE = Blocks.CHISELED_SANDSTONE; + public static final Block CUT_SANDSTONE = Blocks.CUT_SANDSTONE; + public static final Block NOTE_BLOCK = Blocks.NOTE_BLOCK; + public static final Block POWERED_RAIL = Blocks.POWERED_RAIL; + public static final Block DETECTOR_RAIL = Blocks.DETECTOR_RAIL; + public static final Block PISTON = Blocks.PISTON; + public static final Block STICKY_PISTON = Blocks.STICKY_PISTON; + public static final Block COBWEB = Blocks.COBWEB; + public static final Block GRAVEL = Blocks.GRAVEL; + public static final Block GLASS = Blocks.GLASS; + public static final Block DISPENSER = Blocks.DISPENSER; + + public static final Block COAL_ORE = Blocks.COAL_ORE; + public static final Block IRON_ORE = Blocks.IRON_ORE; + public static final Block COPPER_ORE = Blocks.COPPER_ORE; + public static final Block GOLD_ORE = Blocks.GOLD_ORE; + public static final Block DIAMOND_ORE = Blocks.DIAMOND_ORE; + public static final Block REDSTONE_ORE = Blocks.REDSTONE_ORE; + public static final Block EMERALD_ORE = Blocks.EMERALD_ORE; + public static final Block LAPIS_ORE = Blocks.LAPIS_ORE; + public static final Block NETHER_QUARTZ_ORE = Blocks.NETHER_QUARTZ_ORE; + + public static final Block COAL_BLOCK = Blocks.COAL_BLOCK; + public static final Block IRON_BLOCK = Blocks.IRON_BLOCK; + public static final Block COPPER_BLOCK = Blocks.COPPER_BLOCK; + public static final Block GOLD_BLOCK = Blocks.GOLD_BLOCK; + public static final Block DIAMOND_BLOCK = Blocks.DIAMOND_BLOCK; + public static final Block REDSTONE_BLOCK = Blocks.REDSTONE_BLOCK; + public static final Block EMERALD_BLOCK = Blocks.EMERALD_BLOCK; + public static final Block LAPIS_BLOCK = Blocks.LAPIS_BLOCK; + public static final Block QUARTZ_BLOCK = Blocks.QUARTZ_BLOCK; + + public static final Block TNT = Blocks.TNT; + public static final Block BOOKSHELF = Blocks.BOOKSHELF; + public static final Block OBSIDIAN = Blocks.OBSIDIAN; + public static final Block TORCH = Blocks.TORCH; + public static final Block WALL_TORCH = Blocks.WALL_TORCH; + public static final Block FIRE = Blocks.FIRE; + public static final Block SOUL_FIRE = Blocks.SOUL_FIRE; + public static final Block SPAWNER = Blocks.SPAWNER; + public static final Block OAK_STAIRS = Blocks.OAK_STAIRS; + public static final Block CHEST = Blocks.CHEST; + public static final Block REDSTONE_WIRE = Blocks.REDSTONE_WIRE; + + public static final Block WATER = Blocks.WATER; + public static final Block LAVA = Blocks.LAVA; + public static final Block BEDROCK = Blocks.BEDROCK; +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/FuelRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/FuelRegistry.java index 66873fc56..f5dc51bb4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/FuelRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/FuelRegistry.java @@ -19,9 +19,13 @@ public static void register(Supplier itemSupplier, int time, St @Deprecated public static void allRegister(String namespace) { + if (!FUEL_MAP.containsKey(namespace)) return; + Map, Integer> map = FUEL_MAP.get(namespace); for (Map.Entry, Integer> entry : map.entrySet()) { net.pitan76.mcpitanlib.core.registry.FuelRegistry.register(entry.getValue(), entry.getKey().get()); } + + FUEL_MAP.remove(namespace); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 7c022c61e..9502171ba 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -140,5 +140,6 @@ public void registerFuel(Supplier itemSupplier, int time) { public void allRegister() { cr1.allRegister(); + FuelRegistry.allRegister(cr1.getNamespace()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java index ec6adbdf2..44dcb5269 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java @@ -468,4 +468,12 @@ public static UUID getUuidOrDefault(NbtCompound nbt, String key, UUID defaultVal return getUuid(nbt, key); return defaultValue; } + + public static NbtElement getElement(NbtCompound nbt, String key) { + return nbt.get(key); + } + + public static void putElement(NbtCompound nbt, String key, NbtElement element) { + nbt.put(key, element); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/MidohraAPI.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/MidohraAPI.java new file mode 100644 index 000000000..d27730312 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/MidohraAPI.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.midohra; + +/** + * MidohraAPI + * Experimental API of MCPitanLib + * + * @author Pitan + * @version 0.0.1 + * @since 2024.09.28 + */ +public class MidohraAPI { + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java new file mode 100644 index 000000000..3d2bb8fe8 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java @@ -0,0 +1,108 @@ +package net.pitan76.mcpitanlib.midohra.item; + +import net.minecraft.item.ItemConvertible; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.enchantment.CompatEnchantment; +import net.pitan76.mcpitanlib.api.util.*; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; + +public class ItemStack { + private final net.minecraft.item.ItemStack stack; + + protected ItemStack(net.minecraft.item.ItemStack stack) { + this.stack = stack; + } + + public static ItemStack of(net.minecraft.item.ItemStack stack) { + if (stack == null) + return new ItemStack(ItemStackUtil.empty()); + + return new ItemStack(stack); + } + + public static ItemStack of(ItemConvertible item) { + return new Builder().item(item).build(); + } + + public static ItemStack of(ItemConvertible item, int count) { + return new Builder().item(item).count(count).build(); + } + + public int getCount() { + return stack.getCount(); + } + + public void setCount(int count) { + stack.setCount(count); + } + + public NbtCompound getNbt() { + return CustomDataUtil.getNbt(stack); + } + + public void setNbt(NbtCompound nbt) { + CustomDataUtil.setNbt(stack, nbt); + } + + public CompatIdentifier getItemId() { + return ItemUtil.toCompatID(stack.getItem()); + } + + public ItemStack copy() { + return new ItemStack(stack.copy()); + } + + public Map getEnchantments(@Nullable World world) { + return EnchantmentUtil.getEnchantment(stack, world); + } + + public void setEnchantments(Map enchantments, @Nullable World world) { + EnchantmentUtil.setEnchantment(stack, enchantments, world); + } + + @Deprecated + public net.minecraft.item.ItemStack toMinecraft() { + return stack; + } + + public static class Builder { + + protected CompatIdentifier id; + protected int count = 1; + protected NbtCompound nbt = NbtUtil.create(); + + public Builder() { + + } + + public Builder item(CompatIdentifier id) { + this.id = id; + return this; + } + + public Builder item(ItemConvertible item) { + this.id = ItemUtil.toCompatID(item.asItem()); + return this; + } + + public Builder count(int count) { + this.count = count; + return this; + } + + public Builder nbt(NbtCompound nbt) { + this.nbt = nbt; + return this; + } + + public ItemStack build() { + net.minecraft.item.ItemStack stack = new net.minecraft.item.ItemStack(ItemUtil.fromId(id), count); + CustomDataUtil.setNbt(stack, nbt); + + return new ItemStack(stack); + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/ElementConvertible.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/ElementConvertible.java new file mode 100644 index 000000000..d92a636ac --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/ElementConvertible.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.midohra.nbt; + +public interface ElementConvertible { + NbtElement toElement(); + + default net.minecraft.nbt.NbtElement toMinecraftNbtElement() { + return toElement().toMinecraft(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtCompound.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtCompound.java new file mode 100644 index 000000000..9b633984d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtCompound.java @@ -0,0 +1,147 @@ +package net.pitan76.mcpitanlib.midohra.nbt; + +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.util.NbtUtil; +import net.pitan76.mcpitanlib.midohra.item.ItemStack; + +import java.util.UUID; + +@SuppressWarnings("deprecation") +public class NbtCompound implements ElementConvertible { + protected final net.minecraft.nbt.NbtCompound nbt; + + protected NbtCompound(net.minecraft.nbt.NbtCompound nbt) { + this.nbt = nbt; + } + + public static NbtCompound of(net.minecraft.nbt.NbtCompound nbt) { + return new NbtCompound(nbt); + } + + public static NbtCompound of() { + return new NbtCompound(NbtUtil.create()); + } + + public NbtCompound copy() { + return new NbtCompound(NbtUtil.copy(nbt)); + } + + public boolean has(String key) { + return NbtUtil.has(nbt, key); + } + + public void putByte(String key, byte value) { + NbtUtil.putByte(nbt, key, value); + } + + public byte getByte(String key) { + return NbtUtil.getByte(nbt, key); + } + + public void putShort(String key, short value) { + NbtUtil.putShort(nbt, key, value); + } + + public short getShort(String key) { + return NbtUtil.getShort(nbt, key); + } + + public void putInt(String key, int value) { + NbtUtil.putInt(nbt, key, value); + } + + public int getInt(String key) { + return NbtUtil.getInt(nbt, key); + } + + public void putLong(String key, long value) { + NbtUtil.putLong(nbt, key, value); + } + + public long getLong(String key) { + return NbtUtil.getLong(nbt, key); + } + + public void putFloat(String key, float value) { + NbtUtil.putFloat(nbt, key, value); + } + + public float getFloat(String key) { + return NbtUtil.getFloat(nbt, key); + } + + public void putDouble(String key, double value) { + NbtUtil.putDouble(nbt, key, value); + } + + public double getDouble(String key) { + return NbtUtil.getDouble(nbt, key); + } + + public void putString(String key, String value) { + NbtUtil.putString(nbt, key, value); + } + + public String getString(String key) { + return NbtUtil.getString(nbt, key); + } + + public void putBoolean(String key, boolean value) { + NbtUtil.putBoolean(nbt, key, value); + } + + public boolean getBoolean(String key) { + return NbtUtil.getBoolean(nbt, key); + } + + public void putUuid(String key, UUID value) { + NbtUtil.putUuid(nbt, key, value); + } + + public UUID getUuid(String key) { + return NbtUtil.getUuid(nbt, key); + } + + public void putItemStack(String key, net.pitan76.mcpitanlib.midohra.item.ItemStack stack, CompatRegistryLookup registryLookup) { + NbtUtil.putItemStack(nbt, key, stack.toMinecraft(), registryLookup); + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getItemStack(String key, CompatRegistryLookup registryLookup) { + return ItemStack.of(NbtUtil.getItemStack(nbt, key, registryLookup).get()); + } + + public void put(String key, NbtCompound compound) { + NbtUtil.put(nbt, key, compound.nbt); + } + + public void put(String key, net.minecraft.nbt.NbtCompound nbt) { + NbtUtil.put(this.nbt, key, nbt); + } + + public void put(String key, ElementConvertible element) { + NbtUtil.put(nbt, key, element.toMinecraftNbtElement()); + } + + public NbtCompound getCompound(String key) { + return new NbtCompound(NbtUtil.get(nbt, key)); + } + + public NbtElement get(String key) { + return NbtElement.of(NbtUtil.getElement(nbt, key)); + } + + @Deprecated + public net.minecraft.nbt.NbtCompound toMinecraft() { + return nbt; + } + + @Override + public String toString() { + return nbt.toString(); + } + + @Override + public NbtElement toElement() { + return NbtElement.of(nbt); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java new file mode 100644 index 000000000..c75a79fa6 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java @@ -0,0 +1,46 @@ +package net.pitan76.mcpitanlib.midohra.nbt; + +import net.minecraft.nbt.NbtType; + +public class NbtElement implements ElementConvertible { + protected final net.minecraft.nbt.NbtElement nbt; + + protected NbtElement(net.minecraft.nbt.NbtElement nbt) { + this.nbt = nbt; + } + + public static NbtElement of(net.minecraft.nbt.NbtElement nbt) { + return new NbtElement(nbt); + } + + public NbtElement copy() { + return new NbtElement(nbt.copy()); + } + + public byte getType() { + return nbt.getType(); + } + + public NbtType getNbtType() { + return nbt.getNbtType(); + } + + public int getSizeInBytes() { + return -1; + } + + @Override + public String toString() { + return nbt.toString(); + } + + @Deprecated + public net.minecraft.nbt.NbtElement toMinecraft() { + return nbt; + } + + @Override + public NbtElement toElement() { + return this; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtList.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtList.java new file mode 100644 index 000000000..b41c0aa6c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtList.java @@ -0,0 +1,111 @@ +package net.pitan76.mcpitanlib.midohra.nbt; + +import java.util.AbstractList; +import java.util.Optional; + +@SuppressWarnings("deprecation") +public class NbtList extends AbstractList implements ElementConvertible { + protected final net.minecraft.nbt.NbtList nbtList; + + protected NbtList(net.minecraft.nbt.NbtList nbtList) { + this.nbtList = nbtList; + } + + public static NbtList of(net.minecraft.nbt.NbtList nbtList) { + return new NbtList(nbtList); + } + + public static Optional ofOptional(NbtElement nbtElement) { + if (nbtElement.toMinecraft() instanceof net.minecraft.nbt.NbtList) + return Optional.of(new NbtList((net.minecraft.nbt.NbtList) nbtElement.toMinecraft())); + + return Optional.empty(); + } + + public NbtList copy() { + return new NbtList(nbtList.copy()); + } + + @Override + public int size() { + return nbtList.size(); + } + + public byte getType() { + return nbtList.getType(); + } + + @Override + public NbtElement get(int index) { + return NbtElement.of(nbtList.get(index)); + } + + public boolean add(net.minecraft.nbt.NbtElement nbtElement) { + return nbtList.add(nbtElement); + } + + @Override + public boolean add(NbtElement nbtElement) { + return add(nbtElement.toMinecraft()); + } + + public void add(int index, net.minecraft.nbt.NbtElement nbtElement) { + nbtList.add(index, nbtElement); + } + + @Override + public void add(int index, NbtElement nbtElement) { + add(index, nbtElement.toMinecraft()); + } + + @Override + public NbtElement set(int index, NbtElement element) { + return NbtElement.of(nbtList.set(index, element.toMinecraft())); + } + + @Override + public NbtElement remove(int index) { + return NbtElement.of(nbtList.remove(index)); + } + + @Override + public boolean isEmpty() { + return nbtList.isEmpty(); + } + + @Override + public void clear() { + nbtList.clear(); + } + + public String asString() { + return nbtList.asString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + + return o instanceof NbtList && nbtList.equals(((NbtList) o).nbtList); + } + + @Override + public int hashCode() { + return nbtList.hashCode(); + } + + @Override + public String toString() { + return nbtList.toString(); + } + + @Deprecated + public net.minecraft.nbt.NbtList toMinecraft() { + return nbtList; + } + + @Override + public NbtElement toElement() { + return NbtElement.of(nbtList); + } +} diff --git a/info.properties b/info.properties index 3aeb94b5b..7f35ea995 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.6 +mod_version=2.4.7 maven_group=net.pitan76 \ No newline at end of file From 02d1f2cbec48886e7230ddcd3ca54b94cce34133 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 28 Sep 2024 23:09:53 +0900 Subject: [PATCH 374/617] add APIs --- .../api/event/item/ItemUseOnBlockEvent.java | 4 ++ .../api/event/item/ItemUseOnEntityEvent.java | 7 +++ .../sided/ChestStyleSidedInventory.java | 10 +++++ .../inventory/sided/CompatSidedInventory.java | 35 +++++++++++++++ .../sided/VanillaStyleSidedInventory.java | 20 +++++++++ .../sided/args/AvailableSlotsArgs.java | 38 ++++++++++++++++ .../inventory/sided/args/CanExtractArgs.java | 32 ++++++++++++++ .../inventory/sided/args/CanInsertArgs.java | 35 +++++++++++++++ .../mcpitanlib/api/util/InteractUtil.java | 43 +++++++++++++++++++ .../mcpitanlib/api/util/WorldUtil.java | 14 +++++- info.properties | 2 +- 11 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/ChestStyleSidedInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/CompatSidedInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/VanillaStyleSidedInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/AvailableSlotsArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/CanExtractArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/CanInsertArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/InteractUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java index 6db0b29f3..583a4a4fb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java @@ -39,6 +39,10 @@ public ItemUseOnBlockEvent(World world, @Nullable PlayerEntity player, Hand hand this.blockPos = hit.getBlockPos(); } + public ItemUseOnBlockEvent(Player player, Hand hand, BlockHitResult hit) { + this(player.getWorld(), player.getEntity(), hand, player.getStackInHand(hand), hit); + } + public ItemUsageContext toIUC() { return new ItemUsageContext(player.getPlayerEntity(), hand, hit); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java index c3dd5aa68..879d27d4c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java @@ -22,6 +22,13 @@ public ItemUseOnEntityEvent(ItemStack stack, PlayerEntity user, LivingEntity ent this.entity = entity; } + public ItemUseOnEntityEvent(ItemStack stack, Player user, LivingEntity entity, Hand hand) { + this.stack = stack; + this.user = user; + this.hand = hand; + this.entity = entity; + } + public ItemStack getStack() { return stack; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/ChestStyleSidedInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/ChestStyleSidedInventory.java new file mode 100644 index 000000000..a4cd6f4f3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/ChestStyleSidedInventory.java @@ -0,0 +1,10 @@ +package net.pitan76.mcpitanlib.api.gui.inventory.sided; + +import net.pitan76.mcpitanlib.api.gui.inventory.sided.args.AvailableSlotsArgs; + +public interface ChestStyleSidedInventory extends VanillaStyleSidedInventory { + @Override + default int[] getAvailableSlots(AvailableSlotsArgs args) { + return args.getAllSlots(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/CompatSidedInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/CompatSidedInventory.java new file mode 100644 index 000000000..5f4ce81b3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/CompatSidedInventory.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.api.gui.inventory.sided; + +import net.minecraft.inventory.SidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Direction; +import net.pitan76.mcpitanlib.api.gui.inventory.sided.args.AvailableSlotsArgs; +import net.pitan76.mcpitanlib.api.gui.inventory.sided.args.CanExtractArgs; +import net.pitan76.mcpitanlib.api.gui.inventory.sided.args.CanInsertArgs; +import org.jetbrains.annotations.Nullable; + +public interface CompatSidedInventory extends SidedInventory { + @Override + @Deprecated + default int[] getAvailableSlots(Direction side) { + return getAvailableSlots(new AvailableSlotsArgs(side, this)); + } + + int[] getAvailableSlots(AvailableSlotsArgs args); + + @Override + @Deprecated + default boolean canInsert(int slot, ItemStack stack, @Nullable Direction dir) { + return canInsert(new CanInsertArgs(slot, stack, dir)); + } + + boolean canInsert(CanInsertArgs args); + + @Override + @Deprecated + default boolean canExtract(int slot, ItemStack stack, Direction dir) { + return canExtract(new CanExtractArgs(slot, stack, dir)); + } + + boolean canExtract(CanExtractArgs args); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/VanillaStyleSidedInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/VanillaStyleSidedInventory.java new file mode 100644 index 000000000..119a59057 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/VanillaStyleSidedInventory.java @@ -0,0 +1,20 @@ +package net.pitan76.mcpitanlib.api.gui.inventory.sided; + +import net.minecraft.util.math.Direction; +import net.pitan76.mcpitanlib.api.gui.inventory.sided.args.CanExtractArgs; +import net.pitan76.mcpitanlib.api.gui.inventory.sided.args.CanInsertArgs; + +public interface VanillaStyleSidedInventory extends CompatSidedInventory { + @Override + default boolean canInsert(CanInsertArgs args) { + if (args.getDir() == null) + return false; + + return args.getDir() != Direction.DOWN; + } + + @Override + default boolean canExtract(CanExtractArgs args) { + return args.getDir() == Direction.DOWN; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/AvailableSlotsArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/AvailableSlotsArgs.java new file mode 100644 index 000000000..748b47420 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/AvailableSlotsArgs.java @@ -0,0 +1,38 @@ +package net.pitan76.mcpitanlib.api.gui.inventory.sided.args; + +import net.minecraft.util.math.Direction; +import net.pitan76.mcpitanlib.api.gui.inventory.sided.CompatSidedInventory; +import net.pitan76.mcpitanlib.api.gui.inventory.IInventory; + +public class AvailableSlotsArgs { + public Direction side; + public CompatSidedInventory inventory; + + public AvailableSlotsArgs(Direction side, CompatSidedInventory inventory) { + this.side = side; + this.inventory = inventory; + } + + public Direction getSide() { + return side; + } + + public CompatSidedInventory getInventory() { + return inventory; + } + + public int[] getAllSlots() { + if (!(inventory instanceof IInventory)) + return new int[0]; + + IInventory inv = (IInventory) inventory; + int size = inv.size(); + + int[] slots = new int[size]; + for (int i = 0; i < size; i++) { + slots[i] = i; + } + + return slots; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/CanExtractArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/CanExtractArgs.java new file mode 100644 index 000000000..568dcbe4c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/CanExtractArgs.java @@ -0,0 +1,32 @@ +package net.pitan76.mcpitanlib.api.gui.inventory.sided.args; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Direction; + +public class CanExtractArgs { + public int slot; + public ItemStack stack; + public Direction dir; + + public CanExtractArgs(int slot, ItemStack stack, Direction dir) { + this.slot = slot; + this.stack = stack; + this.dir = dir; + } + + public int getSlot() { + return slot; + } + + public ItemStack getStack() { + return stack; + } + + public Direction getDir() { + return dir; + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getStack_midohra() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getStack()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/CanInsertArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/CanInsertArgs.java new file mode 100644 index 000000000..a6aa1a662 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/inventory/sided/args/CanInsertArgs.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.api.gui.inventory.sided.args; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Direction; +import org.jetbrains.annotations.Nullable; + +public class CanInsertArgs { + public int slot; + public ItemStack stack; + + @Nullable + public Direction dir; + + public CanInsertArgs(int slot, ItemStack stack, @Nullable Direction dir) { + this.slot = slot; + this.stack = stack; + this.dir = dir; + } + + public int getSlot() { + return slot; + } + + public ItemStack getStack() { + return stack; + } + + public @Nullable Direction getDir() { + return dir; + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getStack_midohra() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getStack()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InteractUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InteractUtil.java new file mode 100644 index 000000000..537c43ad0 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InteractUtil.java @@ -0,0 +1,43 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.block.BlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.util.ActionResult; +import net.minecraft.util.TypedActionResult; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnEntityEvent; + +public class InteractUtil { + + public static TypedActionResult useItem(Item item, ItemUseEvent event) { + return item.use(event.getWorld(), event.user.getEntity(), event.getHand()); + } + + public static ActionResult useItemOnBlock(Item item, ItemUsageContext context) { + return item.useOnBlock(context); + } + + public static ActionResult useItemOnBlock(Item item, ItemUseOnBlockEvent event) { + return useItemOnBlock(item, event.toIUC()); + } + + public static ActionResult useItemOnEntity(Item item, ItemUseOnEntityEvent event) { + return item.useOnEntity(event.getStack(), event.getUser().getEntity(), event.getEntity(), event.getHand()); + } + + public static ActionResult useBlock(BlockState state, World world, Player player, BlockHitResult hitResult) { + return BlockStateUtil.onUse(state, world, player, hitResult); + } + + public static ActionResult useBlock(BlockState state, World world, Player player, Direction dir, BlockPos blockPos) { + return BlockStateUtil.onUse(state, world, player, dir, blockPos); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 45f487de3..93b238a9a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -4,6 +4,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; import net.minecraft.entity.ExperienceOrbEntity; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.player.PlayerEntity; @@ -17,7 +18,6 @@ import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; -import net.minecraft.util.TypeFilter; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.ChunkPos; @@ -285,11 +285,21 @@ public static long getTime(World world) { return world.getTime(); } - public static List getEntitiesByType(World world, TypeFilter filter, Box box, Predicate predicate) { + public static List getEntitiesByType(World world, EntityType filter, Box box, Predicate predicate) { return world.getEntitiesByType(filter, box, predicate); } public static List getEntitiesByClass(World world, Class entityClass, Box box, Predicate predicate) { return world.getEntitiesByClass(entityClass, box, predicate); } + + public static void spawnParticles(World world, ParticleEffect parameters, double x, double y, double z, int count, double velocityX, double velocityY, double velocityZ, double speed) { + if (!isServer(world)) return; + + ((ServerWorld) world).spawnParticles(parameters, x, y, z, count, velocityX, velocityY, velocityZ, speed); + } + + public static void updateListeners(World world, BlockPos pos, BlockState oldState, BlockState newState, int flags) { + world.updateListeners(pos, oldState, newState, flags); + } } diff --git a/info.properties b/info.properties index 7f35ea995..06dafdc95 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.7 +mod_version=2.4.8 maven_group=net.pitan76 \ No newline at end of file From 791d5e1377c96fd35c9c11c9331d3bfa9585cb29 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:56:49 +0900 Subject: [PATCH 375/617] add APIs --- .../net/pitan76/easyapi/config/Config.java | 3 + .../api/client/CompatInventoryScreen.java | 1 + .../api/client/SimpleHandledScreen.java | 1 + .../api/client/SimpleInventoryScreen.java | 1 + .../gui/screen/CompatInventoryScreen.java | 21 ++ .../gui/screen/SimpleHandledScreen.java | 290 ++++++++++++++++++ .../gui/screen/SimpleInventoryScreen.java | 38 +++ .../api/gui/slot/CompatibleSlot.java | 20 ++ .../api/registry/v2/CompatRegistryV2.java | 6 + .../mcpitanlib/api/util/EntityUtil.java | 5 + .../api/util/collection/ItemStackList.java | 11 +- .../api/util/inventory/CompatInventory.java | 104 +++++++ .../util/inventory/args/CanInsertArgs.java | 23 ++ .../api/util/recipe/RecipeMatcherUtil.java | 37 +++ info.properties | 2 +- 15 files changed, 561 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/CompatInventoryScreen.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleInventoryScreen.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/args/CanInsertArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeMatcherUtil.java diff --git a/common/src/main/java/net/pitan76/easyapi/config/Config.java b/common/src/main/java/net/pitan76/easyapi/config/Config.java index b4718da00..cdbabbcc1 100644 --- a/common/src/main/java/net/pitan76/easyapi/config/Config.java +++ b/common/src/main/java/net/pitan76/easyapi/config/Config.java @@ -37,6 +37,9 @@ public Config(Config config) { }; public boolean has(String key) { + if (configMap == null) + return false; + return configMap.containsKey(key); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/CompatInventoryScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/CompatInventoryScreen.java index 64cef2c47..28fd67071 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/CompatInventoryScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/CompatInventoryScreen.java @@ -6,6 +6,7 @@ import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +@Deprecated public abstract class CompatInventoryScreen extends SimpleInventoryScreen { public CompatInventoryScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 74f07ab4c..bb6d6db11 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -23,6 +23,7 @@ import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import net.pitan76.mcpitanlib.api.util.client.RenderUtil; +@Deprecated public abstract class SimpleHandledScreen extends HandledScreen { public int width, height, backgroundWidth, backgroundHeight, x, y; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java index d642de247..46c5bf7be 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleInventoryScreen.java @@ -9,6 +9,7 @@ import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.util.client.RenderUtil; +@Deprecated public abstract class SimpleInventoryScreen extends SimpleHandledScreen { public SimpleInventoryScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/CompatInventoryScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/CompatInventoryScreen.java new file mode 100644 index 000000000..b04909c11 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/CompatInventoryScreen.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.client.gui.screen; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public abstract class CompatInventoryScreen extends SimpleInventoryScreen { + + public CompatInventoryScreen(S handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + public abstract CompatIdentifier getCompatTexture(); + + @Override + public Identifier getTexture() { + return getCompatTexture().toMinecraft(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java new file mode 100644 index 000000000..fa9d6ee79 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -0,0 +1,290 @@ +package net.pitan76.mcpitanlib.api.client.gui.screen; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.Drawable; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.Selectable; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; +import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.client.ClientUtil; +import net.pitan76.mcpitanlib.api.util.client.RenderUtil; + +public abstract class SimpleHandledScreen extends HandledScreen { + + public int width, height, backgroundWidth, backgroundHeight, x, y; + public S handler; + public TextRenderer textRenderer; + public ItemRenderer itemRenderer; + + public Text title; + public MinecraftClient client; + public SimpleHandledScreen(S handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + fixScreen(); + this.handler = handler; + this.title = title; + + } + + @Deprecated + @Override + public S getScreenHandler() { + return getScreenHandlerOverride(); + } + + public S getScreenHandlerOverride() { + return super.getScreenHandler(); + } + + public T addDrawableChild_compatibility(T drawableElement) { + return super.addDrawableChild(drawableElement); + // addButton + } + + public T addSelectableChild_compatibility(T selectableElement) { + return super.addSelectableChild(selectableElement); + } + + public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWidget widget) { + return addDrawableChild_compatibility(widget); + } + + @Deprecated + @Override + protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { + DrawObjectDM drawObjectDM = new DrawObjectDM(context); + drawBackgroundOverride(new DrawBackgroundArgs(drawObjectDM, delta, mouseX, mouseY)); + } + + public abstract void drawBackgroundOverride(DrawBackgroundArgs args); + + @Deprecated + @Override + protected void drawForeground(DrawContext context, int mouseX, int mouseY) { + DrawObjectDM drawObjectDM = new DrawObjectDM(context); + drawForegroundOverride(new DrawForegroundArgs(drawObjectDM, mouseX, mouseY)); + } + + protected void drawForegroundOverride(DrawForegroundArgs args) { + super.drawForeground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY); + } + + public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x, int y, int u, int v, int width, int height) { + //ScreenUtil.setBackground(GUI); + //super.drawTexture(matrices, x, y, u, v, width, height); + drawObjectDM.getContext().drawTexture(texture, x, y, u, v, width, height); + } + + public void callDrawTexture(DrawObjectDM drawObjectDM, CompatIdentifier texture, int x, int y, int u, int v, int width, int height) { + callDrawTexture(drawObjectDM, texture.toMinecraft(), x, y, u, v, width, height); + } + + @Deprecated + public void callRenderBackground(DrawObjectDM drawObjectDM) { + callRenderBackground(new RenderArgs(drawObjectDM, 0, 0, 0)); + } + + + public void callRenderBackground(RenderArgs args) { + super.renderBackground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + } + + public void callDrawMouseoverTooltip(DrawMouseoverTooltipArgs args) { + super.drawMouseoverTooltip(args.drawObjectDM.getContext(), args.mouseX, args.mouseY); + } + + public void renderOverride(RenderArgs args) { + super.render(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + } + + public void resizeOverride(MinecraftClient client, int width, int height) { + } + + public void initOverride() { + } + + @Deprecated + @Override + protected void init() { + super.init(); + fixScreen(); + initOverride(); + } + + @Deprecated + @Override + public void resize(MinecraftClient client, int width, int height) { + super.resize(client, width, height); + fixScreen(); + resizeOverride(client, width, height); + } + + public void fixScreen() { + this.backgroundWidth = getBackgroundWidth(); + this.backgroundHeight = getBackgroundHeight(); + this.x = super.x; //(this.width - this.backgroundWidth) / 2; + this.y = super.y; //(this.height - this.backgroundHeight) / 2; + this.textRenderer = super.textRenderer; + this.itemRenderer = MinecraftClient.getInstance().getItemRenderer(); + this.width = super.width; + this.height = super.height; + if (super.client == null) + this.client = MinecraftClient.getInstance(); + else + this.client = super.client; + } + + public void setX(int x) { + this.x = x; + super.x = x; + } + + public void setY(int y) { + this.y = y; + super.y = y; + } + + public void setTextRenderer(TextRenderer textRenderer) { + this.textRenderer = textRenderer; + super.textRenderer = textRenderer; + } + + public void setItemRenderer(ItemRenderer itemRenderer) { + this.itemRenderer = itemRenderer; + } + + public void setWidth(int width) { + this.width = width; + super.width = width; + } + + public void setBackgroundWidth(int backgroundWidth) { + this.backgroundWidth = backgroundWidth; + super.backgroundWidth = backgroundWidth; + } + + public void setBackgroundHeight(int backgroundHeight) { + this.backgroundHeight = backgroundHeight; + super.backgroundHeight = backgroundHeight; + } + + public void setHeight(int height) { + this.height = height; + super.height = height; + } + + public int getBackgroundWidth() { + return super.backgroundWidth; + } + + public int getBackgroundHeight() { + return super.backgroundHeight; + } + + @Deprecated + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + DrawObjectDM drawObjectDM = new DrawObjectDM(context); + renderOverride(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); + } + + public boolean keyReleased(KeyEventArgs args) { + return super.keyReleased(args.keyCode, args.scanCode, args.modifiers); + } + + public boolean keyPressed(KeyEventArgs args) { + return super.keyPressed(args.keyCode, args.scanCode, args.modifiers); + } + + public void renderBackgroundTexture(RenderBackgroundTextureArgs args) { + if (getBackgroundTexture() != null) + Screen.renderBackgroundTexture(args.getDrawObjectDM().getContext(), getBackgroundTexture(), x, y, 0, 0, this.width, this.height); + + RenderUtil.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + callDrawTexture(args.drawObjectDM, getBackgroundTexture(), 0, 0, 0, 0, width, height); + } + + @Deprecated + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + return this.keyReleased(new KeyEventArgs(keyCode, scanCode, modifiers)); + } + + @Deprecated + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + return this.keyPressed(new KeyEventArgs(keyCode, scanCode, modifiers)); + } + + @Deprecated + @Override + public void renderDarkening(DrawContext context) { + this.renderBackgroundTexture(new RenderBackgroundTextureArgs(new DrawObjectDM(context), 0)); + } + + public void closeOverride() { + super.close(); + } + + public void removedOverride() { + super.removed(); + } + + @Override + public void close() { + closeOverride(); + } + + @Override + public void removed() { + removedOverride(); + } + + public Identifier getBackgroundTexture() { + return getCompatBackgroundTexture().toMinecraft(); + } + + public CompatIdentifier getCompatBackgroundTexture() { + return null; + } + + public void setTitleX(int x) { + this.titleX = x; + } + + public void setTitleY(int y) { + this.titleY = y; + } + + public void setTitlePos(int x, int y) { + setTitleX(x); + setTitleY(y); + } + + public void setTitleXCenter() { + if (textRenderer == null) + textRenderer = ClientUtil.getTextRenderer(); + + setTitleX(backgroundWidth / 2 - textRenderer.getWidth(title) / 2); + } + + public int getTitleX() { + return titleX; + } + + public int getTitleY() { + return titleY; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleInventoryScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleInventoryScreen.java new file mode 100644 index 000000000..daa47269d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleInventoryScreen.java @@ -0,0 +1,38 @@ +package net.pitan76.mcpitanlib.api.client.gui.screen; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawBackgroundArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawMouseoverTooltipArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; +import net.pitan76.mcpitanlib.api.util.client.RenderUtil; + +public abstract class SimpleInventoryScreen extends SimpleHandledScreen { + + public SimpleInventoryScreen(S handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + public abstract Identifier getTexture(); + + @Override + public Identifier getBackgroundTexture() { + return getTexture(); + } + + @Override + public void drawBackgroundOverride(DrawBackgroundArgs args) { + RenderUtil.setShaderToPositionTexProgram(); + RenderUtil.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + callDrawTexture(args.drawObjectDM, getTexture(), x, y, 0, 0, backgroundWidth, backgroundHeight); + } + + @Override + public void renderOverride(RenderArgs args) { + this.callRenderBackground(args); + super.renderOverride(args); + this.callDrawMouseoverTooltip(new DrawMouseoverTooltipArgs(args.drawObjectDM, args.mouseX, args.mouseY)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java index 3c6550745..b72e0d2cc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java @@ -1,8 +1,10 @@ package net.pitan76.mcpitanlib.api.gui.slot; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; +import net.pitan76.mcpitanlib.api.entity.Player; public class CompatibleSlot extends Slot { public CompatibleSlot(Inventory inventory, int index, int x, int y) { @@ -76,4 +78,22 @@ public int callGetY() { public void callMarkDirty() { super.markDirty(); } + + @Override + public boolean canInsert(ItemStack stack) { + return canInsert(net.pitan76.mcpitanlib.midohra.item.ItemStack.of(stack)); + } + + @Override + public boolean canTakeItems(PlayerEntity playerEntity) { + return canTakeItems(new Player(playerEntity)); + } + + public boolean canInsert(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return super.canInsert(stack.toMinecraft()); + } + + public boolean canTakeItems(Player player) { + return super.canTakeItems(player.getEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 9502171ba..71bb03aba 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -9,6 +9,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.particle.ParticleType; +import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.SoundEvent; import net.pitan76.mcpitanlib.api.block.ExtendBlock; @@ -82,6 +83,11 @@ public RegistryResult> registerScreenHandlerType(CompatIden return cr1.registerScreenHandlerType(id.toMinecraft(), supplier); } + public Supplier> registerScreenHandlerTypeSavingGenerics(CompatIdentifier id, Supplier> supplier) { + RegistryResult> result = cr1.registerScreenHandlerType(id.toMinecraft(), supplier::get); + return () -> (ScreenHandlerType) result.getOrNull(); + } + public RegistryResult> registerBlockEntityType(CompatIdentifier id, Supplier> supplier) { return cr1.registerBlockEntityType(id.toMinecraft(), supplier); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index 2edc19edc..f22aa08e4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -3,6 +3,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.util.BlockRotation; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; @@ -147,4 +148,8 @@ public static Entity getVehicle(Entity entity) { public static void setVehicle(Entity entity, Entity vehicle) { entity.startRiding(vehicle, true); } + + public static void applyRotation(Entity entity, BlockRotation rotation) { + entity.applyRotation(rotation); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java index 06123d5e9..3e2f4a341 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java @@ -23,7 +23,7 @@ public static ItemStackList of() { } public static ItemStackList ofSize(int size) { - return new ItemStackList(Lists.newArrayListWithCapacity(size), ItemStackUtil.empty()); + return ofSize(size, ItemStackUtil.empty()); } public static ItemStackList ofSize(int size, ItemStack defaultStack) { @@ -61,4 +61,13 @@ public Inventory toInventory() { public DefaultedList defaultedList() { return this; } + + public static ItemStackList of(DefaultedList defaultedList) { + ItemStackList stacks = ItemStackList.ofSize(defaultedList.size()); + for (int i = 0; i < defaultedList.size(); i++) { + stacks.set(i , defaultedList.get(i)); + } + + return stacks; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java index 9d9261455..bdd0a8fea 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java @@ -1,8 +1,18 @@ package net.pitan76.mcpitanlib.api.util.inventory; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.registry.RegistryWrapper; +import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; +import net.pitan76.mcpitanlib.api.util.inventory.args.CanInsertArgs; +import net.pitan76.mcpitanlib.midohra.nbt.NbtList; + +import java.util.List; public class CompatInventory extends SimpleInventory { public CompatInventory(int size) { @@ -42,4 +52,98 @@ public ItemStack removeStack(int slot) { public ItemStack removeItem(Item item, int count) { return super.removeItem(item, count); } + + @Deprecated + @Override + public void onOpen(PlayerEntity player) { + onOpen(new Player(player)); + } + + @Deprecated + @Override + public void onClose(PlayerEntity player) { + onClose(new Player(player)); + } + + @Deprecated + @Override + public net.minecraft.nbt.NbtList toNbtList(RegistryWrapper.WrapperLookup registries) { + return toNbtList(new CompatRegistryLookup(registries)).toMinecraft(); + } + + @Deprecated + @Override + public void readNbtList(net.minecraft.nbt.NbtList list, RegistryWrapper.WrapperLookup registries) { + readNbtList(NbtList.of(list), new CompatRegistryLookup(registries)); + } + + @Deprecated + @Override + public boolean canPlayerUse(PlayerEntity player) { + return canPlayerUse(new Player(player)); + } + + @Deprecated + @Override + public boolean canInsert(ItemStack stack) { + return canInsert(new CanInsertArgs(stack)); + } + + public void onOpen(Player player) { + super.onOpen(player.getEntity()); + } + + public void onClose(Player player) { + super.onClose(player.getEntity()); + } + + public NbtList toNbtList(CompatRegistryLookup registries) { + return NbtList.of(super.toNbtList(registries.getRegistryLookup())); + } + + public void readNbtList(NbtList list, CompatRegistryLookup registries) { + super.readNbtList(list.toMinecraft(), registries.getRegistryLookup()); + } + + public boolean canPlayerUse(Player player) { + return true; + } + + public boolean canInsert(CanInsertArgs args) { + return super.canInsert(args.getMcStack()); + } + + @Deprecated + @Override + public List clearToList() { + return callClearToList(); + } + + public List callClearToList() { + return super.clearToList(); + } + + @Deprecated + @Override + public DefaultedList getHeldStacks() { + return callGetHeldStacks(); + } + + public DefaultedList callGetHeldStacks() { + return super.getHeldStacks(); + } + + public ItemStackList callGetHeldStacksAsItemStackList() { + return ItemStackList.of(callGetHeldStacks()); + } + + @Deprecated + @Override + public ItemStack getStack(int slot) { + return callGetStack(slot); + } + + public ItemStack callGetStack(int slot) { + return super.getStack(slot); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/args/CanInsertArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/args/CanInsertArgs.java new file mode 100644 index 000000000..aeb15f5e9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/args/CanInsertArgs.java @@ -0,0 +1,23 @@ +package net.pitan76.mcpitanlib.api.util.inventory.args; + +import net.pitan76.mcpitanlib.midohra.item.ItemStack; + +public class CanInsertArgs { + public ItemStack stack; + + public CanInsertArgs(ItemStack stack) { + this.stack = stack; + } + + public CanInsertArgs(net.minecraft.item.ItemStack stack) { + this(ItemStack.of(stack)); + } + + public ItemStack getStack() { + return stack; + } + + public net.minecraft.item.ItemStack getMcStack() { + return stack.toMinecraft(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeMatcherUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeMatcherUtil.java new file mode 100644 index 000000000..6143cfd33 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeMatcherUtil.java @@ -0,0 +1,37 @@ +package net.pitan76.mcpitanlib.api.util.recipe; + +import it.unimi.dsi.fastutil.ints.IntList; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeMatcher; +import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; + +public class RecipeMatcherUtil { + public static ItemStack getStackFromId(int itemId) { + return RecipeMatcher.getStackFromId(itemId); + } + + public static int getItemId(ItemStack stack) { + return RecipeMatcher.getItemId(stack); + } + + public static boolean match(RecipeMatcher matcher, CompatibleRecipeEntry entry, IntList output) { + return match(matcher, entry.getRecipe(), output); + } + + public static boolean match(RecipeMatcher matcher, CompatibleRecipeEntry entry, IntList output, int multiplier) { + return match(matcher, entry.getRecipe(), output, multiplier); + } + + public static boolean match(RecipeMatcher matcher, Recipe recipe, IntList output) { + return matcher.match(recipe, output); + } + + public static boolean match(RecipeMatcher matcher, Recipe recipe, IntList output, int multiplier) { + return matcher.match(recipe, output, multiplier); + } + + public static void clear(RecipeMatcher matcher) { + matcher.clear(); + } +} diff --git a/info.properties b/info.properties index 06dafdc95..72bd01d2a 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.8 +mod_version=2.4.9 maven_group=net.pitan76 \ No newline at end of file From 36e0597b2e745d637610020b3e3d41e9bf494308 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 1 Oct 2024 00:08:45 +0900 Subject: [PATCH 376/617] Fix APIs --- .../api/client/gui/screen/SimpleHandledScreen.java | 9 +++++---- .../api/util/inventory/CompatInventory.java | 13 ++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index fa9d6ee79..fd6d66c4a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -6,7 +6,6 @@ import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.entity.player.PlayerInventory; @@ -209,8 +208,10 @@ public boolean keyPressed(KeyEventArgs args) { } public void renderBackgroundTexture(RenderBackgroundTextureArgs args) { - if (getBackgroundTexture() != null) - Screen.renderBackgroundTexture(args.getDrawObjectDM().getContext(), getBackgroundTexture(), x, y, 0, 0, this.width, this.height); + if (getBackgroundTexture() == null) { + super.renderBackgroundTexture(args.drawObjectDM.getContext()); + return; + } RenderUtil.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); callDrawTexture(args.drawObjectDM, getBackgroundTexture(), 0, 0, 0, 0, width, height); @@ -230,7 +231,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { @Deprecated @Override - public void renderDarkening(DrawContext context) { + public void renderBackgroundTexture(DrawContext context) { this.renderBackgroundTexture(new RenderBackgroundTextureArgs(new DrawObjectDM(context), 0)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java index bdd0a8fea..986b31153 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java @@ -4,7 +4,6 @@ import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.registry.RegistryWrapper; import net.minecraft.util.collection.DefaultedList; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; @@ -67,14 +66,14 @@ public void onClose(PlayerEntity player) { @Deprecated @Override - public net.minecraft.nbt.NbtList toNbtList(RegistryWrapper.WrapperLookup registries) { - return toNbtList(new CompatRegistryLookup(registries)).toMinecraft(); + public net.minecraft.nbt.NbtList toNbtList() { + return toNbtList(new CompatRegistryLookup()).toMinecraft(); } @Deprecated @Override - public void readNbtList(net.minecraft.nbt.NbtList list, RegistryWrapper.WrapperLookup registries) { - readNbtList(NbtList.of(list), new CompatRegistryLookup(registries)); + public void readNbtList(net.minecraft.nbt.NbtList list) { + readNbtList(NbtList.of(list), new CompatRegistryLookup()); } @Deprecated @@ -98,11 +97,11 @@ public void onClose(Player player) { } public NbtList toNbtList(CompatRegistryLookup registries) { - return NbtList.of(super.toNbtList(registries.getRegistryLookup())); + return NbtList.of(super.toNbtList()); } public void readNbtList(NbtList list, CompatRegistryLookup registries) { - super.readNbtList(list.toMinecraft(), registries.getRegistryLookup()); + super.readNbtList(list.toMinecraft()); } public boolean canPlayerUse(Player player) { From 004305b8019ee6e5d58d769c9d6b42325880a9db Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 1 Oct 2024 00:35:49 +0900 Subject: [PATCH 377/617] Fix APIs2 --- .../api/client/gui/screen/SimpleHandledScreen.java | 4 ++-- .../api/util/inventory/CompatInventory.java | 13 ++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index fd6d66c4a..9087bb2cb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -97,7 +97,7 @@ public void callRenderBackground(DrawObjectDM drawObjectDM) { public void callRenderBackground(RenderArgs args) { - super.renderBackground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + super.renderBackground(args.drawObjectDM.getContext()); } public void callDrawMouseoverTooltip(DrawMouseoverTooltipArgs args) { @@ -288,4 +288,4 @@ public int getTitleX() { public int getTitleY() { return titleY; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java index 986b31153..5a40affff 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java @@ -122,14 +122,13 @@ public List callClearToList() { return super.clearToList(); } - @Deprecated - @Override - public DefaultedList getHeldStacks() { - return callGetHeldStacks(); - } - public DefaultedList callGetHeldStacks() { - return super.getHeldStacks(); + ItemStackList list = ItemStackList.ofSize(size()); + for (int i = 0; i < size(); i++) { + list.add(callGetStack(i)); + } + + return list; } public ItemStackList callGetHeldStacksAsItemStackList() { From 4f41dc200843cc778491725375d8f55b4adc6c11 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 1 Oct 2024 00:40:12 +0900 Subject: [PATCH 378/617] fix APIs3 --- .../gui/screen/SimpleHandledScreen.java | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index 9087bb2cb..4375be040 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -1,13 +1,15 @@ package net.pitan76.mcpitanlib.api.client.gui.screen; +import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; @@ -18,7 +20,7 @@ import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; -import net.pitan76.mcpitanlib.api.util.client.RenderUtil; +import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; public abstract class SimpleHandledScreen extends HandledScreen { @@ -62,8 +64,8 @@ public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWi @Deprecated @Override - protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { - DrawObjectDM drawObjectDM = new DrawObjectDM(context); + protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mouseY) { + DrawObjectDM drawObjectDM = new DrawObjectDM(stack); drawBackgroundOverride(new DrawBackgroundArgs(drawObjectDM, delta, mouseX, mouseY)); } @@ -71,19 +73,18 @@ protected void drawBackground(DrawContext context, float delta, int mouseX, int @Deprecated @Override - protected void drawForeground(DrawContext context, int mouseX, int mouseY) { - DrawObjectDM drawObjectDM = new DrawObjectDM(context); + protected void drawForeground(MatrixStack stack, int mouseX, int mouseY) { + DrawObjectDM drawObjectDM = new DrawObjectDM(stack); drawForegroundOverride(new DrawForegroundArgs(drawObjectDM, mouseX, mouseY)); } protected void drawForegroundOverride(DrawForegroundArgs args) { - super.drawForeground(args.drawObjectDM.getContext(), args.mouseX, args.mouseY); + super.drawForeground(args.drawObjectDM.getStack(), args.mouseX, args.mouseY); } public void callDrawTexture(DrawObjectDM drawObjectDM, Identifier texture, int x, int y, int u, int v, int width, int height) { - //ScreenUtil.setBackground(GUI); - //super.drawTexture(matrices, x, y, u, v, width, height); - drawObjectDM.getContext().drawTexture(texture, x, y, u, v, width, height); + ScreenUtil.setBackground(texture); + drawTexture(drawObjectDM.getStack(), x, y, u, v, width, height); } public void callDrawTexture(DrawObjectDM drawObjectDM, CompatIdentifier texture, int x, int y, int u, int v, int width, int height) { @@ -92,20 +93,21 @@ public void callDrawTexture(DrawObjectDM drawObjectDM, CompatIdentifier texture, @Deprecated public void callRenderBackground(DrawObjectDM drawObjectDM) { + super.renderBackground(drawObjectDM.getStack()); callRenderBackground(new RenderArgs(drawObjectDM, 0, 0, 0)); } public void callRenderBackground(RenderArgs args) { - super.renderBackground(args.drawObjectDM.getContext()); + super.renderBackground(args.drawObjectDM.getStack()); } public void callDrawMouseoverTooltip(DrawMouseoverTooltipArgs args) { - super.drawMouseoverTooltip(args.drawObjectDM.getContext(), args.mouseX, args.mouseY); + super.drawMouseoverTooltip(args.drawObjectDM.getStack(), args.mouseX, args.mouseY); } public void renderOverride(RenderArgs args) { - super.render(args.drawObjectDM.getContext(), args.mouseX, args.mouseY, args.delta); + super.render(args.drawObjectDM.getStack(), args.mouseX, args.mouseY, args.delta); } public void resizeOverride(MinecraftClient client, int width, int height) { @@ -136,7 +138,7 @@ public void fixScreen() { this.x = super.x; //(this.width - this.backgroundWidth) / 2; this.y = super.y; //(this.height - this.backgroundHeight) / 2; this.textRenderer = super.textRenderer; - this.itemRenderer = MinecraftClient.getInstance().getItemRenderer(); + this.itemRenderer = super.itemRenderer; this.width = super.width; this.height = super.height; if (super.client == null) @@ -162,6 +164,7 @@ public void setTextRenderer(TextRenderer textRenderer) { public void setItemRenderer(ItemRenderer itemRenderer) { this.itemRenderer = itemRenderer; + super.itemRenderer = itemRenderer; } public void setWidth(int width) { @@ -194,8 +197,8 @@ public int getBackgroundHeight() { @Deprecated @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - DrawObjectDM drawObjectDM = new DrawObjectDM(context); + public void render(MatrixStack stack, int mouseX, int mouseY, float delta) { + DrawObjectDM drawObjectDM = new DrawObjectDM(stack); renderOverride(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); } @@ -209,12 +212,15 @@ public boolean keyPressed(KeyEventArgs args) { public void renderBackgroundTexture(RenderBackgroundTextureArgs args) { if (getBackgroundTexture() == null) { - super.renderBackgroundTexture(args.drawObjectDM.getContext()); + super.renderBackgroundTexture(args.getvOffset()); return; } - RenderUtil.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - callDrawTexture(args.drawObjectDM, getBackgroundTexture(), 0, 0, 0, 0, width, height); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + RenderSystem.setShaderTexture(0, getBackgroundTexture()); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + callDrawTexture(args.drawObjectDM, getBackgroundTexture(), 0, 0, 0, 0, this.width, this.height); } @Deprecated @@ -231,8 +237,8 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { @Deprecated @Override - public void renderBackgroundTexture(DrawContext context) { - this.renderBackgroundTexture(new RenderBackgroundTextureArgs(new DrawObjectDM(context), 0)); + public void renderBackgroundTexture(int vOffset) { + this.renderBackgroundTexture(new RenderBackgroundTextureArgs(null, vOffset)); } public void closeOverride() { @@ -288,4 +294,4 @@ public int getTitleX() { public int getTitleY() { return titleY; } -} \ No newline at end of file +} From a9c4c39252a5308bbd24e1b113024a2f3c146c27 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 6 Oct 2024 16:04:43 +0900 Subject: [PATCH 379/617] add APIs --- .../net/pitan76/mcpitanlib/MCPitanLib.java | 11 ++- .../gui/screen/CompatInventoryScreen.java | 12 +++ .../gui/screen/SimpleHandledScreen.java | 20 +++- .../CompatibleTexturedButtonWidget.java | 17 ++++ .../container/factory/ExtraDataArgs.java | 5 + .../api/event/item/ItemUseEvent.java | 4 + .../api/gui/SimpleScreenHandler.java | 46 +++++++--- .../gui/SimpleScreenHandlerTypeBuilder.java | 15 +++ .../api/gui/args/CreateMenuEvent.java | 12 +++ .../api/registry/result/SupplierResult.java | 52 +++++++++++ .../api/registry/v2/CompatRegistryV2.java | 6 ++ .../api/simple/block/SimpleGuiBlock.java | 28 ++++++ .../api/simple/item/SimpleGuiItem.java | 62 +++++++++++++ .../api/tile/CompatBlockEntity.java | 8 ++ .../api/util/client/ScreenUtil.java | 54 +++++++++++ .../mcpitanlib/api/util/debug/OutputUtil.java | 69 ++++++++++++++ .../api/util/math/BlockRotations.java | 19 ++++ .../mcpitanlib/guilib/GuiRegistry.java | 42 +++++++++ .../mcpitanlib/guilib/GuiTextures.java | 9 ++ .../mcpitanlib/guilib/MGLClientNetworks.java | 17 ++++ .../pitan76/mcpitanlib/guilib/MPLGuiLib.java | 40 ++++++++ .../mcpitanlib/guilib/api/IScreenInfo.java | 38 ++++++++ .../guilib/api/ISimpleScreenInfo.java | 14 +++ .../mcpitanlib/guilib/api/NetworkDefines.java | 8 ++ .../entity/BlockEntityWithContainer.java | 40 ++++++++ .../ExtendedBlockEntityWithContainer.java | 59 ++++++++++++ .../container/BlockEntityContainerGui.java | 11 +++ .../guilib/api/container/ContainerGui.java | 66 ++++++++++++++ .../ExtendedBlockEntityContainerGui.java | 39 ++++++++ .../api/container/SimpleContainerGui.java | 16 ++++ .../guilib/api/render/SlotRenderer.java | 27 ++++++ .../guilib/api/screen/ContainerGuiScreen.java | 86 ++++++++++++++++++ .../api/screen/SimpleContainerGuiScreen.java | 16 ++++ .../mcpitanlib/guilib/test/TestContainer.java | 55 +++++++++++ .../mcpitanlib/midohra/item/ItemStack.java | 5 + .../mcpitanlib/test/ExampleCommand.java | 4 +- .../mcpitanlib/test/ExampleContainerGui.java | 26 ++++++ .../test/ExampleContainerGuiScreen.java | 30 ++++++ .../mcpitanlib/test/ExampleGuiBlock.java | 30 +++--- .../mcpitanlib/test/ExampleGuiItem.java | 29 ++++-- .../pitan76/mcpitanlib/test/ExampleMod.java | 79 ++++++++++------ .../mcpitanlib/test/ExampleModClient.java | 7 +- .../mcpitanlib/test/ExampleScreen.java | 31 ++----- .../mcpitanlib/test/ExampleScreenHandler.java | 6 +- .../mplguilib/textures/container/base.png | Bin 0 -> 802 bytes .../textures/container/base_furnace.png | Bin 0 -> 1637 bytes .../textures/container/gui_parts.png | Bin 0 -> 1515 bytes info.properties | 2 +- 48 files changed, 1174 insertions(+), 98 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/SupplierResult.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/simple/block/SimpleGuiBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/simple/item/SimpleGuiItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/debug/OutputUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BlockRotations.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiTextures.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/MGLClientNetworks.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/IScreenInfo.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/ISimpleScreenInfo.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/NetworkDefines.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/block/entity/BlockEntityWithContainer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/block/entity/ExtendedBlockEntityWithContainer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/BlockEntityContainerGui.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/ContainerGui.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/ExtendedBlockEntityContainerGui.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/SimpleContainerGui.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/SlotRenderer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/screen/ContainerGuiScreen.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/screen/SimpleContainerGuiScreen.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/test/TestContainer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/test/ExampleContainerGui.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/test/ExampleContainerGuiScreen.java create mode 100644 common/src/main/resources/assets/mplguilib/textures/container/base.png create mode 100644 common/src/main/resources/assets/mplguilib/textures/container/base_furnace.png create mode 100644 common/src/main/resources/assets/mplguilib/textures/container/gui_parts.png diff --git a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java index e71e8481d..2a0b01bc2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java @@ -13,6 +13,9 @@ import net.pitan76.mcpitanlib.api.registry.CompatRegistry; import net.pitan76.mcpitanlib.api.util.PlatformUtil; import net.pitan76.mcpitanlib.debug.DebugTool; +import net.pitan76.mcpitanlib.guilib.MPLGuiLib; +import net.pitan76.mcpitanlib.test.ExampleMod; +import net.pitan76.mcpitanlib.test.ExampleModClient; import java.io.File; import java.util.ArrayList; @@ -39,14 +42,16 @@ public class MCPitanLib { */ public static void init() { configInit(); + new MPLGuiLib().init(); if (PlatformUtil.isDevelopmentEnvironment() || (config.has("debugMode") && config.getBoolean("debugMode"))) { System.out.println("MCPitanLib: Debug Mode"); DebugTool.register(); registry.allRegister(); - /* - ExampleMod.init(); - */ + + new ExampleMod(); + if (PlatformUtil.isClient()) + ExampleModClient.init(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/CompatInventoryScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/CompatInventoryScreen.java index b04909c11..675de4d31 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/CompatInventoryScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/CompatInventoryScreen.java @@ -2,9 +2,12 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.guilib.api.render.SlotRenderer; public abstract class CompatInventoryScreen extends SimpleInventoryScreen { @@ -14,8 +17,17 @@ public CompatInventoryScreen(S handler, PlayerInventory inventory, Text title) { public abstract CompatIdentifier getCompatTexture(); + @Deprecated @Override public Identifier getTexture() { return getCompatTexture().toMinecraft(); } + + public void drawSlot(DrawObjectDM drawObjectDM, Slot slot) { + SlotRenderer.drawSlot(drawObjectDM, slot, x, y); + } + + public void drawSlots(DrawObjectDM drawObjectDM) { + SlotRenderer.drawSlots(drawObjectDM, handler, x, y); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index 4375be040..dda1a9283 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -18,8 +18,10 @@ import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.client.render.handledscreen.*; import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; +import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; +import net.pitan76.mcpitanlib.api.util.client.RenderUtil; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; public abstract class SimpleHandledScreen extends HandledScreen { @@ -294,4 +296,20 @@ public int getTitleX() { public int getTitleY() { return titleY; } -} + + public void drawText(DrawObjectDM drawObjectDM, Text text, int x, int y, int color) { + ScreenUtil.RendererUtil.drawText(textRenderer, drawObjectDM, text, x, y, color); + } + + public void drawText(DrawObjectDM drawObjectDM, TextComponent text, int x, int y, int color) { + ScreenUtil.RendererUtil.drawText(textRenderer, drawObjectDM, text, x, y, color); + } + + public void drawText(DrawObjectDM drawObjectDM, Text text, int x, int y) { + ScreenUtil.RendererUtil.drawText(textRenderer, drawObjectDM, text, x, y); + } + + public void drawText(DrawObjectDM drawObjectDM, TextComponent text, int x, int y) { + ScreenUtil.RendererUtil.drawText(textRenderer, drawObjectDM, text, x, y); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java index e5b283b33..944e95920 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatibleTexturedButtonWidget.java @@ -4,6 +4,7 @@ import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.TextUtil; public class CompatibleTexturedButtonWidget extends TexturedButtonWidget { @@ -24,6 +25,22 @@ public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text); } + public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, CompatIdentifier texture, ButtonWidget.PressAction pressAction) { + this(x, y, width, height, u, v, texture.toMinecraft(), pressAction); + } + + public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, ButtonWidget.PressAction pressAction) { + this(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), pressAction); + } + + public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction) { + this(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), textureWidth, textureHeight, pressAction); + } + + public CompatibleTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text text) { + this(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), textureWidth, textureHeight, pressAction, text); + } + public void setPos(int x, int y) { this.x = x; this.y = y; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/ExtraDataArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/ExtraDataArgs.java index f73f56479..2b8c2d729 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/ExtraDataArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/container/factory/ExtraDataArgs.java @@ -2,6 +2,7 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.server.network.ServerPlayerEntity; +import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.network.PacketByteUtil; @@ -40,6 +41,10 @@ public ServerPlayerEntity getPlayer() { return player; } + public Player getCompatPlayer() { + return new Player(player); + } + /** * @param obj The object to write * @see PacketByteUtil#writeVar(PacketByteBuf, Object) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java index 230611a56..0183559b3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java @@ -60,4 +60,8 @@ public TypedActionResult consume() { public boolean isSneaking() { return user.isSneaking(); } + + public TypedActionResult success() { + return success(stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java index 4e913186c..5acbce2e1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java @@ -9,6 +9,10 @@ import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; +import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; +import net.pitan76.mcpitanlib.api.util.SlotUtil; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -19,6 +23,13 @@ protected SimpleScreenHandler(@Nullable ScreenHandlerType type, int syncId) { super(type, syncId); } + protected SimpleScreenHandler(@Nullable ScreenHandlerType type, CreateMenuEvent e) { + this(type, e.getSyncId()); + } + + public boolean hasMainInventory = false; + public boolean hasHotbar = false; + @Deprecated @Override public boolean canUse(PlayerEntity player) { @@ -73,6 +84,7 @@ public void close(Player player) { * @param y start y */ protected List addPlayerMainInventorySlots(PlayerInventory inventory, int x, int y) { + hasMainInventory = true; return this.addSlots(inventory, 9, x, y, DEFAULT_SLOT_SIZE, 9, 3); } @@ -83,6 +95,7 @@ protected List addPlayerMainInventorySlots(PlayerInventory inventory, int * @param y start y */ protected List addPlayerHotbarSlots(PlayerInventory inventory, int x, int y) { + hasHotbar = true; return this.addSlotsX(inventory, 0, x, y, DEFAULT_SLOT_SIZE, 9); } @@ -163,30 +176,37 @@ protected boolean insertItem(ItemStack stack, int startIndex, int endIndex, bool } public ItemStack quickMoveOverride(Player player, int index) { - ItemStack itemStack = ItemStack.EMPTY; - Slot slot = this.slots.get(index); - if (slot.hasStack()) { - ItemStack itemStack2 = slot.getStack(); + ItemStack itemStack = ItemStackUtil.empty(); + Slot slot = ScreenHandlerUtil.getSlot(this, index); + int size = ScreenHandlerUtil.getSlots(this).size(); + + if (SlotUtil.hasStack(slot)) { + ItemStack itemStack2 = SlotUtil.getStack(slot); itemStack = itemStack2.copy(); - if (index < 9) { - if (!this.insertItem(itemStack2, 9, 36, true)) { - return ItemStack.EMPTY; + + if (hasMainInventory && hasHotbar) { + if (index > 35) { + if (!this.callInsertItem(itemStack2, 0, 9, false)) { + if (!this.callInsertItem(itemStack2, 9, 36, true)) { + return ItemStackUtil.empty(); + } + } + } else if (size > 36 && !this.callInsertItem(itemStack2, 36, size, false)) { + return ItemStackUtil.empty(); } - } else if (!this.insertItem(itemStack2, 0, 9, false)) { - return ItemStack.EMPTY; } if (itemStack2.isEmpty()) { - slot.setStack(ItemStack.EMPTY); + SlotUtil.setStack(slot, ItemStackUtil.empty()); } else { - slot.markDirty(); + SlotUtil.markDirty(slot); } if (itemStack2.getCount() == itemStack.getCount()) { - return ItemStack.EMPTY; + return ItemStackUtil.empty(); } - slot.onTakeItem(player.getEntity(), itemStack2); + SlotUtil.onTakeItem(slot, player, itemStack2); } return itemStack; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandlerTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandlerTypeBuilder.java index e3c03f1b4..c0f612691 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandlerTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandlerTypeBuilder.java @@ -3,6 +3,7 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; public class SimpleScreenHandlerTypeBuilder { @@ -12,6 +13,10 @@ public SimpleScreenHandlerTypeBuilder(Factory factory) { this.factory = factory; } + public SimpleScreenHandlerTypeBuilder(Factory2 factory) { + this.factory = factory; + } + public ScreenHandlerType build() { return new ScreenHandlerType<>(factory::create); } @@ -20,4 +25,14 @@ public ScreenHandlerType build() { public interface Factory { T create(int syncId, PlayerInventory inventory); } + + @FunctionalInterface + public interface Factory2 extends Factory { + T create(CreateMenuEvent e); + + @Override + default T create(int syncId, PlayerInventory inventory) { + return create(new CreateMenuEvent(syncId, inventory)); + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/CreateMenuEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/CreateMenuEvent.java index 144c963f5..1fface96e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/CreateMenuEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/CreateMenuEvent.java @@ -16,6 +16,18 @@ public CreateMenuEvent(int syncId, PlayerInventory playerInventory, PlayerEntity this.player = player; } + public CreateMenuEvent(int syncId, PlayerInventory playerInventory) { + this.syncId = syncId; + this.playerInventory = playerInventory; + this.player = playerInventory.player; + } + + public CreateMenuEvent(int syncId, Player player) { + this.syncId = syncId; + this.playerInventory = player.getInv(); + this.player = player.getEntity(); + } + public int getSyncId() { return syncId; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/SupplierResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/SupplierResult.java new file mode 100644 index 000000000..4e2a538c2 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/result/SupplierResult.java @@ -0,0 +1,52 @@ +package net.pitan76.mcpitanlib.api.registry.result; + +import dev.architectury.registry.registries.RegistrySupplier; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; +import java.util.function.Supplier; + +public class SupplierResult extends RegistryResult { + protected Supplier supplier; + + protected SupplierResult(Supplier supplier) { + super(null); + this.supplier = supplier; + } + + protected SupplierResult(RegistrySupplier supplier) { + this(supplier::getOrNull); + } + + protected SupplierResult(RegistryResult result) { + this(result.supplier); + } + + public static SupplierResult of(Supplier supplier) { + return new SupplierResult<>(supplier); + } + + public static SupplierResult of(RegistrySupplier supplier) { + return new SupplierResult<>(supplier); + } + + public static SupplierResult of(RegistryResult result) { + return new SupplierResult<>(result); + } + + @Override + public T get() { + return supplier.get(); + } + + @Override + public @Nullable T getOrNull() { + if (supplier == null) + return null; + return supplier.get(); + } + + public Optional getOptional() { + return Optional.ofNullable(getOrNull()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 71bb03aba..6d4ca4ae1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -15,11 +15,13 @@ import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.enchantment.CompatEnchantment; import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffect; +import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandlerTypeBuilder; import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.pitan76.mcpitanlib.api.registry.CompatRegistry; import net.pitan76.mcpitanlib.api.registry.FuelRegistry; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.api.registry.result.SupplierResult; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.sound.RegistryResultCompatSoundEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; @@ -88,6 +90,10 @@ public Supplier> registerScreenHa return () -> (ScreenHandlerType) result.getOrNull(); } + public SupplierResult> registerScreenHandlerType(CompatIdentifier id, SimpleScreenHandlerTypeBuilder builder) { + return SupplierResult.of(registerScreenHandlerTypeSavingGenerics(id, builder::build)); + } + public RegistryResult> registerBlockEntityType(CompatIdentifier id, Supplier> supplier) { return cr1.registerBlockEntityType(id.toMinecraft(), supplier); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/simple/block/SimpleGuiBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/simple/block/SimpleGuiBlock.java new file mode 100644 index 000000000..4a0843eb9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/simple/block/SimpleGuiBlock.java @@ -0,0 +1,28 @@ +package net.pitan76.mcpitanlib.api.simple.block; + +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; +import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; +import net.pitan76.mcpitanlib.api.gui.v2.SimpleScreenHandlerFactory; + +public abstract class SimpleGuiBlock extends ExtendBlock implements SimpleScreenHandlerFactory { + + public SimpleGuiBlock(Settings settings) { + super(settings); + } + + @Override + public ActionResult onRightClick(BlockUseEvent e) { + if (e.isClient()) + e.player.openGuiScreen(this); + + return e.success(); + } + + @Override + public Text getDisplayName(DisplayNameArgs args) { + return getName(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/simple/item/SimpleGuiItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/simple/item/SimpleGuiItem.java new file mode 100644 index 000000000..2ffc80214 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/simple/item/SimpleGuiItem.java @@ -0,0 +1,62 @@ +package net.pitan76.mcpitanlib.api.simple.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.TypedActionResult; +import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; +import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.api.gui.v2.SimpleScreenHandlerFactory; +import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.ExtendItem; + +public class SimpleGuiItem extends ExtendItem implements SimpleScreenHandlerFactory { + + public ScreenHandlerFactory factory; + public Text name; + + public SimpleGuiItem(CompatibleItemSettings settings, ScreenHandlerFactory factory, Text name) { + super(settings); + this.factory = factory; + this.name = name; + } + + public SimpleGuiItem(CompatibleItemSettings settings, ScreenHandlerFactory factory) { + super(settings); + this.factory = factory; + } + + public SimpleGuiItem(CompatibleItemSettings settings) { + super(settings); + } + + @Override + public TypedActionResult onRightClick(ItemUseEvent e) { + if (!e.isClient()) + e.user.openGuiScreen(this); + + return e.success(); + } + + @Override + public Text getDisplayName(DisplayNameArgs args) { + if (name == null) + return getName(); + + return name; + } + + @Override + public ScreenHandler createMenu(CreateMenuEvent e) { + if (factory == null) + return null; + + return factory.create(e); + } + + @FunctionalInterface + public interface ScreenHandlerFactory { + ScreenHandler create(CreateMenuEvent e); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java index b3188a47b..73c69bee5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java @@ -12,6 +12,7 @@ import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; +import net.pitan76.mcpitanlib.api.util.WorldUtil; import org.jetbrains.annotations.Nullable; public class CompatBlockEntity extends BlockEntity { @@ -87,4 +88,11 @@ public void readNbt(NbtCompound nbt) { readNbt(new ReadNbtArgs(nbt)); } + public boolean isClient() { + if (getWorld() == null) + return false; + + return WorldUtil.isClient(getWorld()); + } + } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java index 6f0d41b93..c6e90e6f5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java @@ -14,6 +14,8 @@ import net.pitan76.mcpitanlib.api.client.gui.widget.RedrawableTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; import net.pitan76.mcpitanlib.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.text.TextComponent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; @Environment(EnvType.CLIENT) public class ScreenUtil { @@ -80,6 +82,38 @@ public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidge return new RedrawableTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, message); } + public static CompatibleTexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, CompatIdentifier texture, ButtonWidget.PressAction pressAction) { + return createTexturedButtonWidget(x, y, width, height, u, v, height, texture.toMinecraft(), pressAction); + } + + public static CompatibleTexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, ButtonWidget.PressAction pressAction) { + return createTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), pressAction); + } + + public static CompatibleTexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction) { + return createTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), textureWidth, textureHeight, pressAction); + } + + public static CompatibleTexturedButtonWidget createTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text message) { + return createTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), textureWidth, textureHeight, pressAction, message); + } + + public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, CompatIdentifier texture, ButtonWidget.PressAction pressAction) { + return createRedrawableTexturedButtonWidget(x, y, width, height, u, v, texture.toMinecraft(), pressAction); + } + + public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, ButtonWidget.PressAction pressAction) { + return createRedrawableTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), pressAction); + } + + public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction) { + return createRedrawableTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), textureWidth, textureHeight, pressAction); + } + + public static RedrawableTexturedButtonWidget createRedrawableTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, CompatIdentifier texture, int textureWidth, int textureHeight, ButtonWidget.PressAction pressAction, Text message) { + return createRedrawableTexturedButtonWidget(x, y, width, height, u, v, hoveredVOffset, texture.toMinecraft(), textureWidth, textureHeight, pressAction, message); + } + public static class Texts { @@ -122,6 +156,26 @@ public static void drawTexture(DrawObjectDM drawObjectDM, Identifier texture, in public static TextRenderer getTextRenderer() { return MinecraftClient.getInstance().textRenderer; } + + public static void drawTexture(DrawObjectDM drawObjectDM, CompatIdentifier texture, int x, int y, float u, float v, int width, int height, int textureWidth, int textureHeight) { + drawTexture(drawObjectDM, texture.toMinecraft(), x, y, u, v, width, height, textureWidth, textureHeight); + } + + public static void drawTexture(DrawObjectDM drawObjectDM, CompatIdentifier texture, int x, int y, float u, float v, int width, int height) { + drawTexture(drawObjectDM, texture.toMinecraft(), x, y, u, v, width, height); + } + + public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, TextComponent text, int x, int y, int color) { + return drawText(renderer, drawObjectDM, text.getText(), x, y, color); + } + + public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, Text text, int x, int y) { + return drawText(renderer, drawObjectDM, text, x, y, 4210752); + } + + public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, TextComponent text, int x, int y) { + return drawText(renderer, drawObjectDM, text, x, y, 4210752); + } } public static int getWidth(Text text) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/debug/OutputUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/debug/OutputUtil.java new file mode 100644 index 000000000..2fb569972 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/debug/OutputUtil.java @@ -0,0 +1,69 @@ +package net.pitan76.mcpitanlib.api.util.debug; + +import net.minecraft.inventory.Inventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.util.ItemUtil; +import net.pitan76.mcpitanlib.api.util.PlatformUtil; + +public class OutputUtil { + + public static boolean dev = PlatformUtil.isDevelopmentEnvironment(); + + public static void print(Item item) { + if (!dev) return; + System.out.println(getString(item)); + } + + public static void print(ItemStack stack) { + if (!dev) return; + System.out.println(getString(stack)); + } + + public static void print(Inventory inventory) { + if (!dev) return; + System.out.println(getString(inventory)); + } + + public static String getString(Item item) { + StringBuilder sb = new StringBuilder(); + sb.append("Item: {").append("\n"); + + sb.append(" Name: ").append(item.getTranslationKey()).append("\n"); + sb.append(" Id: ").append(ItemUtil.toCompatID(item)).append("\n"); + sb.append("}\n"); + + return sb.toString(); + } + + public static String getString(ItemStack stack) { + Item item = stack.getItem(); + + StringBuilder sb = new StringBuilder(); + sb.append("ItemStack: {").append("\n"); + + sb.append(getString(item)); + sb.append(" Count: ").append(stack.getCount()).append("\n"); + sb.append("}\n"); + + return sb.toString(); + } + + public static String getString(Inventory inventory) { + StringBuilder sb = new StringBuilder(); + sb.append("Inventory: {").append("\n"); + + for (int i = 0; i < inventory.size(); i++) { + ItemStack stack = inventory.getStack(i); + if (stack.isEmpty()) continue; + + sb.append(" Slot ").append(i).append(": {").append("\n"); + sb.append(getString(stack)); + sb.append(" }\n"); + } + + sb.append("}\n"); + + return sb.toString(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BlockRotations.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BlockRotations.java new file mode 100644 index 000000000..6f19c06bd --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BlockRotations.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.util.math; + +import net.minecraft.util.BlockRotation; +import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; + +public class BlockRotations { + public static BlockRotation NONE = BlockRotation.NONE; + public static BlockRotation CLOCKWISE_90 = BlockRotation.CLOCKWISE_90; + public static BlockRotation CLOCKWISE_180 = BlockRotation.CLOCKWISE_180; + public static BlockRotation COUNTERCLOCKWISE_90 = BlockRotation.COUNTERCLOCKWISE_90; + + public static BlockRotation rotate(BlockRotation rotation, BlockRotation rotation2) { + return rotation.rotate(rotation2); + } + + public static BlockRotation random(CompatRandom random) { + return BlockRotation.random(random.getMcRandom()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiRegistry.java new file mode 100644 index 000000000..9f789468e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiRegistry.java @@ -0,0 +1,42 @@ +package net.pitan76.mcpitanlib.guilib; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; +import net.pitan76.mcpitanlib.api.client.registry.CompatRegistryClient; +import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandlerTypeBuilder; +import net.pitan76.mcpitanlib.api.registry.result.SupplierResult; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.guilib.api.container.SimpleContainerGui; +import net.pitan76.mcpitanlib.guilib.api.screen.SimpleContainerGuiScreen; + +import java.util.function.Supplier; + +public class GuiRegistry { + public static SupplierResult> register(CompatRegistryV2 registry, CompatIdentifier id, SimpleScreenHandlerTypeBuilder.Factory factory) { + return register(registry, id, new SimpleScreenHandlerTypeBuilder<>(factory)); + } + + public static Supplier> register(CompatRegistryV2 registry, CompatIdentifier id, ScreenHandlerType type) { + return registry.registerScreenHandlerTypeSavingGenerics(id, () -> type); + } + + @Environment(EnvType.CLIENT) + public static > void register(String id, ScreenHandlerType type, CompatRegistryClient.ScreenFactory factory) { + CompatRegistryClient.registerScreen(id, type, factory); + } + + @Environment(EnvType.CLIENT) + public static void registerSimpleContainerGui(String id, ScreenHandlerType type) { + CompatRegistryClient.registerScreen(id, type, SimpleContainerGuiScreen::new); + } + + public static SupplierResult> register(CompatRegistryV2 registry, CompatIdentifier id, SimpleScreenHandlerTypeBuilder builder) { + return registry.registerScreenHandlerType(id, builder); + + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiTextures.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiTextures.java new file mode 100644 index 000000000..fad6d9331 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiTextures.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.guilib; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class GuiTextures { + public static CompatIdentifier GUI_PARTS = CompatIdentifier.of("mplguilib", "textures/container/gui_parts.png"); + public static CompatIdentifier BASE_FURNACE_BACKGROUND = CompatIdentifier.of("mplguilib", "textures/container/base_furnace.png"); + public static CompatIdentifier BASE_BACKGROUND = CompatIdentifier.of("mplguilib", "textures/container/base.png"); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/MGLClientNetworks.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MGLClientNetworks.java new file mode 100644 index 000000000..6ab10f069 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MGLClientNetworks.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.guilib; + +import net.pitan76.mcpitanlib.api.network.v2.ClientNetworking; +import net.pitan76.mcpitanlib.guilib.api.container.ExtendedBlockEntityContainerGui; + +import static net.pitan76.mcpitanlib.guilib.api.NetworkDefines.SYNC_GUI_WITH_TILE; + +public class MGLClientNetworks { + public static void init() { + ClientNetworking.registerReceiver(SYNC_GUI_WITH_TILE, (e) -> { + if (e.player.getCurrentScreenHandler() instanceof ExtendedBlockEntityContainerGui) { + ExtendedBlockEntityContainerGui gui = (ExtendedBlockEntityContainerGui) e.player.getCurrentScreenHandler(); + gui.receiveSync(e.buf); + } + }); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java new file mode 100644 index 000000000..5d6cd8b18 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java @@ -0,0 +1,40 @@ +package net.pitan76.mcpitanlib.guilib; + +import net.pitan76.mcpitanlib.api.CommonModInitializer; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class MPLGuiLib extends CommonModInitializer { + public static final String MOD_ID = "mplguilib"; + public static final String MOD_NAME = "MPL GuiLib"; + + public static MPLGuiLib INSTANCE; + public static CompatRegistryV2 registry; + + @Override + public void init() { + INSTANCE = this; + registry = super.registry; + + MGLClientNetworks.init(); + } + + // ---- + /** + * @param path The path of the id + * @return The id + */ + public static CompatIdentifier _id(String path) { + return CompatIdentifier.of(MOD_ID, path); + } + + @Override + public String getId() { + return MOD_ID; + } + + @Override + public String getName() { + return MOD_NAME; + } +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/IScreenInfo.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/IScreenInfo.java new file mode 100644 index 000000000..2e002e555 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/IScreenInfo.java @@ -0,0 +1,38 @@ +package net.pitan76.mcpitanlib.guilib.api; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.guilib.GuiTextures; + +public interface IScreenInfo { + default int getScreenBackgroundWidth() { + return getScreenWidth(); + } + + default int getScreenBackgroundHeight() { + return getScreenHeight(); + } + + int getScreenWidth(); + + int getScreenHeight(); + + default int getScreenX() { + return -1; + } + + default int getScreenY() { + return -1; + } + + default int getScreenTitleX() { + return -1; + } + + default int getScreenTitleY() { + return -1; + } + + default CompatIdentifier getTexture() { + return GuiTextures.BASE_BACKGROUND; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/ISimpleScreenInfo.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/ISimpleScreenInfo.java new file mode 100644 index 000000000..8ff931938 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/ISimpleScreenInfo.java @@ -0,0 +1,14 @@ +package net.pitan76.mcpitanlib.guilib.api; + +public interface ISimpleScreenInfo extends IScreenInfo { + + @Override + default int getScreenWidth() { + return 176; + } + + @Override + default int getScreenHeight() { + return 166; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/NetworkDefines.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/NetworkDefines.java new file mode 100644 index 000000000..c0631c9ec --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/NetworkDefines.java @@ -0,0 +1,8 @@ +package net.pitan76.mcpitanlib.guilib.api; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.guilib.MPLGuiLib; + +public class NetworkDefines { + public static CompatIdentifier SYNC_GUI_WITH_TILE = MPLGuiLib._id("sync_gui_with_tile"); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/block/entity/BlockEntityWithContainer.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/block/entity/BlockEntityWithContainer.java new file mode 100644 index 000000000..f6e88a29e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/block/entity/BlockEntityWithContainer.java @@ -0,0 +1,40 @@ +package net.pitan76.mcpitanlib.guilib.api.block.entity; + +import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.gui.inventory.IInventory; +import net.pitan76.mcpitanlib.api.gui.inventory.sided.ChestStyleSidedInventory; +import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; +import net.pitan76.mcpitanlib.api.util.InventoryUtil; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; +import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; + +public abstract class BlockEntityWithContainer extends CompatBlockEntity implements IInventory, ChestStyleSidedInventory { + + private final ItemStackList inventory = ItemStackList.ofSize(getDefaultInvSize(), ItemStackUtil.empty()); + + public BlockEntityWithContainer(BlockEntityType type, TileCreateEvent e) { + super(type, e); + } + + public abstract int getDefaultInvSize(); + + @Override + public void writeNbt(WriteNbtArgs args) { + super.writeNbt(args); + InventoryUtil.writeNbt(args, inventory); + } + + @Override + public void readNbt(ReadNbtArgs args) { + super.readNbt(args); + InventoryUtil.readNbt(args, inventory); + } + + @Override + public ItemStackList getItems() { + return inventory; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/block/entity/ExtendedBlockEntityWithContainer.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/block/entity/ExtendedBlockEntityWithContainer.java new file mode 100644 index 000000000..dfa884739 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/block/entity/ExtendedBlockEntityWithContainer.java @@ -0,0 +1,59 @@ +package net.pitan76.mcpitanlib.guilib.api.block.entity; + +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; +import net.pitan76.mcpitanlib.api.event.container.factory.ExtraDataArgs; +import net.pitan76.mcpitanlib.api.event.tile.TileTickEvent; +import net.pitan76.mcpitanlib.api.gui.v2.ExtendedScreenHandlerFactory; +import net.pitan76.mcpitanlib.api.network.PacketByteUtil; +import net.pitan76.mcpitanlib.api.network.v2.ServerNetworking; +import net.pitan76.mcpitanlib.api.tile.ExtendBlockEntityTicker; +import net.pitan76.mcpitanlib.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.guilib.api.container.ExtendedBlockEntityContainerGui; + +import java.util.List; +import java.util.Objects; + +import static net.pitan76.mcpitanlib.guilib.api.NetworkDefines.SYNC_GUI_WITH_TILE; + +public abstract class ExtendedBlockEntityWithContainer extends BlockEntityWithContainer implements ExtendedScreenHandlerFactory, ExtendBlockEntityTicker { + + public ExtendedBlockEntityWithContainer(BlockEntityType type, TileCreateEvent e) { + super(type, e); + } + + @Override + public void tick(TileTickEvent e) { + if (isClient()) return; + + List players = WorldUtil.getPlayers(Objects.requireNonNull(getWorld())); + for (Player player : players) { + if (player.hasNetworkHandler() && player.getCurrentScreenHandler() instanceof ExtendedBlockEntityContainerGui && ((ExtendedBlockEntityContainerGui) player.getCurrentScreenHandler()).blockEntity == this ) { + PacketByteBuf buf = PacketByteUtil.create(); + sync(player, buf); + ServerNetworking.send(player, SYNC_GUI_WITH_TILE, buf); + } + } + } + + @Override + public Text getDisplayName(DisplayNameArgs args) { + if (getCachedState() == null) + return TextUtil.of("unknown"); + + return getCachedState().getBlock().getName(); + } + + @Override + public void writeExtraData(ExtraDataArgs args) { + PacketByteUtil.writeBlockPos(args.buf, getPos()); + sync(args.getCompatPlayer(), args.buf); + } + + public abstract void sync(Player player, PacketByteBuf buf); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/BlockEntityContainerGui.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/BlockEntityContainerGui.java new file mode 100644 index 000000000..54445322c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/BlockEntityContainerGui.java @@ -0,0 +1,11 @@ +package net.pitan76.mcpitanlib.guilib.api.container; + +import net.minecraft.screen.ScreenHandlerType; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.guilib.api.ISimpleScreenInfo; + +public abstract class BlockEntityContainerGui extends ContainerGui implements ISimpleScreenInfo { + protected BlockEntityContainerGui(ScreenHandlerType type, CreateMenuEvent e) { + super(type, e); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/ContainerGui.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/ContainerGui.java new file mode 100644 index 000000000..04dcc52b3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/ContainerGui.java @@ -0,0 +1,66 @@ +package net.pitan76.mcpitanlib.guilib.api.container; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.Inventory; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.screen.slot.Slot; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandler; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.guilib.api.IScreenInfo; + +import java.util.ArrayList; +import java.util.List; + +public abstract class ContainerGui extends SimpleScreenHandler implements IScreenInfo { + + private final List INVENTORIES = new ArrayList<>(); + + protected ContainerGui(ScreenHandlerType type, int syncId) { + super(type, syncId); + } + + protected ContainerGui(ScreenHandlerType type, CreateMenuEvent e) { + super(type, e); + } + + @Override + public boolean canUse(Player player) { + return true; + } + + @Override + protected Slot addSlot(Slot slot) { + if (slot.inventory instanceof Inventory && !INVENTORIES.contains(slot.inventory)) + INVENTORIES.add(slot.inventory); + + return super.addSlot(slot); + } + + public int playerMainInventoryX = 8; + public int playerMainInventoryY = 84; + + public int playerHotbarX = 8; + public int playerHotbarY = 142; + + @Override + protected List addPlayerMainInventorySlots(PlayerInventory inventory, int x, int y) { + playerMainInventoryX = x; + playerMainInventoryY = y; + + return super.addPlayerMainInventorySlots(inventory, x, y); + } + + @Override + protected List addPlayerHotbarSlots(PlayerInventory inventory, int x, int y) { + playerHotbarX = x; + playerHotbarY = y; + + return super.addPlayerHotbarSlots(inventory, x, y); + } + + @Override + public void close(Player player) { + INVENTORIES.forEach((inv -> inv.onClose(player.getEntity()))); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/ExtendedBlockEntityContainerGui.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/ExtendedBlockEntityContainerGui.java new file mode 100644 index 000000000..496c046c6 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/ExtendedBlockEntityContainerGui.java @@ -0,0 +1,39 @@ +package net.pitan76.mcpitanlib.guilib.api.container; + +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; +import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.guilib.api.ISimpleScreenInfo; + +public abstract class ExtendedBlockEntityContainerGui extends BlockEntityContainerGui implements ISimpleScreenInfo { + + public T blockEntity; + + public ExtendedBlockEntityContainerGui(ScreenHandlerType type, CreateMenuEvent e, PacketByteBuf buf) { + this(type, e); + + if (buf == null) return; + + Player player = e.getPlayer(); + World world = player.getWorld(); + BlockPos pos = buf.readBlockPos(); + + BlockEntity blockEntity = WorldUtil.getBlockEntity(world, pos); + if (blockEntity instanceof CompatBlockEntity) + this.blockEntity = (T) blockEntity; + + receiveSync(buf); + } + + protected ExtendedBlockEntityContainerGui(ScreenHandlerType type, CreateMenuEvent e) { + super(type, e); + } + + public abstract void receiveSync(PacketByteBuf buf); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/SimpleContainerGui.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/SimpleContainerGui.java new file mode 100644 index 000000000..46e5fb903 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/container/SimpleContainerGui.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.guilib.api.container; + +import net.minecraft.screen.ScreenHandlerType; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.guilib.api.ISimpleScreenInfo; + +public abstract class SimpleContainerGui extends ContainerGui implements ISimpleScreenInfo { + + protected SimpleContainerGui(ScreenHandlerType type, int syncId) { + super(type, syncId); + } + + protected SimpleContainerGui(ScreenHandlerType type, CreateMenuEvent e) { + super(type, e); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/SlotRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/SlotRenderer.java new file mode 100644 index 000000000..0c23c9e94 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/SlotRenderer.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.guilib.api.render; + +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; +import net.pitan76.mcpitanlib.api.util.client.ScreenUtil.RendererUtil; +import net.pitan76.mcpitanlib.guilib.GuiTextures; + +public class SlotRenderer { + + public static void drawSlot(DrawObjectDM drawObjectDM, Slot slot, int x, int y) { + RendererUtil.drawTexture(drawObjectDM, GuiTextures.GUI_PARTS, x + slot.x - 1, y + slot.y - 1, 0, 0, 18, 18); + } + + public static void drawSlots(DrawObjectDM drawObjectDM, ScreenHandler handler, int x, int y) { + ScreenHandlerUtil.getSlots(handler).forEach((slot) -> drawSlot(drawObjectDM, slot, x, y)); + } + + public static void drawPlayerMainInventorySlots(DrawObjectDM drawObjectDM, ScreenHandler handler, int x, int y) { + RendererUtil.drawTexture(drawObjectDM, GuiTextures.GUI_PARTS, x, y, 0, 32, 162, 54); + } + + public static void drawPlayerHotbarSlots(DrawObjectDM drawObjectDM, ScreenHandler handler, int x, int y) { + RendererUtil.drawTexture(drawObjectDM, GuiTextures.GUI_PARTS, x, y, 0, 90, 162, 18); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/screen/ContainerGuiScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/screen/ContainerGuiScreen.java new file mode 100644 index 000000000..70b6158eb --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/screen/ContainerGuiScreen.java @@ -0,0 +1,86 @@ +package net.pitan76.mcpitanlib.guilib.api.screen; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.client.gui.screen.CompatInventoryScreen; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawBackgroundArgs; +import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawForegroundArgs; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; +import net.pitan76.mcpitanlib.guilib.GuiTextures; +import net.pitan76.mcpitanlib.guilib.api.container.ContainerGui; +import net.pitan76.mcpitanlib.guilib.api.render.SlotRenderer; + +public class ContainerGuiScreen extends CompatInventoryScreen { + public ContainerGuiScreen(T handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + setBackgroundWidth(handler.getScreenBackgroundWidth()); + setBackgroundHeight(handler.getScreenBackgroundHeight()); + + if (handler.getScreenX() != -1) + setX(handler.getScreenX()); + if (handler.getScreenY() != -1) + setY(handler.getScreenY()); + + if (handler.getScreenTitleX() != -1) + setTitleX(handler.getScreenTitleX()); + if (handler.getScreenTitleY() != -1) + setTitleY(handler.getScreenTitleY()); + } + + @Override + public void initOverride() { + super.initOverride(); + } + + @Override + public void drawBackgroundOverride(DrawBackgroundArgs args) { + super.drawBackgroundOverride(args); + + if (handler.hasMainInventory && !containPlayerInventoryInBackground()) + drawPlayerMainInventorySlots(args.drawObjectDM); + + if (handler.hasHotbar && !containPlayerInventoryInBackground()) + drawPlayerHotbarSlots(args.drawObjectDM); + + drawSlots(args.drawObjectDM); + } + + @Override + protected void drawForegroundOverride(DrawForegroundArgs args) { + if (!handler.hasMainInventory && !containPlayerInventoryInBackground()) { + drawText(args.drawObjectDM, title, titleX, titleY); + return; + } + + super.drawForegroundOverride(args); + } + + @Override + public CompatIdentifier getCompatTexture() { + return handler.getTexture(); + } + + public void drawPlayerMainInventorySlots(DrawObjectDM drawObjectDM) { + SlotRenderer.drawPlayerMainInventorySlots(drawObjectDM, handler, x + handler.playerMainInventoryX - 1, y + handler.playerMainInventoryY - 1); + } + + public void drawPlayerHotbarSlots(DrawObjectDM drawObjectDM) { + SlotRenderer.drawPlayerHotbarSlots(drawObjectDM, handler, x + handler.playerHotbarX - 1, y + handler.playerHotbarY - 1); + } + + public boolean containPlayerInventoryInBackground() { + return getCompatTexture() == GuiTextures.BASE_FURNACE_BACKGROUND; + } + + @Override + public void drawSlots(DrawObjectDM drawObjectDM) { + ScreenHandlerUtil.getSlots(handler).forEach((slot) -> { + if (slot.inventory instanceof PlayerInventory || containPlayerInventoryInBackground()) + return; + + SlotRenderer.drawSlot(drawObjectDM, slot, x, y); + }); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/screen/SimpleContainerGuiScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/screen/SimpleContainerGuiScreen.java new file mode 100644 index 000000000..3ac5ebed4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/screen/SimpleContainerGuiScreen.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.guilib.api.screen; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.guilib.api.container.SimpleContainerGui; + +public class SimpleContainerGuiScreen extends ContainerGuiScreen { + public SimpleContainerGuiScreen(SimpleContainerGui handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + @Override + public void initOverride() { + super.initOverride(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/test/TestContainer.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/test/TestContainer.java new file mode 100644 index 000000000..f1ce318d4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/test/TestContainer.java @@ -0,0 +1,55 @@ +package net.pitan76.mcpitanlib.guilib.test; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerType; +import net.pitan76.mcpitanlib.guilib.api.container.ContainerGui; + +public class TestContainer extends ContainerGui { + public TestContainer(ScreenHandlerType type, int syncId) { + super(type, syncId); + } + + public TestContainer(int i, PlayerInventory inventory) { + this(null, i); + } + + @Override + public int getScreenBackgroundWidth() { + return 176; + } + + @Override + public int getScreenBackgroundHeight() { + return 166; + } + + @Override + public int getScreenWidth() { + return 176; + } + + @Override + public int getScreenHeight() { + return 166; + } + + @Override + public int getScreenX() { + return 0; + } + + @Override + public int getScreenY() { + return 0; + } + + @Override + public int getScreenTitleX() { + return 0; + } + + @Override + public int getScreenTitleY() { + return 0; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java index 3d2bb8fe8..9990142e2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java @@ -105,4 +105,9 @@ public ItemStack build() { return new ItemStack(stack); } } + + @Override + public String toString() { + return stack.toString(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java index 62951d417..568fa9c5d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleCommand.java @@ -19,7 +19,7 @@ public void init(CommandSettings settings) { @Override public void execute(IntegerCommandEvent event) { try { - event.getPlayer().offerOrDrop(new ItemStack(ExampleMod.EXAMPLE_ITEM_SUPPLIER.getOrNull(), event.getValue())); + event.getPlayer().offerOrDrop(new ItemStack(ExampleMod.EXAMPLE_ITEM.getOrNull(), event.getValue())); } catch (CommandSyntaxException ignored) { } @@ -35,7 +35,7 @@ public String getArgumentName() { @Override public void execute(ServerCommandEvent event) { try { - event.getPlayer().offerOrDrop(new ItemStack(ExampleMod.EXAMPLE_ITEM_SUPPLIER.getOrNull())); + event.getPlayer().offerOrDrop(new ItemStack(ExampleMod.EXAMPLE_ITEM.getOrNull())); } catch (CommandSyntaxException ignored) { } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleContainerGui.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleContainerGui.java new file mode 100644 index 000000000..ab182e28c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleContainerGui.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.test; + +import net.minecraft.inventory.Inventory; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.api.util.InventoryUtil; +import net.pitan76.mcpitanlib.api.util.debug.OutputUtil; +import net.pitan76.mcpitanlib.guilib.api.container.SimpleContainerGui; + +public class ExampleContainerGui extends SimpleContainerGui { + + public static Inventory EXAMPLE_INVENTORY = InventoryUtil.createSimpleInventory(1); + + public ExampleContainerGui(CreateMenuEvent e) { + super(ExampleMod.EXAMPLE_CONTAINER_GUI.get(), e); + addPlayerMainInventorySlots(e.playerInventory, 8, 84); + addPlayerHotbarSlots(e.playerInventory, 8, 142); + + addNormalSlot(EXAMPLE_INVENTORY, 0, 24, 24); + } + + @Override + public void close(Player player) { + OutputUtil.print(EXAMPLE_INVENTORY); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleContainerGuiScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleContainerGuiScreen.java new file mode 100644 index 000000000..3e6d42413 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleContainerGuiScreen.java @@ -0,0 +1,30 @@ +package net.pitan76.mcpitanlib.test; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.client.gui.screen.CompatInventoryScreen; +import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class ExampleContainerGuiScreen extends CompatInventoryScreen { + + public static CompatIdentifier GUI = CompatIdentifier.of("textures/gui/container/blast_furnace.png"); + + public ExampleContainerGuiScreen(ExampleScreenHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + @Override + public CompatIdentifier getCompatTexture() { + return GUI; + } + + @Override + public void initOverride() { + super.initOverride(); + System.out.println("hogehogehoge1111"); + this.addDrawableCTBW(new CompatibleTexturedButtonWidget(0, 0, 30, 30, 0, 0, GUI, (buttonWidget) -> { + System.out.println("hogehoge"); + })); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java index f2a5ef3e1..7822463ea 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java @@ -1,16 +1,15 @@ package net.pitan76.mcpitanlib.test; -import net.minecraft.block.BlockState; -import net.minecraft.screen.NamedScreenHandlerFactory; -import net.minecraft.screen.SimpleNamedScreenHandlerFactory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; import net.minecraft.util.ActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; -import net.pitan76.mcpitanlib.api.util.TextUtil; +import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.api.gui.v2.SimpleScreenHandlerFactory; -public class ExampleGuiBlock extends ExtendBlock { +public class ExampleGuiBlock extends ExtendBlock implements SimpleScreenHandlerFactory { public ExampleGuiBlock(Settings settings) { super(settings); @@ -18,14 +17,19 @@ public ExampleGuiBlock(Settings settings) { @Override public ActionResult onRightClick(BlockUseEvent e) { - if (e.world.isClient) { - e.player.openGuiScreen(e.world, e.state, e.pos); - } - return ActionResult.SUCCESS; + if (e.isClient()) + e.player.openGuiScreen(this); + + return e.success(); + } + + @Override + public Text getDisplayName(DisplayNameArgs args) { + return getName(); } @Override - public NamedScreenHandlerFactory createScreenHandlerFactory(BlockState state, World world, BlockPos pos) { - return new SimpleNamedScreenHandlerFactory((i, playerInventory, playerEntity) -> new ExampleScreenHandler(i, playerInventory), TextUtil.literal("Example Title")); + public ScreenHandler createMenu(CreateMenuEvent e) { + return new ExampleScreenHandler(e); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java index 12650ad2c..1db7fbac3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java @@ -1,29 +1,38 @@ package net.pitan76.mcpitanlib.test; import net.minecraft.item.ItemStack; -import net.minecraft.screen.NamedScreenHandlerFactory; -import net.minecraft.screen.SimpleNamedScreenHandlerFactory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; import net.minecraft.util.TypedActionResult; +import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.api.gui.v2.SimpleScreenHandlerFactory; import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.pitan76.mcpitanlib.api.util.TextUtil; -public class ExampleGuiItem extends ExtendItem { +public class ExampleGuiItem extends ExtendItem implements SimpleScreenHandlerFactory { public ExampleGuiItem(CompatibleItemSettings settings) { super(settings); } @Override - public TypedActionResult onRightClick(ItemUseEvent event) { - if (!event.world.isClient()) { - event.user.openGuiScreen(getFactory()); - } - return super.onRightClick(event); + public TypedActionResult onRightClick(ItemUseEvent e) { + if (!e.isClient()) + e.user.openGuiScreen(this); + + return e.success(); } - public static NamedScreenHandlerFactory getFactory() { - return new SimpleNamedScreenHandlerFactory((i, playerInventory, playerEntity) -> new ExampleScreenHandler(i, playerInventory), TextUtil.literal("Example Title")); + @Override + public Text getDisplayName(DisplayNameArgs args) { + return TextUtil.literal("Example Title"); + } + + @Override + public ScreenHandler createMenu(CreateMenuEvent e) { + return new ExampleScreenHandler(e); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java index 2d054e9d4..92ff67617 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java @@ -3,7 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.CommonModInitializer; import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; import net.pitan76.mcpitanlib.api.block.ExtendBlock; @@ -12,49 +12,70 @@ import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.DefaultItemGroups; import net.pitan76.mcpitanlib.api.item.ExtendItem; -import net.pitan76.mcpitanlib.api.registry.CompatRegistry; +import net.pitan76.mcpitanlib.api.simple.item.SimpleGuiItem; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.api.registry.result.SupplierResult; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.ItemUtil; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import net.pitan76.mcpitanlib.guilib.GuiRegistry; -public class ExampleMod { +public class ExampleMod extends CommonModInitializer { public static final String MOD_ID = "examplemod"; public static final String MOD_NAME = "ExampleMod"; - public static Logger LOGGER = LogManager.getLogger(); - public static void log(Level level, String message){ - LOGGER.log(level, "[" + MOD_NAME + "] " + message); - } + public static ExampleMod INSTANCE; + public static CompatRegistryV2 registry; - public static Identifier id(String id) { - return new Identifier(MOD_ID, id); - } + public static SupplierResult> EXAMPLE_SCREENHANDLER; + public static SupplierResult> EXAMPLE_CONTAINER_GUI; - public static CompatRegistry registry = CompatRegistry.createRegistry(MOD_ID); + public static RegistryResult EXAMPLE_ITEM; + public static RegistryResult EXAMPLE_BLOCK; + public static RegistryResult EXAMPLE_BLOCK_ITEM; + public static RegistryResult EXAMPLE_GUI_ITEM; + public static RegistryResult EXAMPLE_CONTAINER_GUI_ITEM; + public static RegistryResult EXAMPLE_GUI_BLOCK; + public static RegistryResult EXAMPLE_GUI_BLOCK_ITEM; - public static RegistryResult> supplierEXAMPLE_SCREENHANDLER = registry.registerScreenHandlerType(id("example_gui"), () -> new SimpleScreenHandlerTypeBuilder<>(ExampleScreenHandler::new).build()); + public void init() { + INSTANCE = this; + registry = super.registry; - public static RegistryResult EXAMPLE_ITEM_SUPPLIER; - public static RegistryResult EXAMPLE_BLOCK_SUPPLIER; - public static RegistryResult EXAMPLE_BLOCK_ITEM_SUPPLIER; - public static RegistryResult EXAMPLE_GUI_ITEM_SUPPLIER; - public static RegistryResult EXAMPLE_GUI_BLOCK_SUPPLIER; - public static RegistryResult EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER; + // en: Register all items, blocks and others. , ja: 全てのアイテム、ブロック、その他を登録します。 + EXAMPLE_SCREENHANDLER = registry.registerScreenHandlerType(compatId("example_gui"), new SimpleScreenHandlerTypeBuilder<>(ExampleScreenHandler::new)); + EXAMPLE_CONTAINER_GUI = GuiRegistry.register(registry, compatId("example_container_gui"), new SimpleScreenHandlerTypeBuilder<>(ExampleContainerGui::new)); - public static void init() { - EXAMPLE_ITEM_SUPPLIER = registry.registerItem(id("example_item"), () -> new ExtendItem(new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_item")))); - EXAMPLE_BLOCK_SUPPLIER = registry.registerBlock(id("example_block"), () -> new ExtendBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE))); - EXAMPLE_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_block"), () -> ItemUtil.ofBlock(EXAMPLE_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_block")))); + EXAMPLE_ITEM = registry.registerItem(compatId("example_item"), () -> new ExtendItem(new CompatibleItemSettings().addGroup(DefaultItemGroups.INGREDIENTS, compatId("example_item")))); + EXAMPLE_BLOCK = registry.registerBlock(compatId("example_block"), () -> new ExtendBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE))); + EXAMPLE_BLOCK_ITEM = registry.registerItem(compatId("example_block"), () -> ItemUtil.ofBlock(EXAMPLE_BLOCK.supplier.get(), new CompatibleItemSettings().addGroup(DefaultItemGroups.INGREDIENTS, compatId("example_block")))); - EXAMPLE_GUI_ITEM_SUPPLIER = registry.registerItem(id("example_gui_item"), () -> new ExampleGuiItem(new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_item")))); + EXAMPLE_GUI_ITEM = registry.registerItem(compatId("example_gui_item"), () -> new ExampleGuiItem(new CompatibleItemSettings().addGroup(DefaultItemGroups.INGREDIENTS, compatId("example_gui_item")))); - EXAMPLE_GUI_BLOCK_SUPPLIER = registry.registerBlock(id("example_gui_block"), () -> new ExampleGuiBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE).build())); - EXAMPLE_GUI_BLOCK_ITEM_SUPPLIER = registry.registerItem(id("example_gui_block"), () -> ItemUtil.ofBlock(EXAMPLE_GUI_BLOCK_SUPPLIER.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, id("example_gui_block")))); + EXAMPLE_GUI_BLOCK = registry.registerBlock(compatId("example_gui_block"), () -> new ExampleGuiBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE).build())); + EXAMPLE_GUI_BLOCK_ITEM = registry.registerItem(compatId("example_gui_block"), () -> ItemUtil.ofBlock(EXAMPLE_GUI_BLOCK.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, compatId("example_gui_block")))); - registry.allRegister(); + EXAMPLE_CONTAINER_GUI_ITEM = registry.registerItem(compatId("example_container_gui_item"), + () -> new SimpleGuiItem(CompatibleItemSettings.of() + .addGroup(DefaultItemGroups.INGREDIENTS, compatId("example_container_gui_item")), + ExampleContainerGui::new) + ); + // en: Register the command , ja: コマンドを登録します CommandRegistry.register("mpla", new ExampleCommand()); } + + public static CompatIdentifier _id(String id) { + return CompatIdentifier.of(MOD_ID, id); + } + + @Override + public String getId() { + return MOD_ID; + } + + @Override + public String getName() { + return MOD_NAME; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java index 1f3f31261..aa3b041be 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleModClient.java @@ -1,9 +1,12 @@ package net.pitan76.mcpitanlib.test; -import net.pitan76.mcpitanlib.api.client.registry.ArchRegistryClient; +import net.pitan76.mcpitanlib.api.client.registry.CompatRegistryClient; +import net.pitan76.mcpitanlib.guilib.GuiRegistry; public class ExampleModClient { public static void init() { - ArchRegistryClient.registerScreen(ExampleMod.supplierEXAMPLE_SCREENHANDLER.getOrNull(), ExampleScreen::new); + CompatRegistryClient.registerScreen(ExampleMod.MOD_ID, ExampleMod.EXAMPLE_SCREENHANDLER.get(), ExampleScreen::new); + + GuiRegistry.registerSimpleContainerGui(ExampleMod.MOD_ID, ExampleMod.EXAMPLE_CONTAINER_GUI.get()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java index 45e7a0295..17bd18c72 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreen.java @@ -1,23 +1,24 @@ package net.pitan76.mcpitanlib.test; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -import net.pitan76.mcpitanlib.api.client.SimpleHandledScreen; +import net.pitan76.mcpitanlib.api.client.gui.screen.CompatInventoryScreen; import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; -import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawBackgroundArgs; -import net.pitan76.mcpitanlib.api.client.render.handledscreen.DrawMouseoverTooltipArgs; -import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; -public class ExampleScreen extends SimpleHandledScreen { +public class ExampleScreen extends CompatInventoryScreen { - public static Identifier GUI = new Identifier("textures/gui/container/blast_furnace.png"); + public static CompatIdentifier GUI = CompatIdentifier.of("textures/gui/container/blast_furnace.png"); - public ExampleScreen(ScreenHandler handler, PlayerInventory inventory, Text title) { + public ExampleScreen(ExampleScreenHandler handler, PlayerInventory inventory, Text title) { super(handler, inventory, title); } + @Override + public CompatIdentifier getCompatTexture() { + return GUI; + } + @Override public void initOverride() { super.initOverride(); @@ -26,16 +27,4 @@ public void initOverride() { System.out.println("hogehoge"); })); } - - @Override - public void drawBackgroundOverride(DrawBackgroundArgs args) { - callDrawTexture(args.drawObjectDM, GUI, x, y, 0, 0, this.backgroundWidth, this.backgroundHeight); - } - - @Override - public void renderOverride(RenderArgs args) { - this.callRenderBackground(args); - super.renderOverride(args); - this.callDrawMouseoverTooltip(new DrawMouseoverTooltipArgs(args.drawObjectDM, args.mouseX, args.mouseY)); - } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java index 90d2e6e45..ff99d6ae9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleScreenHandler.java @@ -1,14 +1,14 @@ package net.pitan76.mcpitanlib.test; -import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandler; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; public class ExampleScreenHandler extends SimpleScreenHandler { - public ExampleScreenHandler(int i, PlayerInventory playerInventory) { - super(ExampleMod.supplierEXAMPLE_SCREENHANDLER.getOrNull(), i); + public ExampleScreenHandler(CreateMenuEvent e) { + super(ExampleMod.EXAMPLE_SCREENHANDLER.get(), e); } diff --git a/common/src/main/resources/assets/mplguilib/textures/container/base.png b/common/src/main/resources/assets/mplguilib/textures/container/base.png new file mode 100644 index 0000000000000000000000000000000000000000..e5fca7df1dcdcaf7beb026735c99d427a7987853 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%U;1OBOz`%C|gc+x5^GP!> zFkSI#jVhAMCfcojr4A z-+N=d#{Zvw{6752`Sj!0@eSpw3<7GSXt;&Iom1O#!}~vk)tx;Pl|A=(VMR>G&m9cc zKL6ZPBJiWH_I`TWwX4NPBj_rAkj9gqc{u6{1- HoD!M<`Rb86 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/mplguilib/textures/container/base_furnace.png b/common/src/main/resources/assets/mplguilib/textures/container/base_furnace.png new file mode 100644 index 0000000000000000000000000000000000000000..20a8bd98b0ce4d77ab5f07d0e246e8145127f82f GIT binary patch literal 1637 zcmds1dr;C@6u$hFQZ}&0bu3fawq4sEDm@G<3tyYsini4+vruTa%pR*?Nk)pIV=rGj z%aE>*Y_{2KXh4lsQ$%Q3A;!r-OJxbAp%O&t;e$|w#hq#PZ}-nVGk4BC_sspych7g{ zT;HD%gGTwF008K?*ysZQAe>tSa9iSZq^x^sPUlXIO+F6*=Ff$N;B3UK24IPITy(^t zoZ1O3A3z7<=@c0;z;{itww)4iX#J)- z)}dbHmUh+wLq*_^Jr6pCzf9)c+VJ5LEC#rC6ejV5)g~(Nb3bcffL_n*%AwLg?{DLiD&n@ z?{mWV+}R90au>Af)M{CK$6BRI^*s#xVX;X>J6aI1aBh+}uibx{V~`??)cPQUBs_}j?=OPc$y&^&I$FMeG^%wM%``` zi^VEDbnzub*~(|S$X8$Trd|vn0Lf8?^d*&d(qXqV8@Xq+1TvgWr_)W1dDS9}veWvL zL?94w>=N$NV{pG7abI(z-eoyrsPq!RU@%=Z*9LcInD8w(z=h0>hr!k_f%Yf^P2s>1 z{n4O9;8YN9p&f7H9YpIQ#ba;Wa|avoihba(HY!@zny3vTaCqQ$9{v{e;9~$ zTV+$06?;jD-cY4qX0^gYYfRGS^|ge=5t)Vo9$~5Sd3Puq+tD@^Bq3Ip7b-kzngvFO zruWs=Cu&0lRAXyO-sOCd?W1&Vc65}Sk@w;CXh?I`kVZ4v6H6(Yg<)Z4*MQ#Rtv7~b z$+0{cls$D=W@dc+JdUJ@xo4)*k2v!|z7Ngs4XP#%eht*LYMyIsm@ipZQg05vwTTbi zt8G6jg1hT@LKkJ3{X}wp>Iif0w7px=;ILje ziQBwuSXNhHI^rHaH!Fx^&W>Ac(8yOP!n3x@#L>js7Y+jXT4YVCn5k8m!XMPB+Z{Uj z#Sm^!o3+<8rEaj^5#?J zu+H^#aSW-L^Y-puKj};nwg<+7;sS-tIig)L4b7TCxhh;%mzVL!s`zi_z17C1GVAIy zp=}DXtU)WbefS}Dqib(t#`^=&HyY0R|M+;r_=%0bXn*@>-$irE_s!gB-{rU5xXbcu z)n1L$n<~zozh?N)S+25%+rCdT{CH64)y>D=mhC=jV=pggD8Z9dT>Lrk@rUB5P6_i9 zHoyMXO-cRvX8!#0KkYV;ez+~Z`03YvjjlkSR)-^xXMNQCZ5wv?Yei(7X)S~9hAYqd zJ65dHO4@1MCojdr<}1&{8=3iw;Z~Z3j9yL8;>C+^+`QTO`0?Y_0ypm5*;8s(_o8&} z8I~d=<{6uMp5+@GH`cH?c;C5NGktSY`?u&Xg&#f_aefe9u{$%C?@1!t1*Y$&AA+}E zKk1{u&UitIe{SjY$}ltL69-ityltQI{JE31H=pP1{B}u)?mOkmAKc$x_x=1_i6QF2 zO5g1()UN*d$u>vgexAlQVaBuLJPQ&- zLwm!%e}D8lf4}{X_h0Ht&&ZgWnO&;?uef_^+>y;YICqahX4O_(o z#f@j{o&R@zb5r;2%`L0~Ogk&ME^N5^cW=k!4hvnSM-Q@o|2k8 zxBsYnY_#CrveIM&e&dF=-sNA#3;#V|AAb8-`v2~eXA<6g`up|n=A|_@H^9NU#dGrf zJ^SnSnDe#9KdSkC_G;c^_a<@Ug&REP+to&$vM^cw(VJnu^Nx;=j(@j}+5*q!*jLt9 ze9d~iKkv@=Nk58be?2{2|NFJyKR!O*ob_pwi5x>}q}b;_K@+FHtNHD`W`2$I{Rh@_ z)*Ll2owmQ~jrq;8eSg&+{mtpMnjQN2`6HnPiPz_U+r8s!-2VT^udM#~`|@=`;2n{V=Z8<&h z$F8n}4-}+ zzu4N-68W9UcRfD`msri+`Tz3ws=YsceSLk0eX-v?tJFv{xeiIuxqj(aUVnY2b?N>0 z$9H#^FYL2AzxJ{A)3YB$7=(lwCd^=HIKsl9qQ;8C`;E=?GRqDi>2M-cL z*h{a>biZ6XVXA23l}uMzZ6?#hT@J6dEb0?&ob^zSIFpbpiM$=w7O0*+ciC?RZEdEN zm%FUOShCs>X4~R(5t2Cwe{9~imS?fwIV<1qj$y8$q5nQ+#%#a6Rl$Qfh6(1g8>gP1 zpZ{F%(y`FAtCf+Z8Ev7BSAl+6&18O9l^h?mhk|_oEFK3NP+0t*kzpgF%dxj#c7xpJ M>FVdQ&MBb@07kxbtN;K2 literal 0 HcmV?d00001 diff --git a/info.properties b/info.properties index 72bd01d2a..e480fd6cc 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.4.9 +mod_version=2.5.0 maven_group=net.pitan76 \ No newline at end of file From 00c8ba85422ce11944a75be18750f5df4686a20a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 6 Oct 2024 17:52:41 +0900 Subject: [PATCH 380/617] fix --- .../net/pitan76/mcpitanlib/api/util/math/BlockRotations.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BlockRotations.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BlockRotations.java index 6f19c06bd..a3d19eb36 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BlockRotations.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BlockRotations.java @@ -14,6 +14,6 @@ public static BlockRotation rotate(BlockRotation rotation, BlockRotation rotatio } public static BlockRotation random(CompatRandom random) { - return BlockRotation.random(random.getMcRandom()); + return BlockRotation.random(random.getJavaRandom()); } } From 71c34096cce798b1363301497236c18f74881444 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 9 Oct 2024 08:57:21 +0900 Subject: [PATCH 381/617] add APIs --- .../gui/ExtendedScreenHandlerTypeBuilder.java | 17 ++++- .../api/registry/v2/CompatRegistryV2.java | 12 ++++ .../mcpitanlib/guilib/GuiRegistry.java | 4 ++ .../mcpitanlib/guilib/MGLClientNetworks.java | 6 ++ .../pitan76/mcpitanlib/guilib/MPLGuiLib.java | 4 +- .../guilib/api/render/PartsRenderer.java | 72 +++++++++++++++++++ info.properties | 2 +- 7 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerTypeBuilder.java index 9c6a67e60..dd672f9a6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/ExtendedScreenHandlerTypeBuilder.java @@ -5,8 +5,9 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; +import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; -public class ExtendedScreenHandlerTypeBuilder { +public class ExtendedScreenHandlerTypeBuilder { private final Factory factory; @@ -14,6 +15,10 @@ public ExtendedScreenHandlerTypeBuilder(Factory factory) { this.factory = factory; } + public ExtendedScreenHandlerTypeBuilder(Factory2 factory) { + this.factory = factory; + } + public ScreenHandlerType build() { return MenuRegistry.ofExtended(factory::create); } @@ -22,4 +27,14 @@ public ScreenHandlerType build() { public interface Factory { T create(int syncId, PlayerInventory inventory, PacketByteBuf buf); } + + @FunctionalInterface + public interface Factory2 extends Factory { + T create(CreateMenuEvent e, PacketByteBuf buf); + + @Override + default T create(int syncId, PlayerInventory inventory, PacketByteBuf buf) { + return create(new CreateMenuEvent(syncId, inventory), buf); + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 6d4ca4ae1..525158b80 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.registry.v2; import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.EntityType; @@ -15,6 +16,7 @@ import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.enchantment.CompatEnchantment; import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffect; +import net.pitan76.mcpitanlib.api.gui.ExtendedScreenHandlerTypeBuilder; import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandlerTypeBuilder; import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; import net.pitan76.mcpitanlib.api.item.ExtendItem; @@ -24,6 +26,7 @@ import net.pitan76.mcpitanlib.api.registry.result.SupplierResult; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.sound.RegistryResultCompatSoundEvent; +import net.pitan76.mcpitanlib.api.tile.BlockEntityTypeBuilder; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import java.util.function.Supplier; @@ -94,10 +97,19 @@ public SupplierResult> registerSc return SupplierResult.of(registerScreenHandlerTypeSavingGenerics(id, builder::build)); } + public SupplierResult> registerScreenHandlerType(CompatIdentifier id, ExtendedScreenHandlerTypeBuilder builder) { + return SupplierResult.of(registerScreenHandlerTypeSavingGenerics(id, builder::build)); + } + public RegistryResult> registerBlockEntityType(CompatIdentifier id, Supplier> supplier) { return cr1.registerBlockEntityType(id.toMinecraft(), supplier); } + public SupplierResult> registerBlockEntityType(CompatIdentifier id, BlockEntityTypeBuilder builder) { + RegistryResult> result = cr1.registerBlockEntityType(id.toMinecraft(), builder::build); + return SupplierResult.of(() -> (BlockEntityType) result.getOrNull()); + } + public RegistryResult> registerEntity(CompatIdentifier id, Supplier> supplier) { return cr1.registerEntity(id.toMinecraft(), supplier); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiRegistry.java index 9f789468e..c928bb1f1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/GuiRegistry.java @@ -7,6 +7,7 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.pitan76.mcpitanlib.api.client.registry.CompatRegistryClient; +import net.pitan76.mcpitanlib.api.gui.ExtendedScreenHandlerTypeBuilder; import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandlerTypeBuilder; import net.pitan76.mcpitanlib.api.registry.result.SupplierResult; import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; @@ -37,6 +38,9 @@ public static void registerSimpleContainerGui(Str public static SupplierResult> register(CompatRegistryV2 registry, CompatIdentifier id, SimpleScreenHandlerTypeBuilder builder) { return registry.registerScreenHandlerType(id, builder); + } + public static SupplierResult> register(CompatRegistryV2 registry, CompatIdentifier id, ExtendedScreenHandlerTypeBuilder builder) { + return registry.registerScreenHandlerType(id, builder); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/MGLClientNetworks.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MGLClientNetworks.java index 6ab10f069..4d9bc3bad 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/guilib/MGLClientNetworks.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MGLClientNetworks.java @@ -6,7 +6,13 @@ import static net.pitan76.mcpitanlib.guilib.api.NetworkDefines.SYNC_GUI_WITH_TILE; public class MGLClientNetworks { + + public static boolean isInitialized = false; + public static void init() { + if (isInitialized) return; + isInitialized = true; + ClientNetworking.registerReceiver(SYNC_GUI_WITH_TILE, (e) -> { if (e.player.getCurrentScreenHandler() instanceof ExtendedBlockEntityContainerGui) { ExtendedBlockEntityContainerGui gui = (ExtendedBlockEntityContainerGui) e.player.getCurrentScreenHandler(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java index 5d6cd8b18..e18206e27 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java @@ -3,6 +3,7 @@ import net.pitan76.mcpitanlib.api.CommonModInitializer; import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.PlatformUtil; public class MPLGuiLib extends CommonModInitializer { public static final String MOD_ID = "mplguilib"; @@ -16,7 +17,8 @@ public void init() { INSTANCE = this; registry = super.registry; - MGLClientNetworks.init(); + if (PlatformUtil.isClient()) + MGLClientNetworks.init(); } // ---- diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java new file mode 100644 index 000000000..97472b25f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java @@ -0,0 +1,72 @@ +package net.pitan76.mcpitanlib.guilib.api.render; + +import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.client.RenderUtil.RendererUtil; +import net.pitan76.mcpitanlib.guilib.GuiTextures; + +public class PartsRenderer { + public static void drawBottom2TopProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u, int v, int u2, int v2, int width, int height, int percentage, CompatIdentifier texture) { + RendererUtil.drawTexture(drawObjectDM, texture, x, y, u, v, width, height); + + if (percentage > 0) { + int progress = (int) ((double) percentage / 100 * height); + RendererUtil.drawTexture(drawObjectDM, texture, x, y + height - progress, u2, v2 + height - progress, width, progress); + } + } + + public static void drawBottom2TopProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u1, int v1, int u2, int v2, int width, int height, double value, double maxValue, CompatIdentifier texture) { + int percentage = (int) (value / maxValue * 100); + drawBottom2TopProgressBar(drawObjectDM, x, y, u1, v1, u2, v2, width, height, percentage, texture); + } + + public static void drawTop2BottomProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u, int v, int u2, int v2, int width, int height, int percentage, CompatIdentifier texture) { + RendererUtil.drawTexture(drawObjectDM, texture, x, y, u, v, width, height); + + if (percentage > 0) { + int progress = (int) ((double) percentage / 100 * height); + RendererUtil.drawTexture(drawObjectDM, texture, x, y, u2, v2, width, progress); + } + } + + public static void drawTop2BottomProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u1, int v1, int u2, int v2, int width, int height, double value, double maxValue, CompatIdentifier texture) { + int percentage = (int) (value / maxValue * 100); + drawTop2BottomProgressBar(drawObjectDM, x, y, u1, v1, u2, v2, width, height, percentage, texture); + } + + public static void drawLeft2RightProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u, int v, int u2, int v2, int width, int height, int percentage, CompatIdentifier texture) { + RendererUtil.drawTexture(drawObjectDM, texture, x, y, u, v, width, height); + + if (percentage > 0) { + int progress = (int) ((double) percentage / 100 * width); + RendererUtil.drawTexture(drawObjectDM, texture, x, y, u2, v2, progress, height); + } + } + + public static void drawLeft2RightProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u1, int v1, int u2, int v2, int width, int height, double value, double maxValue, CompatIdentifier texture) { + int percentage = (int) (value / maxValue * 100); + drawLeft2RightProgressBar(drawObjectDM, x, y, u1, v1, u2, v2, width, height, percentage, texture); + } + + public static void drawRight2LeftProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u, int v, int u2, int v2, int width, int height, int percentage, CompatIdentifier texture) { + RendererUtil.drawTexture(drawObjectDM, texture, x, y, u, v, width, height); + + if (percentage > 0) { + int progress = (int) ((double) percentage / 100 * width); + RendererUtil.drawTexture(drawObjectDM, texture, x + width - progress, y, u2 + width - progress, v2, progress, height); + } + } + + public static void drawRight2LeftProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u1, int v1, int u2, int v2, int width, int height, double value, double maxValue, CompatIdentifier texture) { + int percentage = (int) (value / maxValue * 100); + drawRight2LeftProgressBar(drawObjectDM, x, y, u1, v1, u2, v2, width, height, percentage, texture); + } + + public static void drawBurningBar(DrawObjectDM drawObjectDM, int x, int y, int burnTime, int maxBurnTime) { + drawBottom2TopProgressBar(drawObjectDM, x, y, 0, 166, 0, 182, 16, 14, burnTime, maxBurnTime, GuiTextures.BASE_FURNACE_BACKGROUND); + } + + public static void drawHorizontalArrowBar(DrawObjectDM drawObjectDM, int x, int y, double value, double maxValue) { + drawLeft2RightProgressBar(drawObjectDM, x, y, 0, 166, 16, 182, 24, 16, value, maxValue, GuiTextures.BASE_FURNACE_BACKGROUND); + } +} diff --git a/info.properties b/info.properties index e480fd6cc..a270254d4 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,3 @@ archives_base_name=mcpitanlib -mod_version=2.5.0 +mod_version=2.5.1 maven_group=net.pitan76 \ No newline at end of file From a6248f0146dc4bdacf3071bb1ec71317fa8775c7 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:31:27 +0900 Subject: [PATCH 382/617] fix mods.toml, fabric.mod.json --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 69 +++++++-------------- 2 files changed, 25 insertions(+), 46 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 84158b7d3..77455cade 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -36,6 +36,6 @@ "accessWidener": "mcpitanlib.accesswidener", "depends": { "fabricloader": "*", - "minecraft": ">=1.18" + "minecraft": ">=1.18 <1.19" } } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 0444bba6b..e9d6bfe92 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,58 +1,37 @@ -# This is an example mods.toml file. It contains the data relating to the loading mods. -# There are several mandatory fields (#mandatory), and many more that are optional (#optional). -# The overall format is standard TOML format, v0.5.0. -# Note that there are a couple of TOML lists in this file. -# Find more information on toml format here: https://github.com/toml-lang/toml -# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml -modLoader = "javafml" #mandatory -# A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion = "[40,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. -# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. -# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. +modLoader = "javafml" +loaderVersion = "[40,)" license = "MIT" -# A URL to refer people to when problems occur with this mod issueTrackerURL = "https://github.com/Pitan76/MCPitanLib/issue" -# A list of mods - how many allowed here is determined by the individual mod loader -[[mods]] #mandatory -# The modid of the mod -modId = "mcpitanlib" #mandatory -# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -# ${version} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata -# see the associated build.gradle script for how to populate this completely automatically during a build -version = "${version}" #mandatory -# A display name for the mod -displayName = "MCPitanLib" #mandatory -# A URL to query for updates for this mod. See the JSON update specification -#updateJSONURL="http://myurl.me/" #optional -# A URL for the "homepage" for this mod, displayed in the mod UI + +[[mods]] +modId = "mcpitanlib" +version = "${version}" +displayName = "MCPitanLib" +#updateJSONURL="http://myurl.me/" displayURL = "https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch" -# A file name (in the root of the mod JAR) containing a logo for display -logoFile = "icon.png" #optional -# A text field displayed in the mod UI -#credits="Thanks for this example mod goes to Java" #optional -# A text field displayed in the mod UI -authors = "Pitan" #optional -# The description text for the mod (multi line!) (#mandatory) +logoFile = "icon.png" +authors = "Pitan" description = ''' Pitan's Minecraft Mod Library ''' -# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. -[[dependencies.mcpitanlib]] #optional -# the modid of the dependency -modId = "forge" #mandatory -# Does this dependency have to exist - if not, ordering below must be specified -mandatory = true #mandatory -# The version range of the dependency -versionRange = "[40,)" #mandatory -# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory + +[[dependencies.mcpitanlib]] +modId = "forge" +mandatory = true +versionRange = "[40,)" ordering = "NONE" -# Side this dependency is applied on - BOTH, CLIENT or SERVER side = "BOTH" -# Here's another dependency + [[dependencies.mcpitanlib]] modId = "minecraft" mandatory = true -# This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange = "[1.18,)" +versionRange = "[1.18,1.19)" ordering = "NONE" side = "BOTH" + +[[dependencies.mcpitanlib]] +modId = "architectury" +mandatory = true +versionRange = "[1.3.80,)" +ordering = "NONE" +side = "BOTH" \ No newline at end of file From 9f6adb7e50d47066c40f6cc2bd1bbfe9391c7652 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 12 Oct 2024 12:46:30 +0900 Subject: [PATCH 383/617] Add APIs etc --- build.gradle | 92 ++++++++++-- .../api/client/SimpleHandledScreen.java | 4 + .../gui/screen/SimpleHandledScreen.java | 4 + .../api/client/render/DrawObjectDM.java | 42 ++++++ .../api/event/ServerCommandEvent.java | 4 + .../event/v0/event/RecipeManagerEvent.java | 5 + .../api/recipe/CompatRecipeType.java | 52 +++++++ .../mcpitanlib/api/recipe/MatchGetter.java | 13 ++ .../api/recipe/input/CompatRecipeInput.java | 32 +++++ .../api/recipe/v2/CompatRecipeEntry.java | 63 ++++++++ .../mcpitanlib/api/util/BlockEntityUtil.java | 17 +++ .../mcpitanlib/api/util/CompatIdentifier.java | 8 ++ .../mcpitanlib/api/util/RecipeUtil.java | 84 +++++++++++ .../api/util/block/entity/FurnaceUtil.java | 42 ++++++ .../api/util/client/ScreenUtil.java | 135 ++++++++++++++++++ .../mcpitanlib/api/util/math/PointUtil.java | 15 ++ .../recipe/input/CraftingRecipeInputUtil.java | 111 ++++++++++++++ .../input/SingleStackRecipeInputUtil.java | 94 ++++++++++++ .../mcpitanlib/api/util/world/TickerUtil.java | 28 ++++ .../guilib/api/render/PartsRenderer.java | 4 +- .../main/resources/mcpitanlib.accesswidener | 3 +- info.properties | 5 +- 22 files changed, 844 insertions(+), 13 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatRecipeType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/recipe/MatchGetter.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/recipe/input/CompatRecipeInput.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/block/entity/FurnaceUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PointUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/input/CraftingRecipeInputUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/input/SingleStackRecipeInputUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/world/TickerUtil.java diff --git a/build.gradle b/build.gradle index ae4e20434..550c1e326 100644 --- a/build.gradle +++ b/build.gradle @@ -1,19 +1,39 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false + id 'com.matthewprenger.cursegradle' version '1.+' + id "com.modrinth.minotaur" version "2.+" } architectury { minecraft = rootProject.minecraft_version } +def loadProperties(filename) { + def props = new Properties() + file(filename).withInputStream { + props.load(it) + } + return props +} + +ext.info = loadProperties("$rootDir/info.properties") + subprojects { apply plugin: "dev.architectury.loom" + apply plugin: "com.modrinth.minotaur" + apply plugin: "com.matthewprenger.cursegradle" loom { silentMojangMappingsLicense() } + repositories { + maven { url "https://maven.pitan76.net/" } + maven { url "https://maven.neoforged.net/releases/" } + maven { url "https://maven.shedaniel.me/" } + } + dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" // The following line declares the mojmap mappings, you may use other mappings as well @@ -24,18 +44,72 @@ subprojects { // https://mvnrepository.com/artifact/org.yaml/snakeyaml implementation 'org.yaml:snakeyaml:2.0' } -} -def loadProperties(filename) { - def props = new Properties() - file(filename).withInputStream { - props.load(it) + if (name in "fabric,forge".split(",")) { + var modLoader = name + + if (System.getenv("CURSEFORGE_TOKEN") != null) { + curseforge { + apiKey = System.getenv("CURSEFORGE_TOKEN") + project { + id = '682213' + changelog = info.changelog + releaseType = modLoader == "fabric" ? 'release' : 'beta' + if (modLoader == "fabric") { + addGameVersion "Fabric" + } + if (modLoader == "forge") { + addGameVersion "Forge" + } + if (modLoader == "neoforge") { + addGameVersion "NeoForge" + } + addGameVersion('1.18') + addGameVersion '1.18.1' + addGameVersion '1.18.2' + + relations { + if (modLoader == "fabric") { + requiredDependency "fabric-api" + } + + requiredDependency 'architectury-api' + embeddedLibrary 'cloth-config' + embeddedLibrary 'compatdatapacks' + } + + mainArtifact(tasks.remapJar) + } + options { + forgeGradleIntegration = false + } + } + + } + + if (System.getenv("MODRINTH_TOKEN") != null) { + modrinth { + token = System.getenv("MODRINTH_TOKEN") + projectId = 'mcpitanlibarch' + versionNumber = info.mod_version + "-" + modLoader + gameVersions = ['1.18', '1.18.1', '1.18.2'] + versionType = 'release' + uploadFile = tasks.remapJar + changelog = info.changelog + loaders = [modLoader] + dependencies { + if (modLoader == "fabric") { + required.project "fabric-api" // Fabric API + } + required.project "architectury-api" + embedded.project "cloth-config" + embedded.project "compatdatapacks" + } + } + } } - return props } -ext.info = loadProperties("$rootDir/info.properties") - allprojects { apply plugin: "java" apply plugin: "architectury-plugin" @@ -56,6 +130,8 @@ allprojects { tasks.withType(JavaCompile).configureEach { options.encoding = "UTF-8" options.release = 17 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } java { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index bb6d6db11..18af680c0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -59,6 +59,8 @@ public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWi @Override protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mouseY) { DrawObjectDM drawObjectDM = new DrawObjectDM(stack); + drawObjectDM.width = this.width; + drawObjectDM.height = this.height; drawBackgroundOverride(new DrawBackgroundArgs(drawObjectDM, delta, mouseX, mouseY)); } @@ -68,6 +70,8 @@ protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mo @Override protected void drawForeground(MatrixStack stack, int mouseX, int mouseY) { DrawObjectDM drawObjectDM = new DrawObjectDM(stack); + drawObjectDM.width = this.width; + drawObjectDM.height = this.height; drawForegroundOverride(new DrawForegroundArgs(drawObjectDM, mouseX, mouseY)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index dda1a9283..093779602 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -68,6 +68,8 @@ public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWi @Override protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mouseY) { DrawObjectDM drawObjectDM = new DrawObjectDM(stack); + drawObjectDM.width = this.width; + drawObjectDM.height = this.height; drawBackgroundOverride(new DrawBackgroundArgs(drawObjectDM, delta, mouseX, mouseY)); } @@ -77,6 +79,8 @@ protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mo @Override protected void drawForeground(MatrixStack stack, int mouseX, int mouseY) { DrawObjectDM drawObjectDM = new DrawObjectDM(stack); + drawObjectDM.width = this.width; + drawObjectDM.height = this.height; drawForegroundOverride(new DrawForegroundArgs(drawObjectDM, mouseX, mouseY)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java index 8fb9a4284..18e031c8e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java @@ -1,6 +1,10 @@ package net.pitan76.mcpitanlib.api.client.render; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.text.TextComponent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.client.ScreenUtil.RendererUtil; public class DrawObjectDM { private MatrixStack stack; @@ -16,4 +20,42 @@ public MatrixStack getStack() { public void setStack(MatrixStack stack) { this.stack = stack; } + + public void drawTexture(CompatIdentifier texture, int x, int y, float u, float v, int width, int height) { + RendererUtil.drawTexture(this, texture, x, y, u, v, width, height); + } + + public void drawTexture(CompatIdentifier texture, int x, int y, float u, float v, int width, int height, int textureWidth, int textureHeight) { + RendererUtil.drawTexture(this, texture, x, y, u, v, width, height, textureWidth, textureHeight); + } + + public void drawText(Text text, int x, int y) { + RendererUtil.drawText(RendererUtil.getTextRenderer(), this, text, x, y); + } + + public void drawTooltip(Text text, int x, int y) { + RendererUtil.drawTooltip(this, text, x, y); + } + + public void drawText(TextComponent text, int x, int y) { + RendererUtil.drawText(RendererUtil.getTextRenderer(), this, text, x, y); + } + + public void drawTooltip(TextComponent text, int x, int y) { + RendererUtil.drawTooltip(this, text, x, y); + } + + public void drawBorder(int x, int y, int width, int height, int color) { + RendererUtil.drawBorder(this, x, y, width, height, color); + } + + public int width, height; + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java index 846d751c4..a863d767f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java @@ -79,6 +79,10 @@ public void sendSuccess(String message) { sendSuccess(TextUtil.literal(message)); } + public void sendFailure(String message) { + sendFailure(TextUtil.literal(message)); + } + public boolean isClient() { return WorldUtil.isClient(getWorld()); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java index 10d7a5c62..01cb9519e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java @@ -8,6 +8,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.profiler.Profiler; import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; +import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeEntry; import java.util.Map; @@ -50,4 +51,8 @@ public void putCompatibleRecipeEntry(Identifier id, CompatibleRecipeEntry entry) public void putCompatibleRecipeEntry(CompatibleRecipeEntry entry) { map.get(entry.getType()).put(entry.getId(), entry.getRecipe()); } + + public void putCompatibleRecipeEntry(CompatRecipeEntry entry) { + map.get(entry.getType()).put(entry.getId(), entry.getRecipe()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatRecipeType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatRecipeType.java new file mode 100644 index 000000000..6c19bffd5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatRecipeType.java @@ -0,0 +1,52 @@ +package net.pitan76.mcpitanlib.api.recipe; + +import net.minecraft.recipe.*; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class CompatRecipeType> { + public static final CompatRecipeType CRAFTING = new CompatRecipeType<>(RecipeType.CRAFTING); + public static final CompatRecipeType SMELTING = new CompatRecipeType<>(RecipeType.SMELTING); + public static final CompatRecipeType BLASTING = new CompatRecipeType<>(RecipeType.BLASTING); + public static final CompatRecipeType SMOKING = new CompatRecipeType<>(RecipeType.SMOKING); + public static final CompatRecipeType CAMPFIRE_COOKING = new CompatRecipeType<>(RecipeType.CAMPFIRE_COOKING); + public static final CompatRecipeType STONECUTTING = new CompatRecipeType<>(RecipeType.STONECUTTING); + public static final CompatRecipeType SMITHING = new CompatRecipeType<>(RecipeType.SMITHING); + + private final RecipeType type; + + public CompatRecipeType(String id) { + this(RecipeType.register(id)); + } + + public CompatRecipeType(RecipeType type) { + this.type = type; + } + + public RecipeType getType() { + return type; + } + + public CompatIdentifier getName() { + Identifier id = Registry.RECIPE_TYPE.getId(type); + if (id == null) return CompatIdentifier.empty(); + + return CompatIdentifier.fromMinecraft(id); + } + + public static CompatRecipeType of(CompatIdentifier id) { + RecipeType type = Registry.RECIPE_TYPE.get(id.toMinecraft()); + if (type == null) return null; + + return new CompatRecipeType<>(type); + } + + public static > CompatRecipeType of(CompatIdentifier id, Class clazz) { + return (CompatRecipeType) of(id); + } + + public static > CompatRecipeType of(RecipeType type) { + return new CompatRecipeType<>(type); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/MatchGetter.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/MatchGetter.java new file mode 100644 index 000000000..0da1547fc --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/MatchGetter.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.api.recipe; + +import net.minecraft.inventory.Inventory; +import net.minecraft.recipe.Recipe; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.recipe.input.CompatRecipeInput; +import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeEntry; + +import java.util.Optional; + +public interface MatchGetter> { + Optional> getFirstMatch(CompatRecipeInput input, World world); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/input/CompatRecipeInput.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/input/CompatRecipeInput.java new file mode 100644 index 000000000..7899d42d6 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/input/CompatRecipeInput.java @@ -0,0 +1,32 @@ +package net.pitan76.mcpitanlib.api.recipe.input; + +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; + +public class CompatRecipeInput { + protected I input; + + public CompatRecipeInput(I input) { + this.input = input; + } + + public I getInput() { + return input; + } + + public ItemStack getStack(int slot) { + return input.getStack(slot); + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStack(int slot) { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getStack(slot)); + } + + public int getSize() { + return input.size(); + } + + public boolean isEmpty() { + return input.isEmpty(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java new file mode 100644 index 000000000..8f13aa3a4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java @@ -0,0 +1,63 @@ +package net.pitan76.mcpitanlib.api.recipe.v2; + +import net.minecraft.inventory.Inventory; +import net.minecraft.recipe.*; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.RecipeUtil; +import org.jetbrains.annotations.Nullable; + +public class CompatRecipeEntry { + private final Recipe recipe; + + private Identifier id; + + public String group = ""; + public RecipeUtil.CompatibilityCraftingRecipeCategory category = null; + + @Deprecated + public CompatRecipeEntry(Recipe recipe) { + this.recipe = recipe; + } + + public CompatRecipeEntry(Identifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, Recipe recipe) { + this.recipe = recipe; + this.id = id; + this.group = group; + this.category = category; + } + + public boolean isNull() { + return recipe == null; + } + + public Recipe getRecipe() { + return recipe; + } + + public Identifier getId() { + return id; + } + + public RecipeType getType() { + Recipe recipe = getRecipe(); + if (recipe == null) return null; + + return recipe.getType(); + } + + public RecipeSerializer getSerializer() { + Recipe recipe = getRecipe(); + if (recipe == null) return null; + + return recipe.getSerializer(); + } + + @Nullable + public RecipeUtil.CompatibilityCraftingRecipeCategory getCategory() { + return category; + } + + public String getGroup() { + return group; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index 2e2e6e280..d502cf3ef 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -7,6 +7,7 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import org.jetbrains.annotations.Nullable; public class BlockEntityUtil { @@ -63,4 +64,20 @@ public static void markDirty(BlockEntity blockEntity) { public static BlockEntityType getType(BlockEntity blockEntity) { return blockEntity.getType(); } + + public static void readNbt(BlockEntity blockEntity, NbtCompound nbt, CompatRegistryLookup registryLookup) { + blockEntity.readNbt(nbt); + } + + public static void writeNbt(BlockEntity blockEntity, NbtCompound nbt, CompatRegistryLookup registryLookup) { + blockEntity.writeNbt(nbt); + } + + public static void read(BlockEntity blockEntity, NbtCompound nbt, CompatRegistryLookup registryLookup) { + blockEntity.readNbt(nbt); + } + + public static void createNbt(BlockEntity blockEntity, CompatRegistryLookup registryLookup) { + blockEntity.createNbt(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java index 4a40880dd..8aafc8174 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java @@ -142,4 +142,12 @@ public Identifier toMinecraft() { public static CompatIdentifier fromMinecraft(Identifier id) { return of(id.toString()); } + + public static CompatIdentifier empty() { + return of("mcpitanlib:empty"); + } + + public boolean isEmpty() { + return this.equals("mcpitanlib:empty"); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java index 8d809d153..c5dea577c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java @@ -7,10 +7,17 @@ import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.recipe.CompatRecipeType; +import net.pitan76.mcpitanlib.api.recipe.MatchGetter; +import net.pitan76.mcpitanlib.api.recipe.input.CompatRecipeInput; +import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeEntry; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Optional; public class RecipeUtil { public static ShapelessRecipe createShapelessRecipe(Identifier id, String group, CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { @@ -55,6 +62,83 @@ public static Identifier getId(Recipe recipe) { return IdentifierUtil.id(recipe.getClass().hashCode() + ""); } + public static > CompatRecipeEntry getFirstMatch(RecipeManager recipeManager, CompatRecipeType type, CompatRecipeInput input, World world) { + Optional recipe = recipeManager.getFirstMatch(type.getType(), input.getInput(), world); + return recipe.map(CompatRecipeEntry::new).orElseGet(() -> new CompatRecipeEntry<>(null)); + } + + public static > CompatRecipeEntry getFirstMatch(RecipeManager recipeManager, CompatRecipeType type, CompatRecipeInput input, World world, CompatIdentifier identifier) { + return getFirstMatch(recipeManager, type, input, world); + } + + public static > CompatRecipeEntry getFirstMatch(World world, CompatRecipeType type, CompatRecipeInput input) { + return getFirstMatch(getRecipeManager(world), type, input, world); + } + + public static > CompatRecipeEntry getFirstMatch(World world, CompatRecipeType type, CompatRecipeInput input, CompatIdentifier identifier) { + return getFirstMatch(getRecipeManager(world), type, input, world, identifier); + } + + public static RecipeManager getRecipeManager(World world) { + return world.getRecipeManager(); + } + + public Optional> get(World world, CompatIdentifier id) { + return get(getRecipeManager(world), id); + } + + public Optional> get(RecipeManager recipeManager, CompatIdentifier id) { + return (Optional>) recipeManager.get(id.toMinecraft()); + } + + public static > MatchGetter createCachedMatchGetter(RecipeType type) { + return (input, world) -> { + Optional optional = getRecipeManager(world).getFirstMatch(type, input.getInput(), world); + return Optional.of(optional.map(CompatRecipeEntry::new).orElseGet(() -> new CompatRecipeEntry<>(null))); + }; + } + + public static > MatchGetter createCachedMatchGetter(CompatRecipeType type) { + return createCachedMatchGetter(type.getType()); + } + + public static DefaultedList getInputs(Recipe recipe) { + return recipe.getIngredients(); + } + + public static DefaultedList getInputs(CompatRecipeEntry recipeEntry) { + return getInputs(recipeEntry.getRecipe()); + } + + public static ItemStackList getInputsAsStack(Recipe recipe) { + DefaultedList ingredients = getInputs(recipe); + ItemStackList stacks = ItemStackList.ofSize(ingredients.size(), ItemStackUtil.empty()); + for (Ingredient ingredient : ingredients) { + stacks.addAll(IngredientUtil.getMatchingStacksAsList(ingredient)); + } + return stacks; + } + + public static ItemStackList getInputsAsStack(CompatRecipeEntry recipeEntry) { + return getInputsAsStack(recipeEntry.getRecipe()); + } + + public static ItemStack getOutput(Recipe recipe, CompatRegistryLookup registryLookup) { + return recipe.getOutput(); + } + + public static ItemStack getOutput(CompatRecipeEntry recipeEntry, CompatRegistryLookup registryLookup) { + return recipeEntry.getRecipe().getOutput(); + } + + public static CompatRecipeType getType(CompatRecipeEntry recipeEntry) { + return CompatRecipeType.of(recipeEntry.getRecipe().getType()); + } + + public static > ItemStackList getRemainder(CompatRecipeEntry recipeEntry, CompatRecipeInput input) { + return ItemStackList.of(recipeEntry.getRecipe().getRemainder(input.getInput())); + } + public enum CompatibilityCraftingRecipeCategory { BUILDING, REDSTONE, diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/entity/FurnaceUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/entity/FurnaceUtil.java new file mode 100644 index 000000000..d84badc92 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/entity/FurnaceUtil.java @@ -0,0 +1,42 @@ +package net.pitan76.mcpitanlib.api.util.block.entity; + +import net.minecraft.block.entity.AbstractFurnaceBlockEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.AbstractCookingRecipe; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.recipe.MatchGetter; +import net.pitan76.mcpitanlib.api.recipe.input.CompatRecipeInput; +import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.api.util.recipe.input.SingleStackRecipeInputUtil; + +public class FurnaceUtil { + public static int getDefaultCookTime() { + return AbstractFurnaceBlockEntity.field_31294; + } + + public static boolean canUseAsFuel(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return canUseAsFuel(stack.toMinecraft()); + } + + public static boolean canUseAsFuel(ItemStack stack) { + return AbstractFurnaceBlockEntity.canUseAsFuel(stack); + } + + public static void tick(World world, BlockPos pos, AbstractFurnaceBlockEntity blockEntity) { + AbstractFurnaceBlockEntity.tick(world, pos, WorldUtil.getBlockState(world, pos), blockEntity); + } + + public static int getCookTime(World world, AbstractFurnaceBlockEntity furnace, MatchGetter matchGetter) { + return getCookTime(world, furnace.getStack(0), matchGetter); + } + + public static int getCookTime(World world, ItemStack stack, MatchGetter matchGetter) { + CompatRecipeInput input = (CompatRecipeInput) SingleStackRecipeInputUtil.create(stack); + + matchGetter.getFirstMatch(input, world); + + return matchGetter.getFirstMatch(input, world).map((entry) -> ((AbstractCookingRecipe)entry.getRecipe()).getCookTime()).orElse(200); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java index c6e90e6f5..8b712d55d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java @@ -1,15 +1,20 @@ package net.pitan76.mcpitanlib.api.util.client; +import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.render.*; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.minecraft.util.math.Matrix4f; import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.gui.widget.RedrawableTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; @@ -17,6 +22,8 @@ import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import java.util.List; + @Environment(EnvType.CLIENT) public class ScreenUtil { public static void setBackground(Identifier GUI, float f, float g, float h, float i) { @@ -176,6 +183,134 @@ public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, Tex public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, TextComponent text, int x, int y) { return drawText(renderer, drawObjectDM, text, x, y, 4210752); } + + public static void drawTooltip(DrawObjectDM drawObjectDM, TextRenderer textRenderer, Text text, int x, int y) { + drawTooltip(drawObjectDM, textRenderer, List.of(text), x, y); + } + + public static void drawTooltip(DrawObjectDM drawObjectDM, TextRenderer textRenderer, List texts, int x, int y) { + MatrixStack matrices = drawObjectDM.getStack(); + + if (!texts.isEmpty()) { + int i = 0; + int j = texts.size() == 1 ? -2 : 0; + + int k; + for (Text text : texts) { + k = getWidth(text); + if (k > i) { + i = k; + } + } + + int l = x + 12; + int m = y - 12; + k = i; + int n = j; + if (l + i > drawObjectDM.getWidth()) { + l -= 28 + i; + } + + if (m + j + 6 > drawObjectDM.getHeight()) { + m = drawObjectDM.getHeight() - j - 6; + } + + matrices.push(); + float f = ClientUtil.getItemRenderer().zOffset; + ClientUtil.getItemRenderer().zOffset = 400.0F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferBuilder = tessellator.getBuffer(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + Matrix4f matrix4f = matrices.peek().getPositionMatrix(); + fillGradient(matrix4f, bufferBuilder, l - 3, m - 4, l + k + 3, m - 3, 400, -267386864, -267386864); + fillGradient(matrix4f, bufferBuilder, l - 3, m + n + 3, l + k + 3, m + n + 4, 400, -267386864, -267386864); + fillGradient(matrix4f, bufferBuilder, l - 3, m - 3, l + k + 3, m + n + 3, 400, -267386864, -267386864); + fillGradient(matrix4f, bufferBuilder, l - 4, m - 3, l - 3, m + n + 3, 400, -267386864, -267386864); + fillGradient(matrix4f, bufferBuilder, l + k + 3, m - 3, l + k + 4, m + n + 3, 400, -267386864, -267386864); + fillGradient(matrix4f, bufferBuilder, l - 3, m - 3 + 1, l - 3 + 1, m + n + 3 - 1, 400, 1347420415, 1344798847); + fillGradient(matrix4f, bufferBuilder, l + k + 2, m - 3 + 1, l + k + 3, m + n + 3 - 1, 400, 1347420415, 1344798847); + fillGradient(matrix4f, bufferBuilder, l - 3, m - 3, l + k + 3, m - 3 + 1, 400, 1347420415, 1347420415); + fillGradient(matrix4f, bufferBuilder, l - 3, m + n + 2, l + k + 3, m + n + 3, 400, 1344798847, 1344798847); + RenderSystem.enableDepthTest(); + RenderSystem.disableTexture(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + BufferRenderer.draw(bufferBuilder); + RenderSystem.disableBlend(); + RenderSystem.enableTexture(); + VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer()); + matrices.translate(0.0, 0.0, 400.0); + int s = m; + + int t; + TooltipComponent tooltipComponent; + for (t = 0; t < texts.size(); ++t) { + Text text = texts.get(t); + if (text != null) { + tooltipComponent = TooltipComponent.of(text.asOrderedText()); + textRenderer.draw((OrderedText) tooltipComponent, (float) l, (float) s, -1, true, matrix4f, immediate, false, 0, 15728880); + } + + if (t == 0) { + s += 2; + } + + s += 10; + } + + immediate.draw(); + matrices.pop(); + s = m; + + for (t = 0; t < texts.size(); ++t) { + Text text = texts.get(t); + if (text != null) { + tooltipComponent = TooltipComponent.of(text.asOrderedText()); + textRenderer.draw((OrderedText) tooltipComponent, (float) l, (float) s, -1, true, matrix4f, immediate, false, 0, 15728880); + } + + if (t == 0) { + s += 2; + } + + s += 10; + } + + ClientUtil.getItemRenderer().zOffset = f; + } + } + + protected static void fillGradient(Matrix4f matrix, BufferBuilder builder, int startX, int startY, int endX, int endY, int z, int colorStart, int colorEnd) { + float f = (float)(colorStart >> 24 & 255) / 255.0F; + float g = (float)(colorStart >> 16 & 255) / 255.0F; + float h = (float)(colorStart >> 8 & 255) / 255.0F; + float i = (float)(colorStart & 255) / 255.0F; + float j = (float)(colorEnd >> 24 & 255) / 255.0F; + float k = (float)(colorEnd >> 16 & 255) / 255.0F; + float l = (float)(colorEnd >> 8 & 255) / 255.0F; + float m = (float)(colorEnd & 255) / 255.0F; + builder.vertex(matrix, (float)endX, (float)startY, (float)z).color(g, h, i, f).next(); + builder.vertex(matrix, (float)startX, (float)startY, (float)z).color(g, h, i, f).next(); + builder.vertex(matrix, (float)startX, (float)endY, (float)z).color(k, l, m, j).next(); + builder.vertex(matrix, (float)endX, (float)endY, (float)z).color(k, l, m, j).next(); + } + + public static void drawBorder(DrawObjectDM drawObjectDM, int x, int y, int width, int height, int color) { + + } + + public static void drawTooltip(DrawObjectDM drawObjectDM, Text text, int x, int y) { + drawTooltip(drawObjectDM, List.of(text), x, y); + } + + public static void drawTooltip(DrawObjectDM drawObjectDM, TextComponent text, int x, int y) { + drawTooltip(drawObjectDM, text.getText(), x, y); + } + + public static void drawTooltip(DrawObjectDM drawObjectDM, List texts, int x, int y) { + drawTooltip(drawObjectDM, getTextRenderer(), texts, x, y); + } } public static int getWidth(Text text) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PointUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PointUtil.java new file mode 100644 index 000000000..9af8468c3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PointUtil.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.util.math; + +public class PointUtil { + public static boolean isInRegion(int x, int y, int width, int height, int pointX, int pointY) { + return pointX >= x && pointX < x + width && pointY >= y && pointY < y + height; + } + + public static boolean isInRegion(int x, int y, int width, int height, double pointX, double pointY) { + return pointX >= x && pointX < x + width && pointY >= y && pointY < y + height; + } + + public static boolean isInRegion2(int x1, int y1, int x2, int y2, int pointX, int pointY) { + return pointX >= x1 && pointX < x2 && pointY >= y1 && pointY < y2; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/input/CraftingRecipeInputUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/input/CraftingRecipeInputUtil.java new file mode 100644 index 000000000..af8b50a72 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/input/CraftingRecipeInputUtil.java @@ -0,0 +1,111 @@ +package net.pitan76.mcpitanlib.api.util.recipe.input; + +import net.minecraft.inventory.CraftingInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.RecipeMatcher; +import net.pitan76.mcpitanlib.api.recipe.input.CompatRecipeInput; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class CraftingRecipeInputUtil { + public static Optional get(CompatRecipeInput input) { + if (input.getInput() instanceof CraftingInventory) { + return Optional.of((CraftingInventory) input.getInput()); + } + return Optional.empty(); + } + + public static CompatRecipeInput create(CraftingInventory input) { + return new CompatRecipeInput<>(input); + } + + public static CompatRecipeInput create(int width, int height, List stacks) { + + CraftingInventory inventory = new CraftingInventory(null, width, height); + + int size = stacks.size(); + for (int i = 0; i < size; i++) { + inventory.setStack(i, stacks.get(i)); + } + + return new CompatRecipeInput<>(inventory); + } + + public static ItemStack getStack(CraftingInventory input, int x, int y) { + return input.getStack(x + y * input.getWidth()); + } + + public static ItemStack getStack(CompatRecipeInput input, int x, int y) { + Optional recipeInput = get(input); + if (!recipeInput.isPresent()) return ItemStackUtil.empty(); + + return getStack(recipeInput.get(), x, y); + } + + public static net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStack(CompatRecipeInput input, int x, int y) { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getStack(input, x, y)); + } + + public static RecipeMatcher getRecipeMatcher(CraftingInventory input) { + return null; + } + + public static RecipeMatcher getRecipeMatcher(CompatRecipeInput input) { + Optional recipeInput = get(input); + if (!recipeInput.isPresent()) return null; + + return getRecipeMatcher(recipeInput.get()); + } + + public static List getStacks(CraftingInventory input) { + List stacks = new ArrayList<>(); + int size = input.size(); + for (int i = 0; i < size; i++) { + stacks.add(input.getStack(i)); + } + return stacks; + } + + public static List getStacks(CompatRecipeInput input) { + Optional recipeInput = get(input); + if (!recipeInput.isPresent()) return null; + + return getStacks(recipeInput.get()); + } + + public static int getWidth(CraftingInventory input) { + return input.getWidth(); + } + + public static int getWidth(CompatRecipeInput input) { + Optional recipeInput = get(input); + if (!recipeInput.isPresent()) return -1; + + return getWidth(recipeInput.get()); + } + + public static int getHeight(CraftingInventory input) { + return input.getHeight(); + } + + public static int getHeight(CompatRecipeInput input) { + Optional recipeInput = get(input); + if (!recipeInput.isPresent()) return -1; + + return getHeight(recipeInput.get()); + } + + public static int getStackCount(CraftingInventory input) { + return input.size(); + } + + public static int getStackCount(CompatRecipeInput input) { + Optional recipeInput = get(input); + if (!recipeInput.isPresent()) return -1; + + return getStackCount(recipeInput.get()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/input/SingleStackRecipeInputUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/input/SingleStackRecipeInputUtil.java new file mode 100644 index 000000000..e8f674601 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/input/SingleStackRecipeInputUtil.java @@ -0,0 +1,94 @@ +package net.pitan76.mcpitanlib.api.util.recipe.input; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.recipe.input.CompatRecipeInput; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; + +import java.util.Optional; + +public class SingleStackRecipeInputUtil { + public static Optional get(CompatRecipeInput input) { + if (input.getInput() instanceof Inventory) { + return Optional.of( input.getInput()); + } + return Optional.empty(); + } + + public static CompatRecipeInput create(Inventory input) { + return new CompatRecipeInput<>(input); + } + + public static CompatRecipeInput create(ItemStack stack) { + return new CompatRecipeInput<>(new Inventory() { + + private ItemStack itemStack = stack; + + @Override + public void clear() { + itemStack = ItemStackUtil.empty(); + } + + @Override + public int size() { + return 1; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public ItemStack getStack(int slot) { + if (slot == 0) + return itemStack; + return ItemStackUtil.empty(); + } + + @Override + public ItemStack removeStack(int slot, int amount) { + if (slot == 0) { + ItemStack stack = itemStack; + ItemStackUtil.decrementCount(stack, amount); + return stack; + } + return ItemStackUtil.empty(); + } + + @Override + public ItemStack removeStack(int slot) { + if (slot == 0) { + ItemStack stack = itemStack; + itemStack = ItemStackUtil.empty(); + return stack; + } + return ItemStackUtil.empty(); + } + + @Override + public void setStack(int slot, ItemStack stack) { + if (slot == 0) + itemStack = stack; + } + + @Override + public void markDirty() { + + } + + @Override + public boolean canPlayerUse(PlayerEntity player) { + return false; + } + }); + } + + public static ItemStack getStack(CompatRecipeInput input) { + Optional recipeInput = get(input); + if (!recipeInput.isPresent()) return ItemStackUtil.empty(); + + return recipeInput.get().getStack(0); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/TickerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/TickerUtil.java new file mode 100644 index 000000000..9b1a31163 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/TickerUtil.java @@ -0,0 +1,28 @@ +package net.pitan76.mcpitanlib.api.util.world; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.WorldUtil; + +public class TickerUtil { + public static void tick(T blockEntity, World world, BlockPos pos, BlockState state) { + if (blockEntity instanceof BlockEntityTicker) + ((BlockEntityTicker) blockEntity).tick(world, pos, state, blockEntity); + } + + public static void tick(T blockEntity, World world, BlockPos pos) { + tick(blockEntity, world, pos, WorldUtil.getBlockState(world, pos)); + } + + public static void tick(T blockEntity) { + tick(blockEntity, blockEntity.getWorld(), blockEntity.getPos()); + } + + public static void tick(T entity) { + entity.tick(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java index 97472b25f..e69e7b43d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java @@ -63,10 +63,10 @@ public static void drawRight2LeftProgressBar(DrawObjectDM drawObjectDM, int x, i } public static void drawBurningBar(DrawObjectDM drawObjectDM, int x, int y, int burnTime, int maxBurnTime) { - drawBottom2TopProgressBar(drawObjectDM, x, y, 0, 166, 0, 182, 16, 14, burnTime, maxBurnTime, GuiTextures.BASE_FURNACE_BACKGROUND); + drawBottom2TopProgressBar(drawObjectDM, x, y, 0, 168, 0, 184, 16, 14, burnTime, maxBurnTime, GuiTextures.BASE_FURNACE_BACKGROUND); } public static void drawHorizontalArrowBar(DrawObjectDM drawObjectDM, int x, int y, double value, double maxValue) { - drawLeft2RightProgressBar(drawObjectDM, x, y, 0, 166, 16, 182, 24, 16, value, maxValue, GuiTextures.BASE_FURNACE_BACKGROUND); + drawLeft2RightProgressBar(drawObjectDM, x, y, 0, 168, 16, 184, 24, 16, value, maxValue, GuiTextures.BASE_FURNACE_BACKGROUND); } } diff --git a/common/src/main/resources/mcpitanlib.accesswidener b/common/src/main/resources/mcpitanlib.accesswidener index c238c5a7e..959167ddf 100644 --- a/common/src/main/resources/mcpitanlib.accesswidener +++ b/common/src/main/resources/mcpitanlib.accesswidener @@ -1 +1,2 @@ -accessWidener v2 named \ No newline at end of file +accessWidener v2 named +accessible method net/minecraft/block/entity/BlockEntity writeNbt (Lnet/minecraft/nbt/NbtCompound;)V diff --git a/info.properties b/info.properties index a270254d4..212b6bcca 100644 --- a/info.properties +++ b/info.properties @@ -1,3 +1,4 @@ archives_base_name=mcpitanlib -mod_version=2.5.1 -maven_group=net.pitan76 \ No newline at end of file +mod_version=2.5.2 +maven_group=net.pitan76 +changelog= \ No newline at end of file From 68a8faa92d451b77bb1bc5ad4da4a221ab0df7de Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:18:33 +0900 Subject: [PATCH 384/617] fix APIs --- .../api/client/SimpleHandledScreen.java | 12 +++----- .../mcpitanlib/api/client/SimpleScreen.java | 7 +++-- .../gui/screen/SimpleHandledScreen.java | 14 ++++------ .../api/client/render/DrawObjectDM.java | 28 +++++++++++++++---- .../mcpitanlib/api/util/BlockEntityUtil.java | 4 +-- 5 files changed, 38 insertions(+), 27 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 18af680c0..a78009ed7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -58,9 +58,7 @@ public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWi @Deprecated @Override protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mouseY) { - DrawObjectDM drawObjectDM = new DrawObjectDM(stack); - drawObjectDM.width = this.width; - drawObjectDM.height = this.height; + DrawObjectDM drawObjectDM = new DrawObjectDM(stack, this); drawBackgroundOverride(new DrawBackgroundArgs(drawObjectDM, delta, mouseX, mouseY)); } @@ -69,9 +67,7 @@ protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mo @Deprecated @Override protected void drawForeground(MatrixStack stack, int mouseX, int mouseY) { - DrawObjectDM drawObjectDM = new DrawObjectDM(stack); - drawObjectDM.width = this.width; - drawObjectDM.height = this.height; + DrawObjectDM drawObjectDM = new DrawObjectDM(stack, this); drawForegroundOverride(new DrawForegroundArgs(drawObjectDM, mouseX, mouseY)); } @@ -195,7 +191,7 @@ public int getBackgroundHeight() { @Deprecated @Override public void render(MatrixStack stack, int mouseX, int mouseY, float delta) { - DrawObjectDM drawObjectDM = new DrawObjectDM(stack); + DrawObjectDM drawObjectDM = new DrawObjectDM(stack, this); renderOverride(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); } @@ -235,7 +231,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { @Deprecated @Override public void renderBackgroundTexture(int vOffset) { - this.renderBackgroundTexture(new RenderBackgroundTextureArgs(null, vOffset)); + this.renderBackgroundTexture(new RenderBackgroundTextureArgs(new DrawObjectDM(null, this), vOffset)); } public void closeOverride() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index ddd7e5314..58f1583cb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -20,6 +20,7 @@ import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.client.RenderUtil; public abstract class SimpleScreen extends Screen { @@ -61,7 +62,7 @@ public void callDrawTexture(DrawObjectDM drawObjectDM, CompatIdentifier texture, @Deprecated @Override public void renderBackground(MatrixStack matrices) { - renderBackground(new RenderArgs(new DrawObjectDM(matrices), 0, 0, 0)); + renderBackground(new RenderArgs(new DrawObjectDM(matrices, this), 0, 0, 0)); } public void renderBackground(RenderArgs args) { @@ -127,7 +128,7 @@ public void setHeight(int height) { @Deprecated @Override public void render(MatrixStack stack, int mouseX, int mouseY, float delta) { - DrawObjectDM drawObjectDM = new DrawObjectDM(stack); + DrawObjectDM drawObjectDM = new DrawObjectDM(stack, this); render(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); } @@ -167,7 +168,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { @Deprecated @Override public void renderBackgroundTexture(int vOffset) { - this.renderBackgroundTexture(new RenderBackgroundTextureArgs(null, vOffset)); + this.renderBackgroundTexture(new RenderBackgroundTextureArgs(new DrawObjectDM(null, this), vOffset)); } public void closeOverride() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index 093779602..d7a42db49 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -67,9 +67,7 @@ public CompatibleTexturedButtonWidget addDrawableCTBW(CompatibleTexturedButtonWi @Deprecated @Override protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mouseY) { - DrawObjectDM drawObjectDM = new DrawObjectDM(stack); - drawObjectDM.width = this.width; - drawObjectDM.height = this.height; + DrawObjectDM drawObjectDM = new DrawObjectDM(stack, this); drawBackgroundOverride(new DrawBackgroundArgs(drawObjectDM, delta, mouseX, mouseY)); } @@ -78,9 +76,7 @@ protected void drawBackground(MatrixStack stack, float delta, int mouseX, int mo @Deprecated @Override protected void drawForeground(MatrixStack stack, int mouseX, int mouseY) { - DrawObjectDM drawObjectDM = new DrawObjectDM(stack); - drawObjectDM.width = this.width; - drawObjectDM.height = this.height; + DrawObjectDM drawObjectDM = new DrawObjectDM(stack, this); drawForegroundOverride(new DrawForegroundArgs(drawObjectDM, mouseX, mouseY)); } @@ -204,7 +200,7 @@ public int getBackgroundHeight() { @Deprecated @Override public void render(MatrixStack stack, int mouseX, int mouseY, float delta) { - DrawObjectDM drawObjectDM = new DrawObjectDM(stack); + DrawObjectDM drawObjectDM = new DrawObjectDM(stack, this); renderOverride(new RenderArgs(drawObjectDM, mouseX, mouseY, delta)); } @@ -244,7 +240,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { @Deprecated @Override public void renderBackgroundTexture(int vOffset) { - this.renderBackgroundTexture(new RenderBackgroundTextureArgs(null, vOffset)); + this.renderBackgroundTexture(new RenderBackgroundTextureArgs(new DrawObjectDM(null, this), vOffset)); } public void closeOverride() { @@ -316,4 +312,4 @@ public void drawText(DrawObjectDM drawObjectDM, Text text, int x, int y) { public void drawText(DrawObjectDM drawObjectDM, TextComponent text, int x, int y) { ScreenUtil.RendererUtil.drawText(textRenderer, drawObjectDM, text, x, y); } -} \ No newline at end of file +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java index 18e031c8e..d94215750 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectDM.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.client.render; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.pitan76.mcpitanlib.api.text.TextComponent; @@ -9,18 +10,37 @@ public class DrawObjectDM { private MatrixStack stack; + private Screen screen = null; + public DrawObjectDM(MatrixStack stack) { this.stack = stack; } + public DrawObjectDM(MatrixStack stack, Screen screen) { + this(stack); + this.screen = screen; + } + public MatrixStack getStack() { return stack; } - + + public Screen getScreen() { + return screen; + } + public void setStack(MatrixStack stack) { this.stack = stack; } + public void setScreen(Screen screen) { + this.screen = screen; + } + + public boolean hasScreen() { + return screen != null; + } + public void drawTexture(CompatIdentifier texture, int x, int y, float u, float v, int width, int height) { RendererUtil.drawTexture(this, texture, x, y, u, v, width, height); } @@ -49,13 +69,11 @@ public void drawBorder(int x, int y, int width, int height, int color) { RendererUtil.drawBorder(this, x, y, width, height, color); } - public int width, height; - public int getWidth() { - return width; + return hasScreen() ? screen.width : -1; } public int getHeight() { - return height; + return hasScreen() ? screen.height : -1; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index d502cf3ef..14b9f62a8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -77,7 +77,7 @@ public static void read(BlockEntity blockEntity, NbtCompound nbt, CompatRegistry blockEntity.readNbt(nbt); } - public static void createNbt(BlockEntity blockEntity, CompatRegistryLookup registryLookup) { - blockEntity.createNbt(); + public static NbtCompound createNbt(BlockEntity blockEntity, CompatRegistryLookup registryLookup) { + return blockEntity.createNbt(); } } From 08bfc94e47aa472dfe1273fe7a0252ca636176d1 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:28:51 +0900 Subject: [PATCH 385/617] remove compatdatapacks --- build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/build.gradle b/build.gradle index 550c1e326..82959cc8b 100644 --- a/build.gradle +++ b/build.gradle @@ -75,7 +75,6 @@ subprojects { requiredDependency 'architectury-api' embeddedLibrary 'cloth-config' - embeddedLibrary 'compatdatapacks' } mainArtifact(tasks.remapJar) @@ -103,7 +102,6 @@ subprojects { } required.project "architectury-api" embedded.project "cloth-config" - embedded.project "compatdatapacks" } } } From 9d8af62ba30b7c6621d69678c90112143a4c1dca Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:36:07 +0900 Subject: [PATCH 386/617] fix ScreenUtil --- .../api/util/client/ScreenUtil.java | 117 +----------------- 1 file changed, 6 insertions(+), 111 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java index 8b712d55d..5452f3967 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ScreenUtil.java @@ -1,20 +1,15 @@ package net.pitan76.mcpitanlib.api.util.client; -import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.render.*; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.minecraft.util.math.Matrix4f; import net.pitan76.mcpitanlib.api.client.gui.widget.CompatibleTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.gui.widget.RedrawableTexturedButtonWidget; import net.pitan76.mcpitanlib.api.client.render.DrawObjectDM; @@ -185,123 +180,23 @@ public static int drawText(TextRenderer renderer, DrawObjectDM drawObjectDM, Tex } public static void drawTooltip(DrawObjectDM drawObjectDM, TextRenderer textRenderer, Text text, int x, int y) { - drawTooltip(drawObjectDM, textRenderer, List.of(text), x, y); + if (drawObjectDM.hasScreen()) { + drawObjectDM.getScreen().renderTooltip(drawObjectDM.getStack(), text, x, y); + } } public static void drawTooltip(DrawObjectDM drawObjectDM, TextRenderer textRenderer, List texts, int x, int y) { - MatrixStack matrices = drawObjectDM.getStack(); - - if (!texts.isEmpty()) { - int i = 0; - int j = texts.size() == 1 ? -2 : 0; - - int k; - for (Text text : texts) { - k = getWidth(text); - if (k > i) { - i = k; - } - } - - int l = x + 12; - int m = y - 12; - k = i; - int n = j; - if (l + i > drawObjectDM.getWidth()) { - l -= 28 + i; - } - - if (m + j + 6 > drawObjectDM.getHeight()) { - m = drawObjectDM.getHeight() - j - 6; - } - - matrices.push(); - float f = ClientUtil.getItemRenderer().zOffset; - ClientUtil.getItemRenderer().zOffset = 400.0F; - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - RenderSystem.setShader(GameRenderer::getPositionColorShader); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); - Matrix4f matrix4f = matrices.peek().getPositionMatrix(); - fillGradient(matrix4f, bufferBuilder, l - 3, m - 4, l + k + 3, m - 3, 400, -267386864, -267386864); - fillGradient(matrix4f, bufferBuilder, l - 3, m + n + 3, l + k + 3, m + n + 4, 400, -267386864, -267386864); - fillGradient(matrix4f, bufferBuilder, l - 3, m - 3, l + k + 3, m + n + 3, 400, -267386864, -267386864); - fillGradient(matrix4f, bufferBuilder, l - 4, m - 3, l - 3, m + n + 3, 400, -267386864, -267386864); - fillGradient(matrix4f, bufferBuilder, l + k + 3, m - 3, l + k + 4, m + n + 3, 400, -267386864, -267386864); - fillGradient(matrix4f, bufferBuilder, l - 3, m - 3 + 1, l - 3 + 1, m + n + 3 - 1, 400, 1347420415, 1344798847); - fillGradient(matrix4f, bufferBuilder, l + k + 2, m - 3 + 1, l + k + 3, m + n + 3 - 1, 400, 1347420415, 1344798847); - fillGradient(matrix4f, bufferBuilder, l - 3, m - 3, l + k + 3, m - 3 + 1, 400, 1347420415, 1347420415); - fillGradient(matrix4f, bufferBuilder, l - 3, m + n + 2, l + k + 3, m + n + 3, 400, 1344798847, 1344798847); - RenderSystem.enableDepthTest(); - RenderSystem.disableTexture(); - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - BufferRenderer.draw(bufferBuilder); - RenderSystem.disableBlend(); - RenderSystem.enableTexture(); - VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer()); - matrices.translate(0.0, 0.0, 400.0); - int s = m; - - int t; - TooltipComponent tooltipComponent; - for (t = 0; t < texts.size(); ++t) { - Text text = texts.get(t); - if (text != null) { - tooltipComponent = TooltipComponent.of(text.asOrderedText()); - textRenderer.draw((OrderedText) tooltipComponent, (float) l, (float) s, -1, true, matrix4f, immediate, false, 0, 15728880); - } - - if (t == 0) { - s += 2; - } - - s += 10; - } - - immediate.draw(); - matrices.pop(); - s = m; - - for (t = 0; t < texts.size(); ++t) { - Text text = texts.get(t); - if (text != null) { - tooltipComponent = TooltipComponent.of(text.asOrderedText()); - textRenderer.draw((OrderedText) tooltipComponent, (float) l, (float) s, -1, true, matrix4f, immediate, false, 0, 15728880); - } - - if (t == 0) { - s += 2; - } - - s += 10; - } - - ClientUtil.getItemRenderer().zOffset = f; + if (drawObjectDM.hasScreen()) { + drawObjectDM.getScreen().renderTooltip(drawObjectDM.getStack(), texts, x, y); } } - protected static void fillGradient(Matrix4f matrix, BufferBuilder builder, int startX, int startY, int endX, int endY, int z, int colorStart, int colorEnd) { - float f = (float)(colorStart >> 24 & 255) / 255.0F; - float g = (float)(colorStart >> 16 & 255) / 255.0F; - float h = (float)(colorStart >> 8 & 255) / 255.0F; - float i = (float)(colorStart & 255) / 255.0F; - float j = (float)(colorEnd >> 24 & 255) / 255.0F; - float k = (float)(colorEnd >> 16 & 255) / 255.0F; - float l = (float)(colorEnd >> 8 & 255) / 255.0F; - float m = (float)(colorEnd & 255) / 255.0F; - builder.vertex(matrix, (float)endX, (float)startY, (float)z).color(g, h, i, f).next(); - builder.vertex(matrix, (float)startX, (float)startY, (float)z).color(g, h, i, f).next(); - builder.vertex(matrix, (float)startX, (float)endY, (float)z).color(k, l, m, j).next(); - builder.vertex(matrix, (float)endX, (float)endY, (float)z).color(k, l, m, j).next(); - } - public static void drawBorder(DrawObjectDM drawObjectDM, int x, int y, int width, int height, int color) { } public static void drawTooltip(DrawObjectDM drawObjectDM, Text text, int x, int y) { - drawTooltip(drawObjectDM, List.of(text), x, y); + drawTooltip(drawObjectDM, getTextRenderer(), text, x, y); } public static void drawTooltip(DrawObjectDM drawObjectDM, TextComponent text, int x, int y) { From 6d0dae68ff31bd4f975858b41eb884e6f2e7bf60 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:23:27 +0900 Subject: [PATCH 387/617] add apis-mpl v3 --- .../net/pitan76/mcpitanlib/MCPitanLib.java | 7 +- .../api/block/CompatChestBlock.java | 15 +- .../api/block/CompatPillarBlock.java | 16 +- .../mcpitanlib/api/block/CompatSlabBlock.java | 22 +- .../api/block/CompatStairsBlock.java | 34 ++- .../api/block/CompatibleBlockSettings.java | 15 +- .../mcpitanlib/api/block/ExtendBlock.java | 7 +- .../api/block/ExtendBlockProvider.java | 4 +- .../api/block/v2/BlockSettingsBuilder.java | 115 ++++++++ .../mcpitanlib/api/block/v2/CompatBlock.java | 22 ++ .../api/block/v2/CompatBlockProvider.java | 13 + .../api/block/v2/CompatibleBlockSettings.java | 256 ++++++++++++++++++ .../event/listener/WorldRenderContext.java | 2 - .../api/entity/EntityTypeBuilder.java | 9 +- .../api/entity/ExtendEntityType.java | 10 +- .../pitan76/mcpitanlib/api/entity/Player.java | 31 +-- .../api/event/block/BlockUseEvent.java | 18 +- .../api/event/block/OutlineShapeEvent.java | 4 + .../api/event/item/ItemUseEvent.java | 50 +++- .../api/event/item/ItemUseOnBlockEvent.java | 18 +- .../api/event/item/ItemUseOnEntityEvent.java | 18 +- .../api/event/result/EventResult.java | 5 + .../api/event/result/TypedEventResult.java | 29 +- .../event/v0/InteractionEventRegistry.java | 27 +- .../api/item/CompatibleItemSettings.java | 6 +- .../mcpitanlib/api/item/ExtendBlockItem.java | 25 +- .../mcpitanlib/api/item/ExtendItem.java | 37 +-- .../api/item/ExtendItemProvider.java | 10 +- .../pitan76/mcpitanlib/api/item/FoodItem.java | 28 ++ .../mcpitanlib/api/item/args/RarityArgs.java | 19 ++ .../api/item/args/UseActionArgs.java | 27 ++ .../api/item/consume/CompatUseAction.java | 45 +++ .../api/item/tool/CompatibleAxeItem.java | 2 +- .../api/item/tool/CompatibleHoeItem.java | 4 +- .../item/tool/CompatibleMiningToolItem.java | 4 +- .../api/item/tool/CompatiblePickaxeItem.java | 4 +- .../api/item/tool/CompatibleShovelItem.java | 6 +- .../api/item/tool/CompatibleSwordItem.java | 4 +- .../api/item/tool/CompatibleToolItem.java | 2 +- .../api/item/tool/CompatibleToolMaterial.java | 59 +++- .../mcpitanlib/api/item/v2/CompatItem.java | 83 ++++++ .../api/item/v2/CompatItemProvider.java | 43 +++ .../api/item/v2/CompatibleItemSettings.java | 170 ++++++++++++ .../api/item/v2/ExtendBlockItem.java | 9 +- .../api/item/v2/ItemSettingsBuilder.java | 116 ++++++++ .../api/item/v3/CompatArmorMaterial.java | 15 + .../api/item/v3/CompatToolMaterial.java | 15 + .../api/recipe/CompatibleRecipeEntry.java | 9 + .../api/recipe/v2/CompatRecipeEntry.java | 9 + .../api/registry/CompatRegistry.java | 17 +- .../api/simple/block/SimpleGuiBlock.java | 4 +- .../api/simple/item/SimpleGuiItem.java | 11 +- .../api/state/property/CompatProperties.java | 9 + .../api/state/property/DirectionProperty.java | 37 +++ .../api/state/property/IProperty.java | 21 ++ .../api/tag/item/RepairIngredientTag.java | 68 +++++ .../api/tile/BlockEntityTypeBuilder.java | 2 +- .../mcpitanlib/api/util/ActionResultUtil.java | 30 -- .../mcpitanlib/api/util/BlockStateUtil.java | 18 +- .../mcpitanlib/api/util/BlockUtil.java | 1 + .../api/util/CompatActionResult.java | 81 ++++++ .../mcpitanlib/api/util/CompatIdentifier.java | 10 +- .../mcpitanlib/api/util/CompatRarity.java | 54 ++++ .../api/util/CompatStringIdentifiable.java | 17 ++ .../api/util/EquipMaterialUtil.java | 12 + .../mcpitanlib/api/util/InteractUtil.java | 35 ++- .../pitan76/mcpitanlib/api/util/ItemUtil.java | 1 + .../mcpitanlib/api/util/PropertyUtil.java | 18 +- .../api/util/StackActionResult.java | 110 ++++++++ .../mcpitanlib/api/util/block/BlockUtil.java | 225 +++++++++++++++ .../api/util/block/entity/FurnaceUtil.java | 6 +- .../api/util/color/CompatBrightness.java | 40 +++ .../api/util/color/CompatDyeColor.java | 46 ++++ .../api/util/color/CompatMapColor.java | 94 +++++++ .../api/util/entity/SnowballEntityUtil.java | 7 + .../api/util/event/ItemEventGenerator.java | 7 +- .../api/util/item/ItemGroupUtil.java | 48 ++++ .../mcpitanlib/api/util/item/ItemUtil.java | 250 +++++++++++++++++ .../api/util/recipe/RecipeMatcherUtil.java | 2 + .../core/registry/FuelRegistry.java | 7 + .../pitan76/mcpitanlib/debug/DebugTool.java | 11 +- .../pitan76/mcpitanlib/guilib/MPLGuiLib.java | 15 +- .../guilib/api/render/PartsRenderer.java | 8 +- .../mcpitanlib/midohra/block/BlockState.java | 57 ++++ .../midohra/block/BlockWrapper.java | 87 ++++++ .../midohra/item/ItemGroupWrapper.java | 53 ++++ .../mcpitanlib/midohra/item/ItemGroups.java | 30 ++ .../mcpitanlib/midohra/item/ItemStack.java | 7 +- .../mcpitanlib/midohra/item/ItemWrapper.java | 105 +++++++ .../mcpitanlib/midohra/item/Items.java | 20 ++ .../mcpitanlib/mixin/AbstractBlockMixin.java | 2 +- .../pitan76/mcpitanlib/mixin/ItemMixin.java | 39 +-- .../mcpitanlib/test/ExampleGuiBlock.java | 11 +- .../mcpitanlib/test/ExampleGuiItem.java | 11 +- .../pitan76/mcpitanlib/test/ExampleMod.java | 37 ++- .../tags/items/diamond_tool_materials.json | 5 + .../tags/items/gold_tool_materials.json | 5 + .../tags/items/iron_tool_materials.json | 5 + .../tags/items/leather_armor_materials.json | 5 + .../tags/items/netherite_tool_materials.json | 5 + .../tags/items/stone_tool_materials.json | 7 + .../tags/items/turtle_helmet_materials.json | 5 + .../tags/items/wooden_tool_materials.json | 5 + .../event/fabric/WorldRenderRegistryImpl.java | 11 - .../event/forge/WorldRenderRegistryImpl.java | 10 - info.properties | 2 +- 106 files changed, 2993 insertions(+), 351 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatibleBlockSettings.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/FoodItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/args/RarityArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/args/UseActionArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/consume/CompatUseAction.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItemProvider.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatibleItemSettings.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatArmorMaterial.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatToolMaterial.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/state/property/DirectionProperty.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tag/item/RepairIngredientTag.java delete mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/ActionResultUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatActionResult.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatRarity.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatStringIdentifiable.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/StackActionResult.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatBrightness.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatDyeColor.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatMapColor.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemGroupUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroups.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/item/Items.java create mode 100644 common/src/main/resources/data/mcpitanlib/tags/items/diamond_tool_materials.json create mode 100644 common/src/main/resources/data/mcpitanlib/tags/items/gold_tool_materials.json create mode 100644 common/src/main/resources/data/mcpitanlib/tags/items/iron_tool_materials.json create mode 100644 common/src/main/resources/data/mcpitanlib/tags/items/leather_armor_materials.json create mode 100644 common/src/main/resources/data/mcpitanlib/tags/items/netherite_tool_materials.json create mode 100644 common/src/main/resources/data/mcpitanlib/tags/items/stone_tool_materials.json create mode 100644 common/src/main/resources/data/mcpitanlib/tags/items/turtle_helmet_materials.json create mode 100644 common/src/main/resources/data/mcpitanlib/tags/items/wooden_tool_materials.json diff --git a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java index 2a0b01bc2..d9e4947c2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/MCPitanLib.java @@ -11,6 +11,7 @@ import net.pitan76.easyapi.config.Config; import net.pitan76.easyapi.config.JsonConfig; import net.pitan76.mcpitanlib.api.registry.CompatRegistry; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.PlatformUtil; import net.pitan76.mcpitanlib.debug.DebugTool; import net.pitan76.mcpitanlib.guilib.MPLGuiLib; @@ -42,7 +43,7 @@ public class MCPitanLib { */ public static void init() { configInit(); - new MPLGuiLib().init(); + MPLGuiLib.init(); if (PlatformUtil.isDevelopmentEnvironment() || (config.has("debugMode") && config.getBoolean("debugMode"))) { System.out.println("MCPitanLib: Debug Mode"); @@ -101,6 +102,10 @@ public static Identifier id(String path) { return new Identifier(MOD_ID, path); } + public static CompatIdentifier compatId(String path) { + return CompatIdentifier.fromMinecraft(id(path)); + } + public static boolean isItemBlackListed(Identifier id) { try { return itemBlackList.contains(id.toString()); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatChestBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatChestBlock.java index b507732c8..f33d401dd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatChestBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatChestBlock.java @@ -6,15 +6,23 @@ import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.ChestBlockEntity; import net.minecraft.util.math.BlockPos; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlockProvider; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; import java.util.function.Supplier; -public class CompatChestBlock extends ChestBlock { +public class CompatChestBlock extends ChestBlock implements CompatBlockProvider { public CompatChestBlock(Settings settings, Supplier> supplier) { super(settings, supplier); } + public CompatibleBlockSettings compatSettings; + + public CompatChestBlock(CompatibleBlockSettings settings, Supplier> supplier) { + this(settings.build(), supplier); + } + /** * @deprecated Use {@link #createBlockEntity(TileCreateEvent)} instead. */ @@ -30,4 +38,9 @@ public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { public BlockEntity createBlockEntity(TileCreateEvent event) { return super.createBlockEntity(event.getBlockPos(), event.getBlockState()); } + + @Override + public CompatibleBlockSettings getCompatSettings() { + return compatSettings; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java index 70767f8fb..b286eb914 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java @@ -7,20 +7,30 @@ import net.minecraft.state.StateManager; import net.minecraft.state.property.EnumProperty; import net.minecraft.util.math.Direction; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlockProvider; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; -public class CompatPillarBlock extends PillarBlock implements ExtendBlockProvider { +public class CompatPillarBlock extends PillarBlock implements CompatBlockProvider { public static final EnumProperty AXIS = PillarBlock.AXIS; + public CompatibleBlockSettings settings; + + @Override + public CompatibleBlockSettings getCompatSettings() { + return settings; + } + public CompatPillarBlock(Settings settings) { super(settings); } public CompatPillarBlock(CompatibleBlockSettings settings) { this(settings.build()); + this.settings = settings; } public void appendProperties(AppendPropertiesArgs args) { @@ -47,13 +57,13 @@ public BlockState getPlacementState(ItemPlacementContext ctx) { @Deprecated @Override public void appendProperties(AppendPropertiesArgs args, Options options) { - ExtendBlockProvider.super.appendProperties(args, options); + CompatBlockProvider.super.appendProperties(args, options); } @Deprecated @Override public BlockState getPlacementState(PlacementStateArgs args, Options options) { - return ExtendBlockProvider.super.getPlacementState(args, options); + return CompatBlockProvider.super.getPlacementState(args, options); } public CompatMapCodec getCompatCodec() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java index a08952509..a9d46b845 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java @@ -3,25 +3,33 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.SlabBlock; -import net.minecraft.block.StairsBlock; import net.minecraft.block.enums.SlabType; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockView; import net.minecraft.state.property.BooleanProperty; import net.minecraft.state.property.EnumProperty; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlockProvider; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.CanPathfindThroughArgs; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; -public class CompatSlabBlock extends SlabBlock implements ExtendBlockProvider { +public class CompatSlabBlock extends SlabBlock implements CompatBlockProvider { public static final EnumProperty TYPE = SlabBlock.TYPE; public static final BooleanProperty WATERLOGGED = SlabBlock.WATERLOGGED; + public CompatibleBlockSettings settings; + + @Override + public CompatibleBlockSettings getCompatSettings() { + return settings; + } + public CompatSlabBlock(Settings settings) { super(settings); } @@ -54,13 +62,13 @@ public BlockState getPlacementState(ItemPlacementContext ctx) { @Deprecated @Override public void appendProperties(AppendPropertiesArgs args, Options options) { - ExtendBlockProvider.super.appendProperties(args, options); + CompatBlockProvider.super.appendProperties(args, options); } @Deprecated @Override public BlockState getPlacementState(PlacementStateArgs args, Options options) { - return ExtendBlockProvider.super.getPlacementState(args, options); + return CompatBlockProvider.super.getPlacementState(args, options); } public CompatMapCodec getCompatCodec() { @@ -80,6 +88,6 @@ public boolean canPathfindThrough(CanPathfindThroughArgs args) { @Override public Boolean canPathfindThrough(CanPathfindThroughArgs args, Options options) { - return ExtendBlockProvider.super.canPathfindThrough(args, options); + return CompatBlockProvider.super.canPathfindThrough(args, options); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java index 7e8a8f701..3fde8b430 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatStairsBlock.java @@ -7,8 +7,9 @@ import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; import net.minecraft.state.property.BooleanProperty; -import net.minecraft.state.property.DirectionProperty; import net.minecraft.state.property.EnumProperty; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlockProvider; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; @@ -16,11 +17,13 @@ import net.pitan76.mcpitanlib.api.event.block.CanPathfindThroughArgs; import net.pitan76.mcpitanlib.api.event.block.OutlineShapeEvent; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; +import net.pitan76.mcpitanlib.api.state.property.CompatProperties; +import net.pitan76.mcpitanlib.api.state.property.DirectionProperty; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; -public class CompatStairsBlock extends StairsBlock implements ExtendBlockProvider { +public class CompatStairsBlock extends StairsBlock implements CompatBlockProvider { - public static final DirectionProperty FACING = StairsBlock.FACING; + public static final DirectionProperty FACING = CompatProperties.HORIZONTAL_FACING; public static final EnumProperty HALF = StairsBlock.HALF; public static final EnumProperty SHAPE = StairsBlock.SHAPE; public static final BooleanProperty WATERLOGGED = StairsBlock.WATERLOGGED; @@ -29,6 +32,15 @@ public class CompatStairsBlock extends StairsBlock implements ExtendBlockProvide private final BlockState baseBlockState; + /** + * get compatible block settings + * @return CompatibleBlockSettings + */ + @Override + public CompatibleBlockSettings getCompatSettings() { + return compatSettings; + } + public CompatStairsBlock(BlockState baseBlockState, Settings settings) { super(baseBlockState, settings); this.baseBlockState = baseBlockState; @@ -39,14 +51,6 @@ public CompatStairsBlock(BlockState baseBlockState, CompatibleBlockSettings sett this.compatSettings = settings; } - /** - * get compatible block settings - * @return CompatibleBlockSettings - */ - public CompatibleBlockSettings getCompatSettings() { - return compatSettings; - } - public VoxelShape getOutlineShape(OutlineShapeEvent event) { return super.getOutlineShape(event.state, event.world, event.pos, event.context); } @@ -81,19 +85,19 @@ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos po @Deprecated @Override public void appendProperties(AppendPropertiesArgs args, Options options) { - ExtendBlockProvider.super.appendProperties(args, options); + CompatBlockProvider.super.appendProperties(args, options); } @Deprecated @Override public BlockState getPlacementState(PlacementStateArgs args, Options options) { - return ExtendBlockProvider.super.getPlacementState(args, options); + return CompatBlockProvider.super.getPlacementState(args, options); } @Deprecated @Override public VoxelShape getOutlineShape(OutlineShapeEvent event, Options options) { - return ExtendBlockProvider.super.getOutlineShape(event, options); + return CompatBlockProvider.super.getOutlineShape(event, options); } public CompatMapCodec getCompatCodec() { @@ -113,7 +117,7 @@ public boolean canPathfindThrough(CanPathfindThroughArgs args) { @Override public Boolean canPathfindThrough(CanPathfindThroughArgs args, Options options) { - return ExtendBlockProvider.super.canPathfindThrough(args, options); + return CompatBlockProvider.super.canPathfindThrough(args, options); } public BlockState getBaseBlockState() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java index 1be4a26c4..227cf5d42 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatibleBlockSettings.java @@ -8,13 +8,20 @@ import java.util.function.Function; import java.util.function.ToIntFunction; +@Deprecated public class CompatibleBlockSettings { - private final AbstractBlock.Settings settings; + + protected final AbstractBlock.Settings settings; public CompatibleBlockSettings() { this.settings = AbstractBlock.Settings.of(Material.STONE); } + @Deprecated + public static CompatibleBlockSettings of() { + return new CompatibleBlockSettings(); + } + public CompatibleBlockSettings(CompatibleMaterial material, MapColor mapColor) { this.settings = AbstractBlock.Settings.of(material.getMaterial(), mapColor); } @@ -36,10 +43,12 @@ public CompatibleBlockSettings(CompatibleMaterial material, Function mapColor) { return new CompatibleBlockSettings(material, mapColor); } @@ -61,6 +72,7 @@ public CompatibleBlockSettings(AbstractBlock block) { this.settings = AbstractBlock.Settings.copy(block); } + @Deprecated public static CompatibleBlockSettings copy(AbstractBlock block) { return new CompatibleBlockSettings(block); } @@ -105,6 +117,7 @@ public CompatibleBlockSettings mapColor(Function color) { return this; } + @Deprecated public CompatibleBlockSettings dropsLike(Block source) { settings.dropsLike(source); return this; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java index 538f98601..e3bd20c7c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlock.java @@ -33,6 +33,7 @@ import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; import net.pitan76.mcpitanlib.api.event.block.StateForNeighborUpdateArgs; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.TextUtil; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; import org.jetbrains.annotations.Nullable; @@ -108,7 +109,7 @@ public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Ran @Override @Deprecated public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - return onRightClick(new BlockUseEvent(state, world, pos, player, hand, hit)); + return onRightClick(new BlockUseEvent(state, world, pos, player, hand, hit)).toActionResult(); } /** @@ -116,8 +117,8 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt * @param event ActionResultType * @return BlockUseEvent */ - public ActionResult onRightClick(BlockUseEvent event) { - return super.onUse(event.state, event.world, event.pos, event.player.getPlayerEntity(), event.hand, event.hit); + public CompatActionResult onRightClick(BlockUseEvent event) { + return CompatActionResult.create(super.onUse(event.state, event.world, event.pos, event.player.getPlayerEntity(), event.hand, event.hit)); } @Deprecated diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java index 19f450e2e..996661e2f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/ExtendBlockProvider.java @@ -4,11 +4,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; -import net.minecraft.util.ActionResult; import net.minecraft.util.shape.VoxelShape; import net.pitan76.mcpitanlib.api.event.block.*; import net.pitan76.mcpitanlib.api.event.block.result.BlockBreakResult; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.TextUtil; import java.util.List; @@ -52,7 +52,7 @@ default void scheduledTick(BlockScheduledTickEvent event, Options options) { * @param options Options * @return ActionResult */ - default ActionResult onRightClick(BlockUseEvent event, Options options) { + default CompatActionResult onRightClick(BlockUseEvent event, Options options) { options.cancel = false; return null; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java new file mode 100644 index 000000000..e0d04ee8b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java @@ -0,0 +1,115 @@ +package net.pitan76.mcpitanlib.api.block.v2; + +import net.minecraft.block.AbstractBlock; +import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; +import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.color.CompatDyeColor; +import net.pitan76.mcpitanlib.api.util.color.CompatMapColor; +import net.pitan76.mcpitanlib.midohra.block.BlockState; + +import java.util.function.ToIntFunction; + +public class BlockSettingsBuilder { + + public CompatIdentifier id; + public float hardness; + public float resistance; + public CompatBlockSoundGroup blockSoundGroup; + public CompatibleMaterial material; + public CompatMapColor mapColor; + public CompatDyeColor dyeColor; + public boolean requiresTool; + public boolean dropsNothing; + public ToIntFunction luminance; + + public BlockSettingsBuilder(CompatIdentifier id) { + this.id = id; + } + + public BlockSettingsBuilder() { + + } + + public BlockSettingsBuilder hardness(float hardness) { + this.hardness = hardness; + return this; + } + + public BlockSettingsBuilder resistance(float resistance) { + this.resistance = resistance; + return this; + } + + public BlockSettingsBuilder strength(float hardness, float resistance) { + this.hardness = hardness; + this.resistance = resistance; + return this; + } + + public BlockSettingsBuilder sounds(CompatBlockSoundGroup blockSoundGroup) { + this.blockSoundGroup = blockSoundGroup; + return this; + } + + public BlockSettingsBuilder material(CompatibleMaterial material) { + this.material = material; + return this; + } + + public BlockSettingsBuilder mapColor(CompatMapColor mapColor) { + this.mapColor = mapColor; + return this; + } + + public BlockSettingsBuilder dyeColor(CompatDyeColor dyeColor) { + this.dyeColor = dyeColor; + return this; + } + + public BlockSettingsBuilder requiresTool() { + this.requiresTool = true; + return this; + } + + public BlockSettingsBuilder dropsNothing() { + this.dropsNothing = true; + return this; + } + + public BlockSettingsBuilder luminance(ToIntFunction luminance) { + this.luminance = luminance; + return this; + } + + public CompatibleBlockSettings build() { + return build(id); + } + + public AbstractBlock.Settings _build() { + return build().build(); + } + + public CompatibleBlockSettings build(CompatIdentifier id) { + + CompatibleBlockSettings settings = CompatibleBlockSettings.of(id); + if (material != null) + settings = CompatibleBlockSettings.of(id, material); + + if (mapColor != null) { + settings = settings.mapColor(mapColor.get()); + } else if (dyeColor != null) { + settings = settings.mapColor(dyeColor.get().getMapColor()); + } + + if (requiresTool) settings.requiresTool(); + if (dropsNothing) settings.dropsNothing(); + if (luminance != null) settings.luminance((state) -> luminance.applyAsInt(BlockState.of(state))); + + return settings.strength(hardness, resistance).sounds(blockSoundGroup); + } + + public AbstractBlock.Settings _build(CompatIdentifier id) { + return build(id).build(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java new file mode 100644 index 000000000..57f75cc60 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -0,0 +1,22 @@ +package net.pitan76.mcpitanlib.api.block.v2; + +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; + +public class CompatBlock extends ExtendBlock { + + public CompatibleBlockSettings settings; + + public CompatBlock(CompatibleBlockSettings settings) { + super(settings); + this.settings = settings; + } + + public CompatibleBlockSettings getCompatSettings() { + return settings; + } + + public BlockWrapper getWrapper() { + return BlockWrapper.of(this); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java new file mode 100644 index 000000000..5a5d7fe80 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.api.block.v2; + +import net.minecraft.block.Block; +import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; + +public interface CompatBlockProvider extends ExtendBlockProvider { + CompatibleBlockSettings getCompatSettings(); + + default BlockWrapper getWrapper() { + return this instanceof Block ? BlockWrapper.of((Block) this) : BlockWrapper.of(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatibleBlockSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatibleBlockSettings.java new file mode 100644 index 000000000..8b8b78bb3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatibleBlockSettings.java @@ -0,0 +1,256 @@ +package net.pitan76.mcpitanlib.api.block.v2; + +import com.mojang.serialization.Codec; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.MapColor; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.DyeColor; +import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; +import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.function.Function; +import java.util.function.ToIntFunction; + +@SuppressWarnings("deprecation") +public class CompatibleBlockSettings extends net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings { + protected CompatIdentifier identifier = null; + public boolean changedTranslationKey = false; + + public static final Codec CODEC = Codec.unit(CompatibleBlockSettings::new); + + @Deprecated + protected CompatibleBlockSettings() { + super(); + } + + public CompatibleBlockSettings(CompatIdentifier identifier) { + super(); + setId(identifier); + } + + public static CompatibleBlockSettings of(CompatIdentifier id) { + return new CompatibleBlockSettings(id); + } + + @Deprecated + public CompatibleBlockSettings setId(CompatIdentifier identifier) { + this.identifier = identifier; + return this; + } + + private static CompatibleBlockSettings copy(CompatibleMaterial material, CompatibleBlockSettings settings) { + settings.mapColor(material.getColor()); + return settings; + } + + public CompatibleBlockSettings(CompatIdentifier id, CompatibleMaterial material, MapColor mapColor) { + this(id); + copy(material, this); + mapColor(mapColor); + } + + public CompatibleBlockSettings(CompatIdentifier id, CompatibleMaterial material, DyeColor dyeColor) { + this(id); + copy(material, this); + mapColor(dyeColor); + } + + public CompatibleBlockSettings(CompatIdentifier id, CompatibleMaterial material) { + this(id); + copy(material, this); + } + + public CompatibleBlockSettings(CompatIdentifier id, CompatibleMaterial material, Function mapColor) { + this(id); + copy(material, this); + mapColor(mapColor); + } + + public static CompatibleBlockSettings of(CompatIdentifier id, CompatibleMaterial material, MapColor mapColor) { + return new CompatibleBlockSettings(id, material, mapColor); + } + + public static CompatibleBlockSettings of(CompatIdentifier id, CompatibleMaterial material, DyeColor dyeColor) { + return new CompatibleBlockSettings(id, material, dyeColor); + } + + public static CompatibleBlockSettings of(CompatIdentifier id, CompatibleMaterial material) { + return new CompatibleBlockSettings(id, material); + } + + public static CompatibleBlockSettings of(CompatIdentifier id, CompatibleMaterial material, Function mapColor) { + return new CompatibleBlockSettings(id, material, mapColor); + } + + public CompatibleBlockSettings(CompatIdentifier id, AbstractBlock block) { + super(block); + setId(id); + } + + public static CompatibleBlockSettings copy(CompatIdentifier id, AbstractBlock block) { + return new CompatibleBlockSettings(id, block); + } + + public CompatibleBlockSettings air() { + super.air(); + return this; + } + + public CompatibleBlockSettings blockVision(AbstractBlock.ContextPredicate predicate) { + super.blockVision(predicate); + return this; + } + + public CompatibleBlockSettings postProcess(AbstractBlock.ContextPredicate predicate) { + super.postProcess(predicate); + return this; + } + + public CompatibleBlockSettings solidBlock(AbstractBlock.ContextPredicate predicate) { + super.solidBlock(predicate); + return this; + } + + public CompatibleBlockSettings suffocates(AbstractBlock.ContextPredicate predicate) { + super.suffocates(predicate); + return this; + } + + public CompatibleBlockSettings mapColor(MapColor color) { + super.mapColor(color); + return this; + } + + public CompatibleBlockSettings mapColor(DyeColor color) { + super.mapColor(color); + return this; + } + + public CompatibleBlockSettings mapColor(Function color) { + super.mapColor(color); + return this; + } + + @Deprecated + public CompatibleBlockSettings dropsLike(Block source) { + super.dropsLike(source); + return this; + } + + public CompatibleBlockSettings breakInstantly() { + super.breakInstantly(); + return this; + } + + public CompatibleBlockSettings dropsNothing() { + super.dropsNothing(); + return this; + } + + public CompatibleBlockSettings dynamicBounds() { + super.dynamicBounds(); + return this; + } + + public CompatibleBlockSettings hardness(float hardness) { + super.hardness(hardness); + return this; + } + + public CompatibleBlockSettings noBlockBreakParticles() { + super.noBlockBreakParticles(); + return this; + } + + public CompatibleBlockSettings requiresTool() { + super.requiresTool(); + return this; + } + + public CompatibleBlockSettings noCollision() { + super.noCollision(); + return this; + } + + public CompatibleBlockSettings nonOpaque() { + super.nonOpaque(); + return this; + } + + public CompatibleBlockSettings resistance(float resistance) { + super.resistance(resistance); + return this; + } + + public CompatibleBlockSettings strength(float strength) { + super.strength(strength); + return this; + } + + public CompatibleBlockSettings strength(float hardness, float resistance) { + super.strength(hardness, resistance); + return this; + } + + public CompatibleBlockSettings ticksRandomly() { + super.ticksRandomly(); + return this; + } + + public CompatibleBlockSettings sounds(CompatBlockSoundGroup blockSoundGroup) { + super.sounds(blockSoundGroup); + return this; + } + + public CompatibleBlockSettings luminance(ToIntFunction luminance) { + super.luminance(luminance); + return this; + } + + public CompatibleBlockSettings jumpVelocityMultiplier(float jumpVelocityMultiplier) { + super.jumpVelocityMultiplier(jumpVelocityMultiplier); + return this; + } + + public CompatibleBlockSettings slipperiness(float slipperiness) { + super.slipperiness(slipperiness); + return this; + } + + public CompatibleBlockSettings velocityMultiplier(float velocityMultiplier) { + super.velocityMultiplier(velocityMultiplier); + return this; + } + + public CompatibleBlockSettings emissiveLighting(AbstractBlock.ContextPredicate predicate) { + super.emissiveLighting(predicate); + return this; + } + + public CompatibleBlockSettings offset(AbstractBlock.OffsetType offsetType) { + super.offset(offsetType); + return this; + } + + public CompatibleBlockSettings allowsSpawning(AbstractBlock.TypedContextPredicate> predicate) { + super.allowsSpawning(predicate); + return this; + } + + public AbstractBlock.Settings build() { + super.build(); + return settings; + } + + @Deprecated + @Override + public CompatibleBlockSettings sounds(BlockSoundGroup blockSoundGroup) { + super.sounds(blockSoundGroup); + return this; + } + + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java index 4d48e38f1..dc47c7d65 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java @@ -40,8 +40,6 @@ public interface WorldRenderContext { ClientWorld getWorld(); - Profiler getProfiler(); - @Deprecated boolean isAdvancedTranslucency(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/EntityTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/EntityTypeBuilder.java index 25263250e..3edfde07e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/EntityTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/EntityTypeBuilder.java @@ -6,6 +6,7 @@ import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; +import net.pitan76.mcpitanlib.MCPitanLib; public class EntityTypeBuilder { @@ -20,7 +21,7 @@ public class EntityTypeBuilder { private int maxTrackDistance; private int trackTickInterval; private Boolean alwaysUpdateVelocity = null; - + private String translationKey = "entity." + MCPitanLib.MOD_ID; @Deprecated // Recommend: create() @@ -51,7 +52,7 @@ public static EntityTypeBuilder create(SpawnGroup spawnGro } public EntityType build() { - return new ExtendEntityType<>(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval, alwaysUpdateVelocity); + return new ExtendEntityType<>(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval, translationKey, alwaysUpdateVelocity); } public EntityTypeBuilder setSpawnGroup(SpawnGroup spawnGroup) { @@ -116,4 +117,8 @@ public EntityTypeBuilder setAlwaysUpdateVelocity(Boolean alwaysUpdateVelocity this.alwaysUpdateVelocity = alwaysUpdateVelocity; return this; } + + public void setTranslationKey(String translationKey) { + this.translationKey = translationKey; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntityType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntityType.java index bfaebfdfa..eb71114e2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntityType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/ExtendEntityType.java @@ -8,10 +8,18 @@ import net.minecraft.entity.SpawnGroup; import net.minecraft.world.World; +import java.util.Optional; + public class ExtendEntityType extends EntityType { private final Boolean alwaysUpdateVelocity; - public ExtendEntityType(EntityFactory factory, SpawnGroup spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet canSpawnBlocks, EntityDimensions entityDimensions, int maxTrackDistance, int trackTickInterval, Boolean alwaysUpdateVelocity) { + @Deprecated + public ExtendEntityType(EntityFactory factory, SpawnGroup spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet canSpawnBlocks, EntityDimensions entityDimensions, float spawnBoxScale, int maxTrackDistance, int trackTickInterval, String translationKey, Boolean alwaysUpdateVelocity) { + super((factory::create), spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval); + this.alwaysUpdateVelocity = alwaysUpdateVelocity; + } + + public ExtendEntityType(EntityFactory factory, SpawnGroup spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet canSpawnBlocks, EntityDimensions entityDimensions, int maxTrackDistance, int trackTickInterval, String translationKey, Boolean alwaysUpdateVelocity) { super((factory::create), spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnBlocks, entityDimensions, maxTrackDistance, trackTickInterval); this.alwaysUpdateVelocity = alwaysUpdateVelocity; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index e057abc8c..f7c57b481 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -329,7 +329,7 @@ public void incrementStat(CompatIdentifier id) { } public void teleport(double x, double y, double z) { - getEntity().teleport(x, y, z); + getEntity().teleport(x, y, z, false); } public ItemStack getMainHandStack() { @@ -344,10 +344,6 @@ public Direction getHorizontalFacing() { return getEntity().getHorizontalFacing(); } - public void eatFood(World world, ItemStack stack, CompatFoodComponent foodComponentBuilder) { - getEntity().eatFood(world, stack); - } - public double getX() { return getEntity().getX(); } @@ -477,32 +473,19 @@ public void setTotalExperience(int experience) { getEntity().totalExperience = experience; } - public boolean isFallFlying() { - return getEntity().isFallFlying(); - } - public boolean isSwimming() { return getEntity().isSwimming(); } - public void startFallFlying() { - getEntity().startFallFlying(); - } - - public void stopFallFlying() { - getEntity().stopFallFlying(); - } - - @Deprecated - public int getFallFlyingTicks() { - return 0; + public void setStackInHand(Hand hand, ItemStack stack) { + getEntity().setStackInHand(hand, stack); } - public boolean checkFallFlying() { - return getEntity().checkFallFlying(); + public void setStackInHand(Hand hand, net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + setStackInHand(hand, stack.toMinecraft()); } - public void setStackInHand(Hand hand, ItemStack stack) { - getEntity().setStackInHand(hand, stack); + public net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStackInHand(Hand hand) { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getStackInHand(hand)); } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java index 62c6b3e4a..55b5f4d50 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java @@ -4,13 +4,13 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.WorldUtil; public class BlockUseEvent extends BaseEvent { @@ -64,20 +64,20 @@ public boolean isClient() { return world.isClient(); } - public ActionResult success() { - return ActionResult.SUCCESS; + public CompatActionResult success() { + return CompatActionResult.SUCCESS; } - public ActionResult fail() { - return ActionResult.FAIL; + public CompatActionResult fail() { + return CompatActionResult.FAIL; } - public ActionResult pass() { - return ActionResult.PASS; + public CompatActionResult pass() { + return CompatActionResult.PASS; } - public ActionResult consume() { - return ActionResult.CONSUME; + public CompatActionResult consume() { + return CompatActionResult.CONSUME; } /** diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java index c4586bfb7..3eec1b815 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java @@ -39,4 +39,8 @@ public ShapeContext getContext() { public > T getProperty(Property property) { return state.get(property); } + + public > boolean containsProperty(Property property) { + return state.contains(property); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java index 0183559b3..e68921d9b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java @@ -3,10 +3,11 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.StackActionResult; public class ItemUseEvent extends BaseEvent { @@ -26,6 +27,10 @@ public ItemStack getStack() { return stack; } + public net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStack() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(stack); + } + public Hand getHand() { return hand; } @@ -33,6 +38,7 @@ public Hand getHand() { public World getWorld() { return world; } + public Player getUser() { return user; } @@ -41,27 +47,45 @@ public boolean isClient() { return world.isClient(); } - public TypedActionResult success(ItemStack stack) { - return TypedActionResult.success(stack); + public StackActionResult success(ItemStack stack) { + if (getStack() != stack) + StackActionResult.success(stack); + + return success(); } - public TypedActionResult fail() { - return TypedActionResult.fail(stack); + public StackActionResult success(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return success(stack.toMinecraft()); } - public TypedActionResult pass() { - return TypedActionResult.pass(stack); + public StackActionResult success() { + return StackActionResult.create(CompatActionResult.SUCCESS); } - public TypedActionResult consume() { - return TypedActionResult.consume(stack); + public CompatActionResult fail() { + return CompatActionResult.FAIL; } - public boolean isSneaking() { - return user.isSneaking(); + public CompatActionResult pass() { + return CompatActionResult.PASS; } - public TypedActionResult success() { - return success(stack); + public StackActionResult consume(ItemStack stack) { + if (getStack() != stack) + StackActionResult.consume(stack); + + return consume(); + } + + public CompatActionResult consume(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return consume(stack.toMinecraft()); + } + + public StackActionResult consume() { + return StackActionResult.create(CompatActionResult.CONSUME); + } + + public boolean isSneaking() { + return user.isSneaking(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java index 583a4a4fb..080663db9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java @@ -5,7 +5,6 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -14,6 +13,7 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.WorldUtil; import org.jetbrains.annotations.Nullable; @@ -75,20 +75,20 @@ public ItemStack getStack() { return stack; } - public ActionResult success() { - return ActionResult.SUCCESS; + public CompatActionResult success() { + return CompatActionResult.SUCCESS; } - public ActionResult fail() { - return ActionResult.FAIL; + public CompatActionResult fail() { + return CompatActionResult.FAIL; } - public ActionResult pass() { - return ActionResult.PASS; + public CompatActionResult pass() { + return CompatActionResult.PASS; } - public ActionResult consume() { - return ActionResult.CONSUME; + public CompatActionResult consume() { + return CompatActionResult.CONSUME; } public BlockEntity getBlockEntity() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java index 879d27d4c..53c2822f4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnEntityEvent.java @@ -3,10 +3,10 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; public class ItemUseOnEntityEvent extends BaseEvent { @@ -49,19 +49,19 @@ public boolean isClient() { return user.isClient(); } - public ActionResult success() { - return ActionResult.SUCCESS; + public CompatActionResult success() { + return CompatActionResult.SUCCESS; } - public ActionResult fail() { - return ActionResult.FAIL; + public CompatActionResult fail() { + return CompatActionResult.FAIL; } - public ActionResult pass() { - return ActionResult.PASS; + public CompatActionResult pass() { + return CompatActionResult.PASS; } - public ActionResult consume() { - return ActionResult.CONSUME; + public CompatActionResult consume() { + return CompatActionResult.CONSUME; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/EventResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/EventResult.java index eefce4ca1..67dcae814 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/EventResult.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/EventResult.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.event.result; import net.minecraft.util.ActionResult; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; public class EventResult { @@ -40,4 +41,8 @@ public dev.architectury.event.EventResult getResult() { public ActionResult toActionResult() { return result.asMinecraft(); } + + public CompatActionResult toCompatActionResult() { + return CompatActionResult.create(toActionResult()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/TypedEventResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/TypedEventResult.java index 971177e9b..78487eedb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/TypedEventResult.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/result/TypedEventResult.java @@ -1,8 +1,10 @@ package net.pitan76.mcpitanlib.api.event.result; import dev.architectury.event.CompoundEventResult; +import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; -import net.minecraft.util.TypedActionResult; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.StackActionResult; public class TypedEventResult { protected final dev.architectury.event.CompoundEventResult result; @@ -32,11 +34,28 @@ public dev.architectury.event.CompoundEventResult getResult() { return result; } - public TypedActionResult toTypedActionResult() { - return result.asMinecraft(); + public ActionResult toActionResult() { + return result.result().asMinecraft(); } - public ActionResult toActionResult() { - return result.asMinecraft().getResult(); + public CompatActionResult toCompatActionResult() { + return CompatActionResult.of(result.result().asMinecraft()); + } + + public CompatActionResult toCompatActionResult(ItemStack stack) { + if (result.object() != stack) + return toCompatActionResult(); + + if (toActionResult() == ActionResult.SUCCESS) + return StackActionResult.success(stack); + + if (toActionResult() == ActionResult.CONSUME) + return StackActionResult.consume(stack); + + return toCompatActionResult(); + } + + public CompatActionResult toCompatActionResult(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return toCompatActionResult(stack.toMinecraft()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/InteractionEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/InteractionEventRegistry.java index d31cf54c5..c3aba95e6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/InteractionEventRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/InteractionEventRegistry.java @@ -5,11 +5,13 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.result.EventResult; -import net.pitan76.mcpitanlib.api.event.result.TypedEventResult; import net.pitan76.mcpitanlib.api.event.v0.event.ClickBlockEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.StackActionResult; public class InteractionEventRegistry { @SuppressWarnings("deprecation") @@ -49,12 +51,25 @@ public interface RightClickBlock { } public interface RightClickItem { - @SuppressWarnings("deprecation") default CompoundEventResult click(PlayerEntity var1, Hand var2) { - return click(new Player(var1), var2).getResult(); + CompatActionResult result = click(new Player(var1), var2); + + ItemStack stack = result instanceof StackActionResult ? ((StackActionResult) result).getStack() : var1.getStackInHand(var2); + + if (result.equals(CompatActionResult.SUCCESS) || result.equals(CompatActionResult.CONSUME) || result.equals(CompatActionResult.SUCCESS_SERVER)) { + return CompoundEventResult.interruptTrue(stack); + } + if (result.equals(CompatActionResult.FAIL)) { + return CompoundEventResult.interruptFalse(stack); + } + if (result.equals(CompatActionResult.STOP)) { + return CompoundEventResult.interrupt(null, stack); + } + return CompoundEventResult.pass(); + } - TypedEventResult click(Player player, Hand hand); + CompatActionResult click(Player player, Hand hand); } public interface ClientLeftClickAir { @@ -76,9 +91,9 @@ default void click(PlayerEntity var1, Hand var2) { public interface InteractEntity { @SuppressWarnings("deprecation") default dev.architectury.event.EventResult interact(PlayerEntity var1, Entity var2, Hand var3) { - return interact(new Player(var1), var2, var3).getResult(); + return interact(new Player(var1), var2, var3).toEventResult().getResult(); } - EventResult interact(Player player, Entity entity, Hand hand); + CompatActionResult interact(Player player, Entity entity, Hand hand); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index 6263593e5..cba915da9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -9,11 +9,13 @@ import java.util.function.Supplier; +@Deprecated public class CompatibleItemSettings { - private final ExtendSettings settings = new ExtendSettings(); + protected final ExtendSettings settings = new ExtendSettings(); protected Identifier itemGroupId = null; + @Deprecated public static CompatibleItemSettings of() { return new CompatibleItemSettings(); } @@ -72,7 +74,7 @@ public CompatibleItemSettings recipeRemainder(Item recipeRemainder) { return this; } - public ExtendSettings build() { + public Item.Settings build() { if (itemGroupId != null) { if (CreativeTabBuilder.itemGroupBuilderMap.containsKey(itemGroupId)) { CreativeTabBuilder itemGroupBuilder = CreativeTabBuilder.itemGroupBuilderMap.get(itemGroupId); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java index d7efce86d..4e9620c84 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendBlockItem.java @@ -13,6 +13,8 @@ import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.*; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.StackActionResult; import net.pitan76.mcpitanlib.core.Dummy; import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import org.jetbrains.annotations.Nullable; @@ -34,14 +36,14 @@ public ExtendBlockItem(Block block, CompatibleItemSettings settings) { @Deprecated @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - return onRightClick(new ItemUseEvent(world, user, hand)); + return onRightClick(new ItemUseEvent(world, user, hand)).toTypedActionResult(); } @Deprecated @Override public ActionResult useOnBlock(ItemUsageContext context) { ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; - return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())); + return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())).toActionResult(); } @Deprecated @@ -53,11 +55,12 @@ public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { @Deprecated @Override public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) { - return onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand)); + return onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand)).toActionResult(); } + // TODO: Remove this method @Deprecated - @Override + //@Override public boolean hasRecipeRemainder() { return hasRecipeRemainder(new Dummy()); } @@ -80,8 +83,8 @@ public void onCraft(ItemStack stack, World world, PlayerEntity player) { * @param event ItemUseEvent * @return ActionResultType */ - public TypedActionResult onRightClick(ItemUseEvent event) { - return super.use(event.world, event.user.getPlayerEntity(), event.hand); + public StackActionResult onRightClick(ItemUseEvent event) { + return StackActionResult.create(super.use(event.world, event.user.getPlayerEntity(), event.hand)); } /** @@ -89,8 +92,8 @@ public TypedActionResult onRightClick(ItemUseEvent event) { * @param event ItemUseOnBlockEvent * @return ActionResultType */ - public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { - return super.useOnBlock(event.toIUC()); + public CompatActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { + return CompatActionResult.create(super.useOnBlock(event.toIUC())); } /** @@ -107,8 +110,8 @@ public ItemStack onFinishUsing(ItemFinishUsingEvent event) { * @param event ItemUseOnEntityEvent * @return ActionResultType */ - public ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { - return super.useOnEntity(event.stack, event.user.getEntity(), event.entity, event.hand); + public CompatActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { + return CompatActionResult.create(super.useOnEntity(event.stack, event.user.getEntity(), event.entity, event.hand)); } /** @@ -117,7 +120,7 @@ public ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { * @return boolean */ public boolean hasRecipeRemainder(Dummy dummy) { - return super.hasRecipeRemainder(); + return false; } /** diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java index 3f1484e15..eefc0eacf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItem.java @@ -2,21 +2,18 @@ import net.minecraft.block.BlockState; import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.Entity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; import net.minecraft.text.Text; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.Rarity; -import net.minecraft.util.TypedActionResult; +import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.*; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.StackActionResult; import net.pitan76.mcpitanlib.core.Dummy; import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import org.jetbrains.annotations.Nullable; @@ -24,6 +21,7 @@ import java.util.List; public class ExtendItem extends Item { + public ExtendItem(Settings settings) { super(settings); } @@ -35,14 +33,14 @@ public ExtendItem(CompatibleItemSettings settings) { @Deprecated @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - return onRightClick(new ItemUseEvent(world, user, hand)); + return onRightClick(new ItemUseEvent(world, user, hand)).toTypedActionResult(); } @Deprecated @Override public ActionResult useOnBlock(ItemUsageContext context) { ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; - return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())); + return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())).toActionResult(); } @Deprecated @@ -54,7 +52,12 @@ public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { @Deprecated @Override public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) { - return onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand)); + return onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand)).toActionResult(); + } + + @Override + public UseAction getUseAction(ItemStack stack) { + return super.getUseAction(stack); } @Deprecated @@ -93,8 +96,8 @@ public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos * @param event ItemUseEvent * @return ActionResultType */ - public TypedActionResult onRightClick(ItemUseEvent event) { - return super.use(event.world, event.user.getPlayerEntity(), event.hand); + public StackActionResult onRightClick(ItemUseEvent event) { + return StackActionResult.create(CompatActionResult.create(super.use(event.world, event.user.getPlayerEntity(), event.hand).getResult()), event.stack); } /** @@ -102,8 +105,8 @@ public TypedActionResult onRightClick(ItemUseEvent event) { * @param event ItemUseOnBlockEvent * @return ActionResultType */ - public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { - return super.useOnBlock(event.toIUC()); + public CompatActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { + return CompatActionResult.create(super.useOnBlock(event.toIUC())); } /** @@ -120,8 +123,8 @@ public ItemStack onFinishUsing(ItemFinishUsingEvent event) { * @param event ItemUseOnEntityEvent * @return ActionResultType */ - public ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { - return super.useOnEntity(event.stack, event.user.getEntity(), event.entity, event.hand); + public CompatActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { + return CompatActionResult.create(super.useOnEntity(event.stack, event.user.getEntity(), event.entity, event.hand)); } /** @@ -130,7 +133,7 @@ public ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event) { * @return boolean */ public boolean hasRecipeRemainder(Dummy dummy) { - return super.hasRecipeRemainder(); + return false; } /** @@ -233,7 +236,7 @@ public boolean canRepair(ItemStack stack, ItemStack ingredient) { } public boolean canRepair(CanRepairArgs args) { - return super.canRepair(args.stack, args.ingredient); + return false; } @Deprecated diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java index 17874b97c..7742fa05e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/ExtendItemProvider.java @@ -1,10 +1,10 @@ package net.pitan76.mcpitanlib.api.item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; import net.minecraft.util.Rarity; -import net.minecraft.util.TypedActionResult; import net.pitan76.mcpitanlib.api.event.item.*; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.StackActionResult; public interface ExtendItemProvider { @@ -14,7 +14,7 @@ public interface ExtendItemProvider { * @param event ItemUseEvent * @return ActionResultType */ - default TypedActionResult onRightClick(ItemUseEvent event, Options options) { + default StackActionResult onRightClick(ItemUseEvent event, Options options) { options.cancel = false; return null; } @@ -24,7 +24,7 @@ default TypedActionResult onRightClick(ItemUseEvent event, Options op * @param event ItemUseOnBlockEvent * @return ActionResultType */ - default ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event, Options options) { + default CompatActionResult onRightClickOnBlock(ItemUseOnBlockEvent event, Options options) { options.cancel = false; return null; } @@ -44,7 +44,7 @@ default ItemStack onFinishUsing(ItemFinishUsingEvent event, Options options) { * @param event ItemUseOnEntityEvent * @return ActionResult */ - default ActionResult onRightClickOnEntity(ItemUseOnEntityEvent event, Options options) { + default CompatActionResult onRightClickOnEntity(ItemUseOnEntityEvent event, Options options) { options.cancel = false; return null; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/FoodItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/FoodItem.java new file mode 100644 index 000000000..a188233b2 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/FoodItem.java @@ -0,0 +1,28 @@ +package net.pitan76.mcpitanlib.api.item; + +import net.pitan76.mcpitanlib.api.item.v2.CompatItem; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.v2.ItemSettingsBuilder; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class FoodItem extends CompatItem { + public FoodItem(int hunger, float saturation, CompatIdentifier id) { + this(new ItemSettingsBuilder().foodComponent(CompatFoodComponent.create().setHunger(hunger).setSaturation(saturation)).build(id)); + } + + public FoodItem(CompatFoodComponent component, CompatIdentifier id) { + this(new ItemSettingsBuilder().foodComponent(component).build(id)); + } + + public FoodItem(CompatFoodComponent component, ItemSettingsBuilder builder, CompatIdentifier id) { + this(builder.foodComponent(component).build(id)); + } + + public FoodItem(CompatFoodComponent component, CompatibleItemSettings settings) { + this(settings.food(component)); + } + + public FoodItem(CompatibleItemSettings settings) { + super(settings); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/RarityArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/RarityArgs.java new file mode 100644 index 000000000..6db9d79f4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/RarityArgs.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.item.args; + +import net.minecraft.item.ItemStack; + +public class RarityArgs { + public ItemStack stack; + + public RarityArgs(ItemStack stack) { + this.stack = stack; + } + + public ItemStack getStack() { + return stack; + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStack() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/UseActionArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/UseActionArgs.java new file mode 100644 index 000000000..acdbd404d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/UseActionArgs.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.item.args; + +import net.minecraft.item.ItemStack; + +public class UseActionArgs { + public ItemStack stack; + + public UseActionArgs(ItemStack stack) { + this.stack = stack; + } + + public static UseActionArgs of(ItemStack stack) { + return new UseActionArgs(stack); + } + + public static UseActionArgs of(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return of(stack.toMinecraft()); + } + + public ItemStack getStack() { + return stack; + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStack() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/consume/CompatUseAction.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/consume/CompatUseAction.java new file mode 100644 index 000000000..2655bd371 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/consume/CompatUseAction.java @@ -0,0 +1,45 @@ +package net.pitan76.mcpitanlib.api.item.consume; + +import net.minecraft.util.UseAction; +import net.pitan76.mcpitanlib.api.util.CompatStringIdentifiable; + +public class CompatUseAction implements CompatStringIdentifiable { + private final UseAction useAction; + + public static final CompatUseAction NONE = of(UseAction.NONE); + public static final CompatUseAction EAT = of(UseAction.EAT); + public static final CompatUseAction DRINK = of(UseAction.DRINK); + public static final CompatUseAction BLOCK = of(UseAction.BLOCK); + public static final CompatUseAction BOW = of(UseAction.BOW); + public static final CompatUseAction SPEAR = of(UseAction.SPEAR); + public static final CompatUseAction CROSSBOW = of(UseAction.CROSSBOW); + public static final CompatUseAction SPYGLASS = of(UseAction.SPYGLASS); + public static final CompatUseAction TOOT_HORN = of(UseAction.NONE); + public static final CompatUseAction BRUSH = of(UseAction.NONE); + + public CompatUseAction(UseAction useAction) { + this.useAction = useAction; + } + + public static CompatUseAction of(UseAction useAction) { + return new CompatUseAction(useAction); + } + + @Deprecated + public UseAction getUseAction() { + return useAction; + } + + public int getId() { + return -1; + } + + public String getName() { + return useAction.name(); + } + + @Override + public String asString_compat() { + return getName(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java index 11dc73a7a..bf926b6d7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java @@ -14,7 +14,7 @@ public class CompatibleAxeItem extends AxeItem implements ExtendItemProvider { public CompatibleAxeItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { - super(material, attackDamage, attackSpeed, settings.build()); + super(material.build(), attackDamage, attackSpeed, settings.build()); } public CompatibleAxeItem(float attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java index 706582577..1f4d84d57 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java @@ -14,7 +14,7 @@ public class CompatibleHoeItem extends HoeItem implements ExtendItemProvider { public CompatibleHoeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { - super(material, attackDamage, attackSpeed, settings.build()); + super(material.build(), attackDamage, attackSpeed, settings.build()); } public CompatibleHoeItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { @@ -80,4 +80,4 @@ public boolean isDamageable() { public boolean isDamageableOnDefault() { return super.isDamageable(); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java index b07dc547f..428f56df2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java @@ -21,7 +21,7 @@ protected CompatibleMiningToolItem(float attackDamage, float attackSpeed, ToolMa } public CompatibleMiningToolItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, TagKey tagKey, CompatibleItemSettings settings) { - this(attackDamage, attackSpeed, material, tagKey.getTagKey(), settings.build()); + this(attackDamage, attackSpeed, material.build(), tagKey.getTagKey(), settings.build()); } public boolean overrideIsSuitableFor(BlockState state) { @@ -83,4 +83,4 @@ public boolean isDamageable() { public boolean isDamageableOnDefault() { return super.isDamageable(); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java index 93cd0cf33..13e21b546 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java @@ -14,7 +14,7 @@ public class CompatiblePickaxeItem extends PickaxeItem implements ExtendItemProvider { public CompatiblePickaxeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { - super(material, attackDamage, attackSpeed, settings.build()); + super(material.build(), attackDamage, attackSpeed, settings.build()); } public CompatiblePickaxeItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { @@ -80,4 +80,4 @@ public boolean isDamageable() { public boolean isDamageableOnDefault() { return super.isDamageable(); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java index f138a2a78..356c8d7b4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java @@ -14,7 +14,7 @@ public class CompatibleShovelItem extends ShovelItem implements ExtendItemProvider { public CompatibleShovelItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { - super(material, attackDamage, attackSpeed, settings.build()); + super(material.build(), attackDamage, attackSpeed, settings.build()); } public CompatibleShovelItem(float attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { @@ -55,6 +55,7 @@ public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos /** * post hit event + * * @param event PostHitEvent * @return boolean */ @@ -64,6 +65,7 @@ public boolean postHit(PostHitEvent event) { /** * post mine event + * * @param event PostMineEvent * @return boolean */ @@ -80,4 +82,4 @@ public boolean isDamageable() { public boolean isDamageableOnDefault() { return super.isDamageable(); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java index be0f4c95a..1d345eccf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java @@ -14,7 +14,7 @@ public class CompatibleSwordItem extends SwordItem implements ExtendItemProvider { public CompatibleSwordItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { - super(material, attackDamage, attackSpeed, settings.build()); + super(material.build(), attackDamage, attackSpeed, settings.build()); } public CompatibleSwordItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { @@ -80,4 +80,4 @@ public boolean isDamageable() { public boolean isDamageableOnDefault() { return super.isDamageable(); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java index 41e3c7f87..646c1addc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java @@ -19,7 +19,7 @@ protected CompatibleToolItem(ToolMaterial material, Settings settings) { } public CompatibleToolItem(CompatibleToolMaterial material, CompatibleItemSettings settings) { - this(material, settings.build()); + this(material.build(), settings.build()); } public boolean overrideIsSuitableFor(BlockState state) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java index bbd737fd7..93e89c5ea 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolMaterial.java @@ -1,9 +1,13 @@ package net.pitan76.mcpitanlib.api.item.tool; +import net.minecraft.item.Item; import net.minecraft.item.ToolMaterial; import net.minecraft.recipe.Ingredient; +import net.minecraft.tag.ItemTags; +import net.minecraft.tag.TagKey; +import net.pitan76.mcpitanlib.api.util.IngredientUtil; -public interface CompatibleToolMaterial extends ToolMaterial { +public interface CompatibleToolMaterial { int getCompatMiningLevel(); @@ -11,45 +15,74 @@ public interface CompatibleToolMaterial extends ToolMaterial { float getCompatMiningSpeedMultiplier(); - Ingredient getCompatRepairIngredient(); + default Ingredient getCompatRepairIngredient() { + return IngredientUtil.fromTagByIdentifier(getRepairTag().id()); + } int getCompatDurability(); int getCompatEnchantability(); @Deprecated - @Override - default int getMiningLevel() { - return getCompatMiningLevel(); - } - - @Deprecated - @Override default float getAttackDamage() { return getCompatAttackDamage(); } @Deprecated - @Override default float getMiningSpeedMultiplier() { return getCompatMiningSpeedMultiplier(); } @Deprecated - @Override default Ingredient getRepairIngredient() { return getCompatRepairIngredient(); } @Deprecated - @Override default int getDurability() { return getCompatDurability(); } @Deprecated - @Override default int getEnchantability() { return getCompatEnchantability(); } + + default TagKey getRepairTag() { + return ItemTags.IRON_ORES; + } + + default ToolMaterial build() { + return new ToolMaterial() { + @Override + public int getDurability() { + return getCompatDurability(); + } + + @Override + public float getMiningSpeedMultiplier() { + return getCompatMiningSpeedMultiplier(); + } + + @Override + public float getAttackDamage() { + return getCompatAttackDamage(); + } + + @Override + public int getMiningLevel() { + return getCompatMiningLevel(); + } + + @Override + public int getEnchantability() { + return getCompatEnchantability(); + } + + @Override + public Ingredient getRepairIngredient() { + return getCompatRepairIngredient(); + } + }; + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java new file mode 100644 index 000000000..016f3bd1c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java @@ -0,0 +1,83 @@ +package net.pitan76.mcpitanlib.api.item.v2; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.Rarity; +import net.minecraft.util.UseAction; +import net.pitan76.mcpitanlib.api.event.item.CanRepairArgs; +import net.pitan76.mcpitanlib.api.event.item.EnchantabilityArgs; +import net.pitan76.mcpitanlib.api.event.item.EnchantableArgs; +import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.item.args.RarityArgs; +import net.pitan76.mcpitanlib.api.item.args.UseActionArgs; +import net.pitan76.mcpitanlib.api.item.consume.CompatUseAction; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; +import net.pitan76.mcpitanlib.api.util.CompatRarity; +import net.pitan76.mcpitanlib.core.Dummy; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; + +public class CompatItem extends ExtendItem { + + public CompatibleItemSettings settings; + + public CompatItem(CompatibleItemSettings settings) { + super(settings); + this.settings = settings; + } + + public CompatibleItemSettings getCompatSettings() { + return settings; + } + + public ItemWrapper getWrapper() { + return ItemWrapper.of(this); + } + + @Deprecated + @Override + public UseAction getUseAction(ItemStack stack) { + return getUseAction(new UseActionArgs(stack)).getUseAction(); + } + + public CompatUseAction getUseAction(UseActionArgs args) { + return CompatUseAction.of(super.getUseAction(args.stack)); + } + + @Deprecated + @Override + public Rarity getRarity(ItemStack stack) { + return getRarity(new RarityArgs(stack)).getRarity(); + } + + public CompatRarity getRarity(RarityArgs args) { + return settings.rarity; + } + + @Override + public boolean isEnchantable(EnchantableArgs args) { + return settings.enchantability != -1; + } + + @Override + public int getEnchantability(EnchantabilityArgs args) { + return settings.enchantability; + } + + @Override + public boolean canRepair(CanRepairArgs args) { + RepairIngredientTag tag = settings.repairIngredientTag; + return tag != null && tag.contains(args.stack); + } + + @Override + public boolean hasRecipeRemainder(Dummy dummy) { + return settings.recipeRemainder != null; + } + + @Override + protected String getOrCreateTranslationKey() { + if (settings.changedTranslationKey) + return settings.translationKey; + + return super.getOrCreateTranslationKey(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItemProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItemProvider.java new file mode 100644 index 000000000..9b115e77c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItemProvider.java @@ -0,0 +1,43 @@ +package net.pitan76.mcpitanlib.api.item.v2; + +import net.minecraft.item.Item; +import net.pitan76.mcpitanlib.api.event.item.CanRepairArgs; +import net.pitan76.mcpitanlib.api.event.item.EnchantabilityArgs; +import net.pitan76.mcpitanlib.api.event.item.EnchantableArgs; +import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.args.RarityArgs; +import net.pitan76.mcpitanlib.api.item.args.UseActionArgs; +import net.pitan76.mcpitanlib.api.item.consume.CompatUseAction; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; +import net.pitan76.mcpitanlib.api.util.CompatRarity; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; + +public interface CompatItemProvider extends ExtendItemProvider { + CompatibleItemSettings getCompatSettings(); + + default ItemWrapper getWrapper() { + return this instanceof Item ? ItemWrapper.of((Item) this) : ItemWrapper.of(); + } + + default CompatUseAction getUseAction(UseActionArgs args, Options options) { + options.cancel = false; + return null; + } + + default CompatRarity getRarity(RarityArgs args) { + return getCompatSettings().rarity; + } + + default boolean isEnchantable(EnchantableArgs args) { + return getCompatSettings().enchantability != -1; + } + + default int getEnchantability(EnchantabilityArgs args) { + return getCompatSettings().enchantability; + } + + default boolean canRepair(CanRepairArgs args) { + RepairIngredientTag tag = getCompatSettings().repairIngredientTag; + return tag != null && tag.contains(args.stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatibleItemSettings.java new file mode 100644 index 000000000..bfaf5d77a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatibleItemSettings.java @@ -0,0 +1,170 @@ +package net.pitan76.mcpitanlib.api.item.v2; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; +import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; +import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; +import net.pitan76.mcpitanlib.api.item.ExtendSettings; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.CompatRarity; +import net.pitan76.mcpitanlib.midohra.item.ItemGroupWrapper; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; + +import java.util.function.Supplier; + +@SuppressWarnings("deprecation") +public class CompatibleItemSettings extends net.pitan76.mcpitanlib.api.item.CompatibleItemSettings { + protected CompatIdentifier identifier = null; + public boolean changedTranslationKey = false; + public CompatRarity rarity = CompatRarity.COMMON; + public int enchantability = -1; + public RepairIngredientTag repairIngredientTag = null; + public Item recipeRemainder = null; + + public CompatibleItemSettings(CompatIdentifier identifier) { + super(); + setId(identifier); + } + + public static CompatibleItemSettings of(CompatIdentifier id) { + return new CompatibleItemSettings(id); + } + + @Deprecated + public CompatibleItemSettings setId(CompatIdentifier identifier) { + this.identifier = identifier; + return this; + } + + public CompatibleItemSettings addGroup(ItemGroup itemGroup) { + super.addGroup(itemGroup, identifier); + return this; + } + + public CompatibleItemSettings addGroup(Supplier itemGroup) { + super.addGroup(itemGroup, identifier); + return this; + } + + @Override + public CompatibleItemSettings addGroup(CreativeTabBuilder itemGroup) { + super.addGroup(itemGroup); + return this; + } + + public CompatibleItemSettings addGroup(ItemGroupWrapper itemGroup) { + return addGroup(itemGroup.get()); + } + + @Override + public CompatibleItemSettings maxCount(int maxCount) { + super.maxCount(maxCount); + return this; + } + + @Override + public CompatibleItemSettings maxDamage(int maxDamage) { + super.maxDamage(maxDamage); + return this; + } + + @Override + public CompatibleItemSettings maxDamageIfAbsent(int maxDamage) { + super.maxDamageIfAbsent(maxDamage); + return this; + } + + @Override + public CompatibleItemSettings recipeRemainder(Item recipeRemainder) { + super.recipeRemainder(recipeRemainder); + this.recipeRemainder = recipeRemainder; + return this; + } + + public CompatibleItemSettings recipeRemainder(ItemWrapper recipeRemainder) { + return recipeRemainder(recipeRemainder.get()); + } + + @Deprecated + @Override + public CompatibleItemSettings rarity(Rarity rarity) { + super.rarity(rarity); + this.rarity = CompatRarity.of(rarity); + return this; + } + + public CompatibleItemSettings rarity(CompatRarity rarity) { + super.rarity(rarity.getRarity()); + this.rarity = rarity; + return this; + } + + @Override + public CompatibleItemSettings food(CompatFoodComponent foodComponent) { + super.food(foodComponent); + return this; + } + + public CompatibleItemSettings useItemPrefixedTranslationKey() { + changedTranslationKey = true; + return this; + } + + public CompatibleItemSettings useBlockPrefixedTranslationKey() { + changedTranslationKey = true; + return this; + } + + public String translationKey = null; + + public CompatibleItemSettings translationKey(String translationKey) { + changedTranslationKey = true; + this.translationKey = translationKey; + return this; + } + + public CompatibleItemSettings enchantable(int enchantability) { + this.enchantability = enchantability; + return this; + } + + public CompatibleItemSettings repairable(RepairIngredientTag tag) { + this.repairIngredientTag = tag; + return this; + } + + @Override + public ExtendSettings build() { + super.build(); + return settings; + } + + // Deprecated + + @Deprecated + @Override + public net.pitan76.mcpitanlib.api.item.CompatibleItemSettings addGroup(ItemGroup itemGroup, Identifier identifier) { + return super.addGroup(itemGroup, identifier); + } + + @Deprecated + @Override + public net.pitan76.mcpitanlib.api.item.CompatibleItemSettings addGroup(Supplier itemGroup, Identifier identifier) { + return super.addGroup(itemGroup, identifier); + } + + @Deprecated + @Override + public net.pitan76.mcpitanlib.api.item.CompatibleItemSettings addGroup(Supplier itemGroup, CompatIdentifier identifier) { + return super.addGroup(itemGroup, identifier); + } + + @Deprecated + @Override + public net.pitan76.mcpitanlib.api.item.CompatibleItemSettings addGroup(ItemGroup itemGroup, CompatIdentifier identifier) { + return super.addGroup(itemGroup, identifier); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java index 08b705a66..ec3724971 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java @@ -12,6 +12,7 @@ import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import org.jetbrains.annotations.Nullable; @@ -30,17 +31,17 @@ public ExtendBlockItem(Block block, CompatibleItemSettings settings) { @Override public ActionResult useOnBlock(ItemUsageContext context) { ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; - return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())); + return onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit())).toActionResult(); } @Deprecated @Override - public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event, Options options) { + public CompatActionResult onRightClickOnBlock(ItemUseOnBlockEvent event, Options options) { return ExtendItemProvider.super.onRightClickOnBlock(event, options); } - public ActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { - return super.useOnBlock(event.toIUC()); + public CompatActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { + return CompatActionResult.create(super.useOnBlock(event.toIUC())); } @Deprecated diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java new file mode 100644 index 000000000..da754ba07 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java @@ -0,0 +1,116 @@ +package net.pitan76.mcpitanlib.api.item.v2; + +import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; +import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; +import net.pitan76.mcpitanlib.api.item.ExtendSettings; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.CompatRarity; +import net.pitan76.mcpitanlib.midohra.item.ItemGroupWrapper; + +public class ItemSettingsBuilder { + + public CompatIdentifier id; + public int maxCount = -1; + public int maxDamage = -1; + public int maxDamageIfAbsent = -1; + public int enchantability = -1; + public RepairIngredientTag repairIngredientTag; + public CompatFoodComponent foodComponent; + public CompatRarity rarity; + + public ItemGroupWrapper itemGroupWrapper; + public CreativeTabBuilder itemGroupBuilder; + + public ItemSettingsBuilder(CompatIdentifier id) { + this.id = id; + } + + public ItemSettingsBuilder() { + + } + + public ItemSettingsBuilder addGroup(ItemGroupWrapper itemGroup) { + itemGroupWrapper = itemGroup; + return this; + } + + public ItemSettingsBuilder addGroup(CreativeTabBuilder itemGroup) { + itemGroupBuilder = itemGroup; + return this; + } + + public ItemSettingsBuilder maxCount(int maxCount) { + this.maxCount = maxCount; + return this; + } + + public ItemSettingsBuilder maxDamage(int maxDamage) { + this.maxDamage = maxDamage; + return this; + } + + public ItemSettingsBuilder maxDamageIfAbsent(int maxDamage) { + this.maxDamageIfAbsent = maxDamage; + return this; + } + + public ItemSettingsBuilder enchantability(int enchantability) { + this.enchantability = enchantability; + return this; + } + + public ItemSettingsBuilder repairable(RepairIngredientTag repairIngredientTag) { + this.repairIngredientTag = repairIngredientTag; + return this; + } + + public ItemSettingsBuilder repairable(CompatIdentifier repairIngredientTag) { + this.repairIngredientTag = new RepairIngredientTag(repairIngredientTag); + return this; + } + + public ItemSettingsBuilder foodComponent(CompatFoodComponent foodComponent) { + this.foodComponent = foodComponent; + return this; + } + + public ItemSettingsBuilder rarity(CompatRarity rarity) { + this.rarity = rarity; + return this; + } + + public CompatibleItemSettings build() { + return build(id); + } + + public ExtendSettings _build() { + return build().build(); + } + + public CompatibleItemSettings build(CompatIdentifier id) { + CompatibleItemSettings settings = new CompatibleItemSettings(id); + + if (itemGroupWrapper != null) settings.addGroup(itemGroupWrapper); + if (itemGroupBuilder != null) settings.addGroup(itemGroupBuilder); + + if (maxCount != -1) settings.maxCount(maxCount); + + if (maxDamage != -1) settings.maxDamage(maxDamage); + + if (maxDamageIfAbsent != -1) settings.maxDamageIfAbsent(maxDamageIfAbsent); + + if (rarity != null) settings.rarity(rarity); + if (foodComponent != null) settings.food(foodComponent); + + if (enchantability != -1) settings.enchantable(enchantability); + + if (repairIngredientTag != null) settings.repairable(repairIngredientTag); + + return settings; + } + + public ExtendSettings _build(CompatIdentifier id) { + return build(id).build(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatArmorMaterial.java new file mode 100644 index 000000000..132e57239 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatArmorMaterial.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.item.v3; + +import net.minecraft.recipe.Ingredient; +import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; + +public interface CompatArmorMaterial extends CompatibleArmorMaterial { + + @Override + default Ingredient getRepairIngredient() { + return getRepairIngredientTag().getIngredient(); + } + + RepairIngredientTag getRepairIngredientTag(); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatToolMaterial.java new file mode 100644 index 000000000..d7ebbd88f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatToolMaterial.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.item.v3; + +import net.minecraft.item.Item; +import net.minecraft.tag.TagKey; +import net.pitan76.mcpitanlib.api.item.tool.CompatibleToolMaterial; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; + +public interface CompatToolMaterial extends CompatibleToolMaterial { + @Deprecated + default TagKey getRepairTag() { + return getRepairIngredientTag().getTag(); + } + + RepairIngredientTag getRepairIngredientTag(); +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java index d6297cb7a..52217f072 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java @@ -5,6 +5,7 @@ import net.minecraft.recipe.RecipeType; import net.minecraft.recipe.ShapelessRecipe; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.RecipeUtil; import org.jetbrains.annotations.Nullable; @@ -28,6 +29,10 @@ public CompatibleRecipeEntry(Identifier id, String group, RecipeUtil.Compatibili this.category = category; } + public CompatibleRecipeEntry(CompatIdentifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ShapelessRecipe shapelessRecipe) { + this(id.toMinecraft(), group, category, shapelessRecipe); + } + public Recipe getRecipe() { return recipe; } @@ -36,6 +41,10 @@ public Identifier getId() { return id; } + public CompatIdentifier getCompatId() { + return CompatIdentifier.fromMinecraft(getId()); + } + public RecipeType getType() { Recipe recipe = getRecipe(); if (recipe == null) return null; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java index 8f13aa3a4..09c471d8c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java @@ -3,6 +3,7 @@ import net.minecraft.inventory.Inventory; import net.minecraft.recipe.*; import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.RecipeUtil; import org.jetbrains.annotations.Nullable; @@ -26,6 +27,10 @@ public CompatRecipeEntry(Identifier id, String group, RecipeUtil.CompatibilityCr this.category = category; } + public CompatRecipeEntry(CompatIdentifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, Recipe recipe) { + this(id.toMinecraft(), group, category, recipe); + } + public boolean isNull() { return recipe == null; } @@ -38,6 +43,10 @@ public Identifier getId() { return id; } + public CompatIdentifier getCompatId() { + return CompatIdentifier.fromMinecraft(getId()); + } + public RecipeType getType() { Recipe recipe = getRecipe(); if (recipe == null) return null; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java index a113d127a..4086c6481 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistry.java @@ -15,15 +15,16 @@ import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.MCPitanLib; -import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.gui.ExtendedScreenHandlerTypeBuilder; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; import net.pitan76.mcpitanlib.api.item.CreativeTabManager; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; -import net.pitan76.mcpitanlib.api.util.BlockUtil; -import net.pitan76.mcpitanlib.api.util.ItemUtil; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.block.BlockUtil; +import net.pitan76.mcpitanlib.api.util.item.ItemUtil; import net.pitan76.mcpitanlib.core.registry.FuelRegistry; import net.pitan76.mcpitanlib.core.registry.MCPLRegistry; import net.pitan76.mcpitanlib.core.registry.MCPLRegistry1_20; @@ -73,14 +74,14 @@ public static CompatRegistry create(String MOD_ID) { * @return The registry result */ public RegistryResult registerItem(Identifier id, Supplier supplier) { - if (MCPitanLib.isItemBlackListed(id)) supplier = () -> ItemUtil.of(CompatibleItemSettings.of()); + if (MCPitanLib.isItemBlackListed(id)) supplier = () -> ItemUtil.create(CompatibleItemSettings.of(CompatIdentifier.fromMinecraft(id))); RegistrySupplier registrySupplier = mcplr.registryItem(id, supplier); CreativeTabManager.register(id); return new RegistryResult<>(registrySupplier); } public RegistryResult registerBlock(Identifier id, Supplier supplier) { - if (MCPitanLib.isBlockBlackListed(id)) supplier = () -> BlockUtil.of(CompatibleBlockSettings.of(CompatibleMaterial.STONE)); + if (MCPitanLib.isBlockBlackListed(id)) supplier = () -> BlockUtil.create(CompatibleBlockSettings.of(CompatIdentifier.fromMinecraft(id), CompatibleMaterial.STONE)); return new RegistryResult<>(mcplr.registryBlock(id, supplier)); } @@ -146,10 +147,6 @@ public RegistryResult registerItemGroup(CreativeTabBuilder builder) { return registerItemGroup(builder.getIdentifier(), builder); } - public RegistryResult registerDataComponentType(Identifier id, Supplier supplier) { - return new RegistryResult<>(null); - } - public static void registerFuel(int time, ItemConvertible... item) { FuelRegistry.register(time, item); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/simple/block/SimpleGuiBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/simple/block/SimpleGuiBlock.java index 4a0843eb9..2353be362 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/simple/block/SimpleGuiBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/simple/block/SimpleGuiBlock.java @@ -1,11 +1,11 @@ package net.pitan76.mcpitanlib.api.simple.block; import net.minecraft.text.Text; -import net.minecraft.util.ActionResult; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; import net.pitan76.mcpitanlib.api.gui.v2.SimpleScreenHandlerFactory; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; public abstract class SimpleGuiBlock extends ExtendBlock implements SimpleScreenHandlerFactory { @@ -14,7 +14,7 @@ public SimpleGuiBlock(Settings settings) { } @Override - public ActionResult onRightClick(BlockUseEvent e) { + public CompatActionResult onRightClick(BlockUseEvent e) { if (e.isClient()) e.player.openGuiScreen(this); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/simple/item/SimpleGuiItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/simple/item/SimpleGuiItem.java index 2ffc80214..570410379 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/simple/item/SimpleGuiItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/simple/item/SimpleGuiItem.java @@ -1,17 +1,16 @@ package net.pitan76.mcpitanlib.api.simple.item; -import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; -import net.minecraft.util.TypedActionResult; import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; import net.pitan76.mcpitanlib.api.gui.v2.SimpleScreenHandlerFactory; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.v2.CompatItem; +import net.pitan76.mcpitanlib.api.util.StackActionResult; -public class SimpleGuiItem extends ExtendItem implements SimpleScreenHandlerFactory { +public class SimpleGuiItem extends CompatItem implements SimpleScreenHandlerFactory { public ScreenHandlerFactory factory; public Text name; @@ -32,7 +31,7 @@ public SimpleGuiItem(CompatibleItemSettings settings) { } @Override - public TypedActionResult onRightClick(ItemUseEvent e) { + public StackActionResult onRightClick(ItemUseEvent e) { if (!e.isClient()) e.user.openGuiScreen(this); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java new file mode 100644 index 000000000..1e2ffb348 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.api.state.property; + +import net.minecraft.state.property.Properties; + +public class CompatProperties { + public static final DirectionProperty FACING = new DirectionProperty(Properties.FACING); + public static final DirectionProperty HORIZONTAL_FACING = new DirectionProperty(Properties.HORIZONTAL_FACING); + public static final DirectionProperty HOPPER_FACING = new DirectionProperty(Properties.HOPPER_FACING); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/DirectionProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/DirectionProperty.java new file mode 100644 index 000000000..50c38ab1e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/DirectionProperty.java @@ -0,0 +1,37 @@ +package net.pitan76.mcpitanlib.api.state.property; + +import net.minecraft.state.property.EnumProperty; +import net.minecraft.state.property.Property; +import net.minecraft.util.math.Direction; + +import java.util.function.Predicate; + +public class DirectionProperty implements IProperty { + + private final EnumProperty property; + + public DirectionProperty(String name, Predicate filter) { + this(EnumProperty.of(name, Direction.class, filter)); + } + + public DirectionProperty(String name) { + this(name, direction -> true); + } + + public DirectionProperty(EnumProperty property) { + this.property = property; + } + + public static DirectionProperty of(String name) { + return new DirectionProperty(name); + } + + public static DirectionProperty of(String name, Predicate filter) { + return new DirectionProperty(name, filter); + } + + @Override + public Property getProperty() { + return property; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java new file mode 100644 index 000000000..555fec27e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.state.property; + +import net.minecraft.block.BlockState; +import net.minecraft.state.property.Property; +import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; + +public interface IProperty> { + default void apply(AppendPropertiesArgs args) { + args.addProperty(getProperty()); + } + + default T get(BlockState state) { + return state.get(getProperty()); + } + + default BlockState with(BlockState state, T value) { + return state.with(getProperty(), value); + } + + Property getProperty(); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/item/RepairIngredientTag.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/item/RepairIngredientTag.java new file mode 100644 index 000000000..1a3913a2c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/item/RepairIngredientTag.java @@ -0,0 +1,68 @@ +package net.pitan76.mcpitanlib.api.tag.item; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Ingredient; +import net.minecraft.tag.TagKey; +import net.minecraft.util.registry.Registry; +import net.pitan76.mcpitanlib.MCPitanLib; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.IngredientUtil; +import net.pitan76.mcpitanlib.api.util.item.ItemUtil; + +public class RepairIngredientTag { + + public static final RepairIngredientTag REPAIRS_LEATHER_ARMOR = of("leather_armor_materials"); + public static final RepairIngredientTag REPAIRS_CHAIN_ARMOR = of("iron_tool_materials"); + public static final RepairIngredientTag REPAIRS_IRON_ARMOR = of("iron_tool_materials"); + public static final RepairIngredientTag REPAIRS_GOLD_ARMOR = of("golden_tool_materials"); + public static final RepairIngredientTag REPAIRS_DIAMOND_ARMOR = of("diamond_tool_materials"); + public static final RepairIngredientTag REPAIRS_NETHERITE_ARMOR = of("netherite_tool_materials"); + public static final RepairIngredientTag REPAIRS_TURTLE_HELMET = of("turtle_helmet_materials"); + public static final RepairIngredientTag REPAIRS_WOLF_ARMOR = of("leather_armor_materials"); + public static final RepairIngredientTag WOODEN_TOOL_MATERIALS = of("wooden_tool_materials"); + public static final RepairIngredientTag STONE_TOOL_MATERIALS = of("stone_tool_materials"); + public static final RepairIngredientTag IRON_TOOL_MATERIALS = of("iron_tool_materials"); + public static final RepairIngredientTag GOLDEN_TOOL_MATERIALS = of("golden_tool_materials"); + public static final RepairIngredientTag DIAMOND_TOOL_MATERIALS = of("diamond_tool_materials"); + public static final RepairIngredientTag NETHERITE_TOOL_MATERIALS = of("netherite_tool_materials"); + + private TagKey tag; + + protected static RepairIngredientTag of(String path) { + return new RepairIngredientTag(CompatIdentifier.of(MCPitanLib.MOD_ID, path)); + } + + public RepairIngredientTag(CompatIdentifier identifier) { + this.tag = TagKey.of(Registry.ITEM_KEY, identifier.toMinecraft()); + } + + @Deprecated + public RepairIngredientTag(TagKey tag) { + this.tag = tag; + } + + @Deprecated + public TagKey getTag() { + return tag; + } + + @Deprecated + public Ingredient getIngredient() { + return IngredientUtil.fromTagByIdentifier(tag.id()); + } + + public boolean contains(Item item) { + if (item == null || tag == null) + return false; + + return ItemUtil.isInTag(item, CompatIdentifier.fromMinecraft(tag.id())); + } + + public boolean contains(ItemStack stack) { + if (stack.isEmpty() || tag == null) + return false; + + return getIngredient().test(stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java index 9f305ac51..ebee9da24 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java @@ -43,7 +43,7 @@ public BlockEntityType build() { } public BlockEntityType build(Type type) { - return BlockEntityType.Builder.create(factory::create, blocks.toArray(new Block[0])).build(type); + return BlockEntityTypeBuilder.create(factory, blocks.toArray(new Block[0])).build(type); } @FunctionalInterface diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ActionResultUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ActionResultUtil.java deleted file mode 100644 index 49bd97159..000000000 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ActionResultUtil.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.pitan76.mcpitanlib.api.util; - -import net.minecraft.util.ActionResult; -import net.minecraft.util.TypedActionResult; - -public class ActionResultUtil { - - public static TypedActionResult typedActionResult(ActionResult result, T t, boolean swingHand) { - switch (result) { - case PASS: - return TypedActionResult.pass(t); - case SUCCESS: - return TypedActionResult.success(t, swingHand); - case FAIL: - return TypedActionResult.fail(t); - case CONSUME: - case CONSUME_PARTIAL: - return TypedActionResult.consume(t); - } - return TypedActionResult.pass(t); - } - - public static TypedActionResult typedActionResult(ActionResult result, T t) { - return typedActionResult(result, t, true); - } - - public static ActionResult actionResult(TypedActionResult result) { - return result.getResult(); - } -} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index d2cbd80fb..fe74937a8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -8,7 +8,6 @@ import net.minecraft.sound.BlockSoundGroup; import net.minecraft.state.StateManager; import net.minecraft.state.property.Property; -import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -16,6 +15,7 @@ import net.minecraft.world.World; import net.minecraft.world.WorldAccess; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; import net.pitan76.mcpitanlib.api.util.block.BlockHitResultUtil; public class BlockStateUtil { @@ -35,6 +35,10 @@ public static BlockSoundGroup getSoundGroup(BlockState state) { return state.getSoundGroup(); } + public static CompatBlockSoundGroup getCompatSoundGroup(BlockState state) { + return CompatBlockSoundGroup.of(getSoundGroup(state)); + } + public static BlockState getDefaultState(Block block) { return block.getDefaultState(); } @@ -63,20 +67,20 @@ public static void randomTick(BlockState state, ServerWorld world, BlockPos pos) state.randomTick(world, pos, world.random); } - public static ActionResult onUse(BlockState state, World world, Player player, BlockHitResult hitResult) { + public static CompatActionResult onUse(BlockState state, World world, Player player, BlockHitResult hitResult) { Hand hand = player.getMainHandStack().isEmpty() ? Hand.OFF_HAND : Hand.MAIN_HAND; - return state.onUse(world, player.getEntity(), hand, hitResult); + return CompatActionResult.create(state.onUse(world, player.getEntity(), hand, hitResult)); } - public static ActionResult onUse(BlockState state, World world, Player player, Direction dir, BlockPos blockPos) { + public static CompatActionResult onUse(BlockState state, World world, Player player, Direction dir, BlockPos blockPos) { return onUse(state, world, player, BlockHitResultUtil.create(player.getPos(), dir, blockPos)); } - public static ActionResult onUseWithItem(BlockState state, ItemStack stack, World world, PlayerEntity player, Hand hand, BlockHitResult hit) { - return state.onUse(world, player, hand, hit); + public static CompatActionResult onUseWithItem(BlockState state, ItemStack stack, World world, PlayerEntity player, Hand hand, BlockHitResult hit) { + return CompatActionResult.create(state.onUse(world, player, hand, hit)); } - public static ActionResult onUseWithItem_actionResult(BlockState state, ItemStack stack, World world, PlayerEntity player, Hand hand, BlockHitResult hit) { + public static CompatActionResult onUseWithItem_actionResult(BlockState state, ItemStack stack, World world, PlayerEntity player, Hand hand, BlockHitResult hit) { return onUseWithItem(state, stack, world, player, hand, hit); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java index ef53d5544..6bb1e0bbc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java @@ -11,6 +11,7 @@ import java.util.List; +@Deprecated public class BlockUtil { /** * Get block from Identifier. diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatActionResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatActionResult.java new file mode 100644 index 000000000..ec615e0b9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatActionResult.java @@ -0,0 +1,81 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.util.ActionResult; +import net.pitan76.mcpitanlib.api.event.result.EventResult; +import net.pitan76.mcpitanlib.midohra.item.ItemStack; + +import java.util.Optional; + +public class CompatActionResult { + public static final CompatActionResult SUCCESS = new CompatActionResult(ActionResult.SUCCESS, EventResult.success()); + public static final CompatActionResult PASS = new CompatActionResult(ActionResult.PASS, EventResult.pass()); + public static final CompatActionResult FAIL = new CompatActionResult(ActionResult.FAIL, EventResult.fail()); + public static final CompatActionResult CONSUME = new CompatActionResult(ActionResult.CONSUME, EventResult.success()); + public static final CompatActionResult PASS_TO_DEFAULT_BLOCK_ACTION = new CompatActionResult(ActionResult.PASS, EventResult.pass()); + public static final CompatActionResult SUCCESS_SERVER = new CompatActionResult(ActionResult.SUCCESS, EventResult.success()); + public static final CompatActionResult STOP = new CompatActionResult(ActionResult.FAIL, EventResult.stop()); + + private final ActionResult actionResult; + private final EventResult eventResult; + + protected CompatActionResult(ActionResult actionResult, EventResult eventResult) { + this.actionResult = actionResult; + this.eventResult = eventResult; + } + + public ActionResult toActionResult() { + return actionResult; + } + + public EventResult toEventResult() { + return eventResult; + } + + public Optional getNewMidohraHandStack() { + return getNewHandStack().map(ItemStack::of); + } + + public Optional getNewHandStack() { + return Optional.empty(); + } + + public static CompatActionResult of(ActionResult result) { + if (result == ActionResult.SUCCESS) + return SUCCESS; + + if (result == ActionResult.PASS) + return PASS; + + if (result == ActionResult.FAIL) + return FAIL; + + if (result == ActionResult.CONSUME) + return CONSUME; + + return PASS; + } + + public static CompatActionResult of(EventResult result) { + if (result == EventResult.success()) + return SUCCESS; + + if (result == EventResult.pass()) + return PASS; + + if (result == EventResult.fail()) + return FAIL; + + if (result == EventResult.stop()) + return STOP; + + return PASS; + } + + public static CompatActionResult create(ActionResult result, EventResult eventResult) { + return new CompatActionResult(result, eventResult); + } + + public static CompatActionResult create(ActionResult result) { + return create(result, EventResult.stop()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java index 8aafc8174..dafd1d855 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java @@ -12,6 +12,8 @@ public class CompatIdentifier { private final String namespace; private final String path; + public static final CompatIdentifier EMPTY = CompatIdentifier.of("mcpitanlib:empty"); + /** * Creates a new Identifier with the given namespace and path. * @param namespace The namespace of the Identifier. @@ -144,10 +146,14 @@ public static CompatIdentifier fromMinecraft(Identifier id) { } public static CompatIdentifier empty() { - return of("mcpitanlib:empty"); + return EMPTY; } public boolean isEmpty() { - return this.equals("mcpitanlib:empty"); + return equals(EMPTY); + } + + public static boolean isMinecraftNamespace(CompatIdentifier id) { + return id.getNamespace().equals("minecraft"); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatRarity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatRarity.java new file mode 100644 index 000000000..c719f2bed --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatRarity.java @@ -0,0 +1,54 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.util.Formatting; +import net.minecraft.util.Rarity; + +public class CompatRarity implements CompatStringIdentifiable { + private final Rarity rarity; + + public static final CompatRarity NONE = of(Rarity.COMMON); + public static final CompatRarity COMMON = of(Rarity.COMMON); + public static final CompatRarity UNCOMMON = of(Rarity.UNCOMMON); + public static final CompatRarity RARE = of(Rarity.RARE); + public static final CompatRarity EPIC = of(Rarity.EPIC); + + public CompatRarity(Rarity rarity) { + this.rarity = rarity; + } + + public static CompatRarity of(Rarity rarity) { + return new CompatRarity(rarity); + } + + public Rarity getRarity() { + return rarity; + } + + public Formatting getFormatting() { + return rarity.formatting; + } + + public String getName() { + return rarity.name(); + } + + @Override + public String asString_compat() { + return getName(); + } + + public static CompatRarity fromString(String name) { + switch (name) { + case "common": + return COMMON; + case "uncommon": + return UNCOMMON; + case "rare": + return RARE; + case "epic": + return EPIC; + default: + return NONE; + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatStringIdentifiable.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatStringIdentifiable.java new file mode 100644 index 000000000..2fb01f76e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatStringIdentifiable.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.util.StringIdentifiable; + +public interface CompatStringIdentifiable extends StringIdentifiable { + @Deprecated + @Override + default String asString() { + return asString_compat(); + } + + String asString_compat(); + + default StringIdentifiable get() { + return this; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java index d2f59002f..e8cfde144 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EquipMaterialUtil.java @@ -3,10 +3,13 @@ import net.minecraft.item.ToolMaterial; import net.minecraft.recipe.Ingredient; import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; public class EquipMaterialUtil { + @Deprecated public static ToolMaterial createToolMaterial(int durability, float miningSpeedMultiplier, float attackDamage, int miningLevel, int enchantability, Ingredient repairIngredient) { return new ToolMaterial() { @Override @@ -41,6 +44,10 @@ public Ingredient getRepairIngredient() { }; } + public static ToolMaterial createToolMaterial(int durability, float miningSpeedMultiplier, float attackDamage, int miningLevel, int enchantability, RepairIngredientTag ingredientTag) { + return createToolMaterial(durability, miningSpeedMultiplier, attackDamage, miningLevel, enchantability, ingredientTag.getIngredient()); + } + public static int toInt(ArmorEquipmentType type) { switch (type.getSlot()) { case HEAD: @@ -59,4 +66,9 @@ public static int toInt(ArmorEquipmentType type) { public static CompatibleArmorMaterial createArmorMaterial(int[] durability, int[] protection, int enchantability, SoundEvent equipSound, Ingredient repairIngredient, String name, float toughness, float knockbackResistance) { return ArmorMaterialUtil.create(name, durability, protection, enchantability, equipSound, toughness, knockbackResistance, repairIngredient); } + + @Deprecated + public static CompatibleArmorMaterial createArmorMaterial(int[] durability, int[] protection, int enchantability, SoundEvent equipSound, Ingredient repairIngredient, Identifier id, float toughness, float knockbackResistance) { + return ArmorMaterialUtil.create(id, durability, protection, enchantability, equipSound, toughness, knockbackResistance, repairIngredient); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InteractUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InteractUtil.java index 537c43ad0..74ad850d4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InteractUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InteractUtil.java @@ -4,8 +4,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.ActionResult; -import net.minecraft.util.TypedActionResult; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; @@ -14,30 +12,45 @@ import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; import net.pitan76.mcpitanlib.api.event.item.ItemUseOnEntityEvent; +import net.pitan76.mcpitanlib.api.item.args.UseActionArgs; +import net.pitan76.mcpitanlib.api.item.consume.CompatUseAction; public class InteractUtil { - public static TypedActionResult useItem(Item item, ItemUseEvent event) { - return item.use(event.getWorld(), event.user.getEntity(), event.getHand()); + public static StackActionResult useItem(Item item, ItemUseEvent event) { + return StackActionResult.create(item.use(event.getWorld(), event.user.getEntity(), event.getHand())); } - public static ActionResult useItemOnBlock(Item item, ItemUsageContext context) { - return item.useOnBlock(context); + public static CompatActionResult useItemOnBlock(Item item, ItemUsageContext context) { + return CompatActionResult.create(item.useOnBlock(context)); } - public static ActionResult useItemOnBlock(Item item, ItemUseOnBlockEvent event) { + public static CompatActionResult useItemOnBlock(Item item, ItemUseOnBlockEvent event) { return useItemOnBlock(item, event.toIUC()); } - public static ActionResult useItemOnEntity(Item item, ItemUseOnEntityEvent event) { - return item.useOnEntity(event.getStack(), event.getUser().getEntity(), event.getEntity(), event.getHand()); + public static CompatActionResult useItemOnEntity(Item item, ItemUseOnEntityEvent event) { + return CompatActionResult.create(item.useOnEntity(event.getStack(), event.getUser().getEntity(), event.getEntity(), event.getHand())); } - public static ActionResult useBlock(BlockState state, World world, Player player, BlockHitResult hitResult) { + public static CompatUseAction getUseAction(Item item, UseActionArgs args) { + return CompatUseAction.of(item.getUseAction(args.stack)); + } + + public static CompatUseAction getUseAction(Item item, ItemStack stack) { + return CompatUseAction.of(item.getUseAction(stack)); + } + + public static CompatActionResult useBlock(BlockState state, World world, Player player, BlockHitResult hitResult) { return BlockStateUtil.onUse(state, world, player, hitResult); } - public static ActionResult useBlock(BlockState state, World world, Player player, Direction dir, BlockPos blockPos) { + public static CompatActionResult useBlock(BlockState state, World world, Player player, Direction dir, BlockPos blockPos) { return BlockStateUtil.onUse(state, world, player, dir, blockPos); } + + public static boolean onStoppingUsing(Item item, ItemStack stack, World world, Player player, int remainingUseTicks) { + item.onStoppedUsing(stack, world, player.getEntity(), remainingUseTicks); + return true; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java index a1a46fe28..70cfe5a75 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemUtil.java @@ -12,6 +12,7 @@ import java.util.List; +@Deprecated public class ItemUtil { /** diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java index 6209a1587..104d00b92 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java @@ -7,6 +7,8 @@ import net.minecraft.util.StringIdentifiable; import net.minecraft.util.math.Direction; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; +import net.pitan76.mcpitanlib.api.state.property.CompatProperties; +import net.pitan76.mcpitanlib.api.state.property.DirectionProperty; public class PropertyUtil { public static BooleanProperty createBooleanProperty(String name) { @@ -34,7 +36,7 @@ public static BlockState with(BlockState state, IntProperty property, int value) } public static BlockState with(BlockState state, DirectionProperty property, Direction value) { - return state.with(property, value); + return property.with(state, value); } public static boolean get(BlockState state, BooleanProperty property) { @@ -46,15 +48,15 @@ public static int get(BlockState state, IntProperty property) { } public static Direction get(BlockState state, DirectionProperty property) { - return state.get(property); + return property.get(state); } public static Direction getFacing(BlockState state) { - return state.get(facing()); + return facing().get(state); } public static Direction getHorizontalFacing(BlockState state) { - return state.get(horizontalFacing()); + return horizontalFacing().get(state); } public static int getPower(BlockState state) { @@ -70,11 +72,11 @@ public static void append(AppendPropertiesArgs args, Property... properties) } public static void appendFacing(AppendPropertiesArgs args) { - args.addProperty(facing()); + facing().apply(args); } public static void appendHorizontalFacing(AppendPropertiesArgs args) { - args.addProperty(horizontalFacing()); + horizontalFacing().apply(args); } public static void appendPower(AppendPropertiesArgs args) { @@ -94,11 +96,11 @@ public static BooleanProperty powered() { } public static DirectionProperty facing() { - return Properties.FACING; + return CompatProperties.FACING; } public static DirectionProperty horizontalFacing() { - return Properties.HORIZONTAL_FACING; + return CompatProperties.HORIZONTAL_FACING; } public static EnumProperty axis() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/StackActionResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StackActionResult.java new file mode 100644 index 000000000..b97944b9b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StackActionResult.java @@ -0,0 +1,110 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.TypedActionResult; +import net.pitan76.mcpitanlib.api.event.result.EventResult; + +import java.util.Optional; + +public class StackActionResult extends CompatActionResult { + private final ItemStack stack; + private final CompatActionResult compatActionResult; + private boolean isNewStack = false; + + public StackActionResult(ActionResult actionResult, EventResult eventResult, ItemStack stack) { + this(new CompatActionResult(actionResult, eventResult), stack); + } + + public StackActionResult(CompatActionResult actionResult, ItemStack stack) { + super(null, null); + compatActionResult = actionResult; + this.stack = stack; + } + + public void setNewStack(boolean b) { + isNewStack = b; + } + + @Override + public ActionResult toActionResult() { + return compatActionResult.toActionResult(); + } + + @Override + public EventResult toEventResult() { + return compatActionResult.toEventResult(); + } + + @Deprecated + @Override + public Optional getNewHandStack() { + if (hasNewStack()) + return Optional.ofNullable(getStack()); + + return Optional.empty(); + } + + public boolean hasNewStack() { + return isNewStack; + } + + public boolean hasStack() { + return getStack() != null; + } + + public CompatActionResult asCompatActionResult() { + return compatActionResult; + } + + public static StackActionResult create(CompatActionResult compatActionResult, ItemStack stack) { + return new StackActionResult(compatActionResult, stack); + } + + public static StackActionResult create(CompatActionResult compatActionResult) { + return new StackActionResult(compatActionResult, null); + } + + public static StackActionResult create(ActionResult actionResult, EventResult eventResult, ItemStack stack) { + return new StackActionResult(actionResult, eventResult, stack); + } + + public static StackActionResult create(ActionResult actionResult, ItemStack stack) { + return new StackActionResult(actionResult, null, stack); + } + + public static StackActionResult create(TypedActionResult result) { + StackActionResult actionResult = create(CompatActionResult.create(result.getResult()), result.getValue()); + actionResult.setNewStack(true); + return actionResult; + } + + public static StackActionResult success(ItemStack stack) { + CompatActionResult compatActionResult = CompatActionResult.create(ActionResult.SUCCESS); + StackActionResult actionResult = create(compatActionResult, stack); + actionResult.setNewStack(true); + return actionResult; + } + + public static StackActionResult successServer(ItemStack stack) { + CompatActionResult compatActionResult = CompatActionResult.create(ActionResult.SUCCESS); + StackActionResult actionResult = create(compatActionResult, stack); + actionResult.setNewStack(true); + return actionResult; + } + + public static StackActionResult consume(ItemStack stack) { + CompatActionResult compatActionResult = CompatActionResult.create(ActionResult.CONSUME); + StackActionResult actionResult = create(compatActionResult, stack); + actionResult.setNewStack(true); + return actionResult; + } + + public TypedActionResult toTypedActionResult() { + return new TypedActionResult<>(toActionResult(), getStack()); + } + + public ItemStack getStack() { + return stack; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockUtil.java new file mode 100644 index 000000000..d0b2969be --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockUtil.java @@ -0,0 +1,225 @@ +package net.pitan76.mcpitanlib.api.util.block; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.text.TextComponent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("deprecation") +public class BlockUtil { + /** + * Check if two blocks are equal. + * @param block Block to compare. + * @param block2 Block to compare. + * @return If two blocks are equal. + */ + public static boolean isEqual(Block block, Block block2) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.isEqual(block, block2); + } + + /** + * Get block from CompatIdentifier. + * @param id CompatIdentifier of the block. + * @return Block of the CompatIdentifier. + */ + public static Block fromId(CompatIdentifier id) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.fromId(id); + } + + public static Block fromId(String id) { + return fromId(CompatIdentifier.of(id)); + } + + public static Block fromId(String namespace, String path) { + return fromId(CompatIdentifier.of(namespace, path)); + } + + /** + * Get CompatIdentifier from Block. + * @param block Block to get CompatIdentifier. + * @return CompatIdentifier of the Block. + */ + public static CompatIdentifier toId(Block block) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.toCompatID(block); + } + + public static String toIdAsString(Block block) { + return toId(block).toString(); + } + + /** + * Check if the block exist. + * @param id CompatIdentifier of the block. + * @return If the block exist. + */ + public static boolean isExist(CompatIdentifier id) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.isExist(id); + } + + public static boolean isExist(String id) { + return isExist(CompatIdentifier.of(id)); + } + + public static boolean isExist(String namespace, String path) { + return isExist(CompatIdentifier.of(namespace, path)); + } + + public static boolean isMinecraftBlock(Block block) { + return CompatIdentifier.isMinecraftNamespace(toId(block)); + } + + /** + * Create a new Block + * @param settings Block settings + * @return The new Block + */ + public static Block create(CompatibleBlockSettings settings) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.of(settings); + } + + /** + * Get all blocks. + * @return List of all blocks. + */ + public static List getBlocks() { + return net.pitan76.mcpitanlib.api.util.BlockUtil.getAllBlocks(); + } + + /** + * Get blocks from tag key. + * @param tagKey Tag key of the blocks. + * @return Blocks of the tag key. + */ + public static List getInTag(TagKey tagKey) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.getBlocks(tagKey); + } + + /** + * Get blocks from tag key. + * @param id CompatIdentifier of the tag key. + * @return Blocks of the tag key. + */ + public static List getInTag(CompatIdentifier id) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.getBlocks(id.toMinecraft()); + } + + public static List getInTag(String id) { + return getInTag(CompatIdentifier.of(id)); + } + + public static List getInTag(String namespace, String path) { + return getInTag(CompatIdentifier.of(namespace, path)); + } + + /** + * Check if the block is in the tag. + * @param block Block to check. + * @param tagKey Tag key of the tag. + * @return If the block is in the tag. + */ + public static boolean isInTag(Block block, TagKey tagKey) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.isIn(block, tagKey); + } + + /** + * Check if the block is in the tag. + * @param block Block to check. + * @param id CompatIdentifier of the tag. + * @return If the block is in the tag. + */ + public static boolean isInTag(Block block, CompatIdentifier id) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.isBlockInTag(block, id.toMinecraft()); + } + + public static boolean isInTag(Block block, String id) { + return isInTag(block, CompatIdentifier.of(id)); + } + + public static boolean isInTag(Block block, String namespace, String path) { + return isInTag(block, CompatIdentifier.of(namespace, path)); + } + + /** + * Get raw id of the block. + * @param block Block to get raw id. + * @return Raw id of the block. + */ + public static int getRawId(Block block) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.getRawId(block); + } + + /** + * Get block from raw id. + * @param rawId Raw id of the block. + * @return Block of the raw id. + */ + public static Block fromRawId(int rawId) { + return net.pitan76.mcpitanlib.api.util.BlockUtil.fromIndex(rawId); + } + + /** + * Get blocks in the namespace. + * @param namespace Namespace of the blocks. + * @return List of blocks in the namespace. + */ + public static List getBlocksInNamespace(String namespace) { + List blocks = new ArrayList<>(); + + for (Block block : getBlocks()) { + if (toId(block).getNamespace().equals(namespace)) { + blocks.add(block); + } + } + + return blocks; + } + + /** + * Get number of all blocks. + * @return Number of all blocks. + */ + public static int getNumberOfBlocks() { + return getBlocks().size(); + } + + /** + * Get item from block. + * @param block Block + * @return Item + */ + public static Item toItem(Block block) { + return block.asItem(); + } + + /** + * Get name of the block. + * @param block Block + * @return Name of the block. + */ + public static String getNameAsString(Block block) { + return block.getName().getString(); + } + + /** + * Get name of the block. + * @param block Block + * @return Name of the block. + */ + public static TextComponent getName(Block block) { + return new TextComponent(block.getName()); + } + + /** + * Get translation key of the block. + * @param block Block + * @return Translation key of the block. + */ + public static String getTranslationKey(Block block) { + return block.getTranslationKey(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/entity/FurnaceUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/entity/FurnaceUtil.java index d84badc92..123751029 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/entity/FurnaceUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/entity/FurnaceUtil.java @@ -16,11 +16,11 @@ public static int getDefaultCookTime() { return AbstractFurnaceBlockEntity.field_31294; } - public static boolean canUseAsFuel(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { - return canUseAsFuel(stack.toMinecraft()); + public static boolean canUseAsFuel(net.pitan76.mcpitanlib.midohra.item.ItemStack stack, World world) { + return canUseAsFuel(stack.toMinecraft(), world); } - public static boolean canUseAsFuel(ItemStack stack) { + public static boolean canUseAsFuel(ItemStack stack, World world) { return AbstractFurnaceBlockEntity.canUseAsFuel(stack); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatBrightness.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatBrightness.java new file mode 100644 index 000000000..bb113ce46 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatBrightness.java @@ -0,0 +1,40 @@ +package net.pitan76.mcpitanlib.api.util.color; + +import net.minecraft.block.MapColor; + +public class CompatBrightness { + private final MapColor.Brightness brightness; + + public static final CompatBrightness LOW = of(MapColor.Brightness.LOW); + public static final CompatBrightness NORMAL = of(MapColor.Brightness.NORMAL); + public static final CompatBrightness HIGH = of(MapColor.Brightness.HIGH); + public static final CompatBrightness LOWEST = of(MapColor.Brightness.LOWEST); + + public CompatBrightness(MapColor.Brightness brightness) { + this.brightness = brightness; + } + + public static CompatBrightness of(MapColor.Brightness brightness) { + return new CompatBrightness(brightness); + } + + public MapColor.Brightness get() { + return brightness; + } + + public String getName() { + return get().name(); + } + + public int getId() { + return get().id; + } + + public int getBrightness() { + return get().brightness; + } + + + + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatDyeColor.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatDyeColor.java new file mode 100644 index 000000000..b2ca1532d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatDyeColor.java @@ -0,0 +1,46 @@ +package net.pitan76.mcpitanlib.api.util.color; + +import net.minecraft.util.DyeColor; +import net.pitan76.mcpitanlib.api.util.CompatStringIdentifiable; + +public class CompatDyeColor implements CompatStringIdentifiable { + private final DyeColor color; + + public static final CompatDyeColor WHITE = of(DyeColor.WHITE); + public static final CompatDyeColor ORANGE = of(DyeColor.ORANGE); + public static final CompatDyeColor MAGENTA = of(DyeColor.MAGENTA); + public static final CompatDyeColor LIGHT_BLUE = of(DyeColor.LIGHT_BLUE); + public static final CompatDyeColor YELLOW = of(DyeColor.YELLOW); + public static final CompatDyeColor LIME = of(DyeColor.LIME); + public static final CompatDyeColor PINK = of(DyeColor.PINK); + public static final CompatDyeColor GRAY = of(DyeColor.GRAY); + public static final CompatDyeColor LIGHT_GRAY = of(DyeColor.LIGHT_GRAY); + public static final CompatDyeColor CYAN = of(DyeColor.CYAN); + public static final CompatDyeColor PURPLE = of(DyeColor.PURPLE); + public static final CompatDyeColor BLUE = of(DyeColor.BLUE); + public static final CompatDyeColor BROWN = of(DyeColor.BROWN); + public static final CompatDyeColor GREEN = of(DyeColor.GREEN); + public static final CompatDyeColor RED = of(DyeColor.RED); + public static final CompatDyeColor BLACK = of(DyeColor.BLACK); + + public CompatDyeColor(DyeColor color) { + this.color = color; + } + + public static CompatDyeColor of(DyeColor color) { + return new CompatDyeColor(color); + } + + public DyeColor get() { + return color; + } + + public String getName() { + return color.getName(); + } + + @Override + public String asString_compat() { + return getName(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatMapColor.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatMapColor.java new file mode 100644 index 000000000..1440230a5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatMapColor.java @@ -0,0 +1,94 @@ +package net.pitan76.mcpitanlib.api.util.color; + +import net.minecraft.block.MapColor; + +public class CompatMapColor { + private final MapColor color; + + public static final CompatMapColor CLEAR = of(MapColor.CLEAR); + public static final CompatMapColor PALE_GREEN = of(MapColor.PALE_GREEN); + public static final CompatMapColor PALE_YELLOW = of(MapColor.PALE_YELLOW); + public static final CompatMapColor WHITE_GRAY = of(MapColor.WHITE_GRAY); + public static final CompatMapColor BRIGHT_RED = of(MapColor.BRIGHT_RED); + public static final CompatMapColor PALE_PURPLE = of(MapColor.PALE_PURPLE); + public static final CompatMapColor IRON_GRAY = of(MapColor.IRON_GRAY); + public static final CompatMapColor DARK_GREEN = of(MapColor.DARK_GREEN); + public static final CompatMapColor WHITE = of(MapColor.WHITE); + public static final CompatMapColor LIGHT_BLUE_GRAY = of(MapColor.LIGHT_BLUE_GRAY); + public static final CompatMapColor DIRT_BROWN = of(MapColor.DIRT_BROWN); + public static final CompatMapColor STONE_GRAY = of(MapColor.STONE_GRAY); + public static final CompatMapColor WATER_BLUE = of(MapColor.WATER_BLUE); + public static final CompatMapColor OAK_TAN = of(MapColor.OAK_TAN); + public static final CompatMapColor OFF_WHITE = of(MapColor.OFF_WHITE); + public static final CompatMapColor ORANGE = of(MapColor.ORANGE); + public static final CompatMapColor MAGENTA = of(MapColor.MAGENTA); + public static final CompatMapColor LIGHT_BLUE = of(MapColor.LIGHT_BLUE); + public static final CompatMapColor YELLOW = of(MapColor.YELLOW); + public static final CompatMapColor LIME = of(MapColor.LIME); + public static final CompatMapColor PINK = of(MapColor.PINK); + public static final CompatMapColor GRAY = of(MapColor.GRAY); + public static final CompatMapColor LIGHT_GRAY = of(MapColor.LIGHT_GRAY); + public static final CompatMapColor CYAN = of(MapColor.CYAN); + public static final CompatMapColor PURPLE = of(MapColor.PURPLE); + public static final CompatMapColor BLUE = of(MapColor.BLUE); + public static final CompatMapColor BROWN = of(MapColor.BROWN); + public static final CompatMapColor GREEN = of(MapColor.GREEN); + public static final CompatMapColor RED = of(MapColor.RED); + public static final CompatMapColor BLACK = of(MapColor.BLACK); + public static final CompatMapColor GOLD = of(MapColor.GOLD); + public static final CompatMapColor DIAMOND_BLUE = of(MapColor.DIAMOND_BLUE); + public static final CompatMapColor LAPIS_BLUE = of(MapColor.LAPIS_BLUE); + public static final CompatMapColor EMERALD_GREEN = of(MapColor.EMERALD_GREEN); + public static final CompatMapColor SPRUCE_BROWN = of(MapColor.SPRUCE_BROWN); + public static final CompatMapColor DARK_RED = of(MapColor.DARK_RED); + public static final CompatMapColor TERRACOTTA_WHITE = of(MapColor.TERRACOTTA_WHITE); + public static final CompatMapColor TERRACOTTA_ORANGE = of(MapColor.TERRACOTTA_ORANGE); + public static final CompatMapColor TERRACOTTA_MAGENTA = of(MapColor.TERRACOTTA_MAGENTA); + public static final CompatMapColor TERRACOTTA_LIGHT_BLUE = of(MapColor.TERRACOTTA_LIGHT_BLUE); + public static final CompatMapColor TERRACOTTA_YELLOW = of(MapColor.TERRACOTTA_YELLOW); + public static final CompatMapColor TERRACOTTA_LIME = of(MapColor.TERRACOTTA_LIME); + public static final CompatMapColor TERRACOTTA_PINK = of(MapColor.TERRACOTTA_PINK); + public static final CompatMapColor TERRACOTTA_GRAY = of(MapColor.TERRACOTTA_GRAY); + public static final CompatMapColor TERRACOTTA_LIGHT_GRAY = of(MapColor.TERRACOTTA_LIGHT_GRAY); + public static final CompatMapColor TERRACOTTA_CYAN = of(MapColor.TERRACOTTA_CYAN); + public static final CompatMapColor TERRACOTTA_PURPLE = of(MapColor.TERRACOTTA_PURPLE); + public static final CompatMapColor TERRACOTTA_BLUE = of(MapColor.TERRACOTTA_BLUE); + public static final CompatMapColor TERRACOTTA_BROWN = of(MapColor.TERRACOTTA_BROWN); + public static final CompatMapColor TERRACOTTA_GREEN = of(MapColor.TERRACOTTA_GREEN); + public static final CompatMapColor TERRACOTTA_RED = of(MapColor.TERRACOTTA_RED); + public static final CompatMapColor TERRACOTTA_BLACK = of(MapColor.TERRACOTTA_BLACK); + public static final CompatMapColor DULL_RED = of(MapColor.DULL_RED); + public static final CompatMapColor DULL_PINK = of(MapColor.DULL_PINK); + public static final CompatMapColor DARK_CRIMSON = of(MapColor.DARK_CRIMSON); + public static final CompatMapColor TEAL = of(MapColor.TEAL); + public static final CompatMapColor DARK_AQUA = of(MapColor.DARK_AQUA); + public static final CompatMapColor DARK_DULL_PINK = of(MapColor.DARK_DULL_PINK); + public static final CompatMapColor BRIGHT_TEAL = of(MapColor.BRIGHT_TEAL); + public static final CompatMapColor DEEPSLATE_GRAY = of(MapColor.DEEPSLATE_GRAY); + public static final CompatMapColor RAW_IRON_PINK = of(MapColor.RAW_IRON_PINK); + public static final CompatMapColor LICHEN_GREEN = of(MapColor.LICHEN_GREEN); + + public CompatMapColor(MapColor color) { + this.color = color; + } + + public static CompatMapColor of(MapColor color) { + return new CompatMapColor(color); + } + + public MapColor get() { + return color; + } + + public int getId() { + return color.id; + } + + public int getRgb() { + return color.color; + } + + public int getRenderColor(CompatBrightness brightness) { + return color.getRenderColor(brightness.get()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SnowballEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SnowballEntityUtil.java index b41984039..272bf5fdc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SnowballEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/SnowballEntityUtil.java @@ -3,12 +3,19 @@ import net.minecraft.entity.projectile.thrown.SnowballEntity; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; public class SnowballEntityUtil { public static SnowballEntity create(World world, double x, double y, double z) { return new SnowballEntity(world, x, y, z); } + public static SnowballEntity create(World world, double x, double y, double z, ItemStack stack) { + SnowballEntity entity = create(world, x, y, z); + entity.setItem(stack); + return entity; + } + public static void setVelocity(SnowballEntity entity, double x, double y, double z, float velocity, float divergence) { entity.setVelocity(x, y, z, velocity, divergence); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java index caf91b12e..82bffcfb1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/event/ItemEventGenerator.java @@ -1,12 +1,11 @@ package net.pitan76.mcpitanlib.api.util.event; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.TypedActionResult; import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; public class ItemEventGenerator { - public static TypedActionResult onRightClick(Item item, ItemUseEvent e) { - return item.use(e.world, e.user.getPlayerEntity(), e.hand); + public static CompatActionResult onRightClick(Item item, ItemUseEvent e) { + return CompatActionResult.create(item.use(e.world, e.user.getPlayerEntity(), e.hand).getResult()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemGroupUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemGroupUtil.java new file mode 100644 index 000000000..455d16d94 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemGroupUtil.java @@ -0,0 +1,48 @@ +package net.pitan76.mcpitanlib.api.util.item; + +import net.minecraft.item.ItemGroup; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class ItemGroupUtil { + public static Identifier toID(ItemGroup itemGroup) { + if (itemGroup.getDisplayName() instanceof TranslatableText) { + TranslatableText translatableText = (TranslatableText) itemGroup.getDisplayName(); + String[] strings = translatableText.getKey().split("\\."); + + if (strings.length == 3) + return new Identifier(strings[1], strings[2]); + } + + return CompatIdentifier.empty().toMinecraft(); + } + + public static ItemGroup fromId(Identifier identifier) { + return null; + } + + public static boolean isExist(Identifier identifier) { + return false; + } + + public static CompatIdentifier toCompatID(ItemGroup itemGroup) { + return CompatIdentifier.fromMinecraft(toID(itemGroup)); + } + + public static ItemGroup fromId(CompatIdentifier identifier) { + return fromId(identifier.toMinecraft()); + } + + public static boolean isExist(CompatIdentifier identifier) { + return isExist(identifier.toMinecraft()); + } + + public static int getRawId(ItemGroup itemGroup) { + return itemGroup.getIndex(); + } + + public static ItemGroup fromIndex(int index) { + return ItemGroup.GROUPS[index]; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemUtil.java new file mode 100644 index 000000000..d608f7129 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemUtil.java @@ -0,0 +1,250 @@ +package net.pitan76.mcpitanlib.api.util.item; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.text.TextComponent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("deprecation") +public class ItemUtil { + + /** + * Check if the item is equal. + * @param item Item to compare. + * @param item2 Item to compare. + * @return If the item is equal. + */ + public static boolean isEqual(Item item, Item item2) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.isEqual(item, item2); + } + + /** + * Get item from CompatIdentifier. + * @param id CompatIdentifier of the item. + * @return Item of the CompatIdentifier. + */ + public static Item fromId(CompatIdentifier id) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.fromId(id); + } + + public static Item fromId(String id) { + return fromId(CompatIdentifier.of(id)); + } + + public static Item fromId(String namespace, String path) { + return fromId(CompatIdentifier.of(namespace, path)); + } + + /** + * Get CompatIdentifier from Item. + * @param item Item to get CompatIdentifier. + * @return CompatIdentifier of the Item. + */ + public static CompatIdentifier toId(Item item) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.toCompatID(item); + } + + public static String toIdAsString(Item item) { + return toId(item).toString(); + } + + /** + * Check if the item exist. + * @param id CompatIdentifier of the item. + * @return If the item exist. + */ + public static boolean isExist(CompatIdentifier id) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.isExist(id); + } + + public static boolean isExist(String id) { + return isExist(CompatIdentifier.of(id)); + } + + public static boolean isExist(String namespace, String path) { + return isExist(CompatIdentifier.of(namespace, path)); + } + + public static boolean isMinecraftItem(Item item) { + return CompatIdentifier.isMinecraftNamespace(toId(item)); + } + + /** + * Create a new BlockItem. + * @param block Block to create BlockItem. + * @param settings CompatItemSettings of the BlockItem. + * @return The new BlockItem. + */ + public static BlockItem create(Block block, CompatibleItemSettings settings) { + if (!settings.changedTranslationKey) + settings.useBlockPrefixedTranslationKey(); + + return net.pitan76.mcpitanlib.api.util.ItemUtil.ofBlock(block, settings); + } + + /** + * Create a new Item. + * @param settings CompatItemSettings of the Item. + * @return The new Item. + */ + public static Item create(CompatibleItemSettings settings) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.of(settings); + } + + /** + * Get all items. + * @return List of all items. + */ + public static List getItems() { + return net.pitan76.mcpitanlib.api.util.ItemUtil.getAllItems(); + } + + /** + * Get items in the tag. + * @param tagKey TagKey of the items. + * @return List of items in the tag. + */ + public static List getInTag(TagKey tagKey) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.getItems(tagKey); + } + + /** + * Get items in the tag. + * @param id CompatIdentifier of the tag. + * @return List of items in the tag. + */ + public static List getInTag(CompatIdentifier id) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.getItems(id); + } + + public static List getInTag(String id) { + return getInTag(CompatIdentifier.of(id)); + } + + public static List getInTag(String namespace, String path) { + return getInTag(CompatIdentifier.of(namespace, path)); + } + + /** + * Check if the item is in the tag. + * @param item Item to check. + * @param tagKey TagKey of the tag. + * @return If the item is in the tag. + */ + public static boolean isInTag(Item item, TagKey tagKey) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.isIn(item, tagKey); + } + + /** + * Check if the item is in the tag. + * @param item Item to check. + * @param id CompatIdentifier of the tag. + * @return If the item is in the tag. + */ + public static boolean isInTag(Item item, CompatIdentifier id) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.isItemInTag(item, id); + } + + public static boolean isInTag(Item item, String id) { + return isInTag(item, CompatIdentifier.of(id)); + } + + public static boolean isInTag(Item item, String namespace, String path) { + return isInTag(item, CompatIdentifier.of(namespace, path)); + } + + /** + * Get raw id of the item. + * @param item Item to get raw id. + * @return Raw id of the item. + */ + public static int toRawId(Item item) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.getRawId(item); + } + + /** + * Get item from raw id. + * @param rawId Raw id of the item. + * @return Item from raw id. + */ + public static Item fromRawId(int rawId) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.fromIndex(rawId); + } + + /** + * Get items by namespace. + * @param namespace Namespace of the items. + * @return List of items by namespace. + */ + public static List getItemsByNamespace(String namespace) { + List items = new ArrayList<>(); + + for (Item item : getItems()) { + if (toId(item).getNamespace().equals(namespace)) + items.add(item); + } + + return items; + } + + /** + * Get number of all items. + * @return Number of all items. + */ + public static int getNumberOfItems() { + return getItems().size(); + } + + /** + * Get item from stack. + * @param stack ItemStack to get item. + * @return Item of the stack. + */ + public static Item of(ItemStack stack) { + return stack.getItem(); + } + + /** + * Check if the item is of the item. + * @param stack ItemStack to check. + * @param item Item to check. + * @return If the item is of the item. + */ + public static boolean isOf(ItemStack stack, Item item) { + return net.pitan76.mcpitanlib.api.util.ItemUtil.isOf(stack, item); + } + + /** + * Get name of the item. + * @param item Item + * @return Name of the item. + */ + public static String getNameAsString(Item item) { + return item.getName().getString(); + } + + /** + * Get name of the item. + * @param item Item + * @return Name of the item. + */ + public static TextComponent getName(Item item) { + return new TextComponent(item.getName()); + } + + /** + * Get translation key of the item. + * @param item Item + * @return Translation key of the item. + */ + public static String getTranslationKey(Item item) { + return item.getTranslationKey(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeMatcherUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeMatcherUtil.java index 6143cfd33..b3f34f7b0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeMatcherUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeMatcherUtil.java @@ -23,10 +23,12 @@ public static boolean match(RecipeMatcher matcher, CompatibleRecipeEntry entry, return match(matcher, entry.getRecipe(), output, multiplier); } + @Deprecated public static boolean match(RecipeMatcher matcher, Recipe recipe, IntList output) { return matcher.match(recipe, output); } + @Deprecated public static boolean match(RecipeMatcher matcher, Recipe recipe, IntList output, int multiplier) { return matcher.match(recipe, output, multiplier); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java index ac1802e19..42062ef4e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java @@ -2,6 +2,7 @@ import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; +import net.minecraft.world.World; public class FuelRegistry { private FuelRegistry() { @@ -11,7 +12,13 @@ private FuelRegistry() { public static void register(int time, ItemConvertible... item) { dev.architectury.registry.fuel.FuelRegistry.register(time, item); } + + @Deprecated public static int get(ItemStack stack) { return dev.architectury.registry.fuel.FuelRegistry.get(stack); } + + public static int get(World world, ItemStack stack) { + return dev.architectury.registry.fuel.FuelRegistry.get(stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java b/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java index 7f403b183..55e1cffd3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/debug/DebugTool.java @@ -1,18 +1,17 @@ package net.pitan76.mcpitanlib.debug; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.v2.CompatItem; -import static net.pitan76.mcpitanlib.MCPitanLib.id; -import static net.pitan76.mcpitanlib.MCPitanLib.registry; +import static net.pitan76.mcpitanlib.MCPitanLib.*; /** * A tool for debugging. * Example of condition: item instance DebugTool */ -public class DebugTool extends ExtendItem { +public class DebugTool extends CompatItem { - public static CompatibleItemSettings defaultSettings = CompatibleItemSettings.of(); + public static CompatibleItemSettings defaultSettings = CompatibleItemSettings.of(compatId("debug_tool")); public DebugTool() { super(defaultSettings); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java index e18206e27..f3122c706 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/MPLGuiLib.java @@ -1,22 +1,13 @@ package net.pitan76.mcpitanlib.guilib; -import net.pitan76.mcpitanlib.api.CommonModInitializer; -import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.PlatformUtil; -public class MPLGuiLib extends CommonModInitializer { +public class MPLGuiLib { public static final String MOD_ID = "mplguilib"; public static final String MOD_NAME = "MPL GuiLib"; - public static MPLGuiLib INSTANCE; - public static CompatRegistryV2 registry; - - @Override - public void init() { - INSTANCE = this; - registry = super.registry; - + public static void init() { if (PlatformUtil.isClient()) MGLClientNetworks.init(); } @@ -30,12 +21,10 @@ public static CompatIdentifier _id(String path) { return CompatIdentifier.of(MOD_ID, path); } - @Override public String getId() { return MOD_ID; } - @Override public String getName() { return MOD_NAME; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java index e69e7b43d..facc1262a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/guilib/api/render/PartsRenderer.java @@ -16,7 +16,7 @@ public static void drawBottom2TopProgressBar(DrawObjectDM drawObjectDM, int x, i } public static void drawBottom2TopProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u1, int v1, int u2, int v2, int width, int height, double value, double maxValue, CompatIdentifier texture) { - int percentage = (int) (value / maxValue * 100); + int percentage = (maxValue != 0) ? (int) (value / maxValue * 100) : 0; drawBottom2TopProgressBar(drawObjectDM, x, y, u1, v1, u2, v2, width, height, percentage, texture); } @@ -30,7 +30,7 @@ public static void drawTop2BottomProgressBar(DrawObjectDM drawObjectDM, int x, i } public static void drawTop2BottomProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u1, int v1, int u2, int v2, int width, int height, double value, double maxValue, CompatIdentifier texture) { - int percentage = (int) (value / maxValue * 100); + int percentage = (maxValue != 0) ? (int) (value / maxValue * 100) : 0; drawTop2BottomProgressBar(drawObjectDM, x, y, u1, v1, u2, v2, width, height, percentage, texture); } @@ -44,7 +44,7 @@ public static void drawLeft2RightProgressBar(DrawObjectDM drawObjectDM, int x, i } public static void drawLeft2RightProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u1, int v1, int u2, int v2, int width, int height, double value, double maxValue, CompatIdentifier texture) { - int percentage = (int) (value / maxValue * 100); + int percentage = (maxValue != 0) ? (int) (value / maxValue * 100) : 0; drawLeft2RightProgressBar(drawObjectDM, x, y, u1, v1, u2, v2, width, height, percentage, texture); } @@ -58,7 +58,7 @@ public static void drawRight2LeftProgressBar(DrawObjectDM drawObjectDM, int x, i } public static void drawRight2LeftProgressBar(DrawObjectDM drawObjectDM, int x, int y, int u1, int v1, int u2, int v2, int width, int height, double value, double maxValue, CompatIdentifier texture) { - int percentage = (int) (value / maxValue * 100); + int percentage = (maxValue != 0) ? (int) (value / maxValue * 100) : 0; drawRight2LeftProgressBar(drawObjectDM, x, y, u1, v1, u2, v2, width, height, percentage, texture); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java new file mode 100644 index 000000000..790e527e1 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java @@ -0,0 +1,57 @@ +package net.pitan76.mcpitanlib.midohra.block; + +import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; +import net.pitan76.mcpitanlib.api.util.BlockStateUtil; + +public class BlockState { + private final net.minecraft.block.BlockState state; + + private BlockWrapper blockWrapper; + + protected BlockState(net.minecraft.block.BlockState state) { + this.state = state; + } + + public static BlockState of(net.minecraft.block.BlockState state) { + return new BlockState(state); + } + + public static BlockState of(net.minecraft.block.Block block) { + if (block == null) + return of((net.minecraft.block.BlockState) null); + + return of(BlockStateUtil.getDefaultState(block)); + } + + public boolean isExist() { + return !isEmpty(); + } + + public boolean isEmpty() { + return state == null; + } + + public boolean isAir() { + return isEmpty() || BlockStateUtil.isAir(state); + } + + public CompatBlockSoundGroup getSoundGroup() { + return BlockStateUtil.getCompatSoundGroup(state); + } + + public BlockWrapper getBlock() { + if (blockWrapper == null) + blockWrapper = BlockWrapper.of(BlockStateUtil.getBlock(state)); + + return blockWrapper; + } + + public String getName() { + return getBlock().getName(); + } + + @Deprecated + public net.minecraft.block.BlockState toMinecraft() { + return state; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java new file mode 100644 index 000000000..5a0a77fa3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java @@ -0,0 +1,87 @@ +package net.pitan76.mcpitanlib.midohra.block; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.block.BlockUtil; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; + +public class BlockWrapper { + private final net.minecraft.block.Block block; + + protected BlockWrapper() { + this.block = null; + } + + protected BlockWrapper(net.minecraft.block.Block block) { + this.block = block; + } + + public static BlockWrapper of(net.minecraft.block.Block block) { + return new BlockWrapper(block); + } + + public static BlockWrapper of() { + return new BlockWrapper(); + } + + public static BlockWrapper of(CompatIdentifier id) { + if (BlockUtil.isExist(id)) + return of(BlockUtil.fromId(id)); + + return of(); + } + + public static BlockWrapper of(CompatIdentifier id, CompatIdentifier... ids) { + if (of(id).isExist()) return of(id); + + for (CompatIdentifier id1 : ids) { + if (of(id1).isExist()) + return of(id1); + } + + return of(); + } + + public boolean isExist() { + return !isEmpty(); + } + + public boolean isEmpty() { + return block == null; + } + + public net.minecraft.block.Block get() { + return block; + } + + public net.minecraft.block.Block gerOrDefault(net.minecraft.block.Block defaultItem) { + return isEmpty() ? defaultItem : block; + } + + public CompatIdentifier getId() { + if (isEmpty()) + return CompatIdentifier.empty(); + + return BlockUtil.toId(block); + } + + public String getName() { + if (isEmpty()) return ""; + return BlockUtil.getNameAsString(block); + } + + public String getTranslationKey() { + if (isEmpty()) return ""; + return BlockUtil.getTranslationKey(block); + } + + public ItemWrapper asItem() { + if (isEmpty()) + return ItemWrapper.of(); + + return ItemWrapper.of(BlockUtil.toItem(block)); + } + + public BlockState getDefaultState() { + return BlockState.of(block); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java new file mode 100644 index 000000000..fe6a0f5b8 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java @@ -0,0 +1,53 @@ +package net.pitan76.mcpitanlib.midohra.item; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.item.ItemGroupUtil; + +public class ItemGroupWrapper { + private final net.minecraft.item.ItemGroup itemGroup; + + protected ItemGroupWrapper() { + this.itemGroup = null; + } + + protected ItemGroupWrapper(net.minecraft.item.ItemGroup itemGroup) { + this.itemGroup = itemGroup; + } + + public static ItemGroupWrapper of(net.minecraft.item.ItemGroup itemGroup) { + return new ItemGroupWrapper(itemGroup); + } + + public static ItemGroupWrapper of(CompatIdentifier id) { + if (ItemGroupUtil.isExist(id)) + return of(ItemGroupUtil.fromId(id)); + + return of(); + } + + public static ItemGroupWrapper of() { + return new ItemGroupWrapper(); + } + + public boolean isExist() { + return !isEmpty(); + } + + public boolean isEmpty() { + return itemGroup == null; + } + + public net.minecraft.item.ItemGroup get() { + return itemGroup; + } + + public CompatIdentifier getId() { + if (isEmpty()) return CompatIdentifier.empty(); + return ItemGroupUtil.toCompatID(itemGroup); + } + + public ItemStack getIcon() { + if (isEmpty()) return ItemStack.EMPTY; + return ItemStack.of(itemGroup.getIcon()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroups.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroups.java new file mode 100644 index 000000000..7ceefce5a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroups.java @@ -0,0 +1,30 @@ +package net.pitan76.mcpitanlib.midohra.item; + +import net.pitan76.mcpitanlib.api.item.DefaultItemGroups; + +public class ItemGroups { + public static final ItemGroupWrapper BUILDING_BLOCKS = of(DefaultItemGroups.BUILDING_BLOCKS); + public static final ItemGroupWrapper COLORED_BLOCKS = of(DefaultItemGroups.COLORED_BLOCKS); + public static final ItemGroupWrapper NATURAL = of(DefaultItemGroups.NATURAL); + public static final ItemGroupWrapper FUNCTIONAL = of(DefaultItemGroups.FUNCTIONAL); + public static final ItemGroupWrapper REDSTONE = of(DefaultItemGroups.REDSTONE); + public static final ItemGroupWrapper HOTBAR = of(DefaultItemGroups.HOTBAR); + public static final ItemGroupWrapper SEARCH = of(DefaultItemGroups.SEARCH); + public static final ItemGroupWrapper TOOLS = of(DefaultItemGroups.TOOLS); + public static final ItemGroupWrapper COMBAT = of(DefaultItemGroups.COMBAT); + public static final ItemGroupWrapper FOOD_AND_DRINK = of(DefaultItemGroups.FOOD_AND_DRINK); + public static final ItemGroupWrapper INGREDIENTS = of(DefaultItemGroups.INGREDIENTS); + public static final ItemGroupWrapper SPAWN_EGGS = of(DefaultItemGroups.SPAWN_EGGS); + public static final ItemGroupWrapper OPERATOR = of(DefaultItemGroups.OPERATOR); + public static final ItemGroupWrapper INVENTORY = of(DefaultItemGroups.INVENTORY); + + // - 1.19.2 Item Group + public static final ItemGroupWrapper BREWING = FOOD_AND_DRINK; + public static final ItemGroupWrapper TRANSPORTATION = FUNCTIONAL; + public static final ItemGroupWrapper DECORATIONS = NATURAL; + public static final ItemGroupWrapper MISC = INGREDIENTS; + + private static ItemGroupWrapper of(net.minecraft.item.ItemGroup itemGroup) { + return ItemGroupWrapper.of(itemGroup); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java index 9990142e2..0fef58538 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java @@ -11,6 +11,7 @@ public class ItemStack { private final net.minecraft.item.ItemStack stack; + public static final ItemStack EMPTY = of(ItemStackUtil.empty()); protected ItemStack(net.minecraft.item.ItemStack stack) { this.stack = stack; @@ -18,7 +19,7 @@ protected ItemStack(net.minecraft.item.ItemStack stack) { public static ItemStack of(net.minecraft.item.ItemStack stack) { if (stack == null) - return new ItemStack(ItemStackUtil.empty()); + return EMPTY; return new ItemStack(stack); } @@ -31,6 +32,10 @@ public static ItemStack of(ItemConvertible item, int count) { return new Builder().item(item).count(count).build(); } + public static ItemStack empty() { + return EMPTY; + } + public int getCount() { return stack.getCount(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java new file mode 100644 index 000000000..be03f87d9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java @@ -0,0 +1,105 @@ +package net.pitan76.mcpitanlib.midohra.item; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; +import net.pitan76.mcpitanlib.api.util.item.ItemUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; + +public class ItemWrapper { + private final net.minecraft.item.Item item; + + protected ItemWrapper() { + this.item = null; + } + + protected ItemWrapper(net.minecraft.item.Item item) { + this.item = item; + } + + public static ItemWrapper of(net.minecraft.item.Item item) { + return new ItemWrapper(item); + } + + public static ItemWrapper of() { + return new ItemWrapper(); + } + + public static ItemWrapper of(CompatIdentifier id) { + if (ItemUtil.isExist(id)) + return of(ItemUtil.fromId(id)); + + return of(); + } + + public static ItemWrapper of(CompatIdentifier id, CompatIdentifier... ids) { + if (of(id).isExist()) return of(id); + + for (CompatIdentifier id1 : ids) { + if (of(id1).isExist()) + return of(id1); + } + + return of(); + } + + public boolean isExist() { + return !isEmpty(); + } + + public boolean isEmpty() { + return item == null; + } + + public boolean isAir() { + return isEmpty() || item == net.minecraft.item.Items.AIR; + } + + public net.minecraft.item.Item get() { + return item; + } + + public net.minecraft.item.Item gerOrDefault(net.minecraft.item.Item defaultItem) { + return isEmpty() ? defaultItem : item; + } + + public CompatIdentifier getId() { + if (isEmpty()) + return CompatIdentifier.empty(); + + return ItemUtil.toId(item); + } + + public String getName() { + if (isEmpty()) return ""; + return ItemUtil.getNameAsString(item); + } + + public String getTranslationKey() { + if (isEmpty()) return ""; + return ItemUtil.getTranslationKey(item); + } + + public ItemStack createStack(int count) { + if (isEmpty()) return ItemStack.EMPTY; + return ItemStack.of(ItemStackUtil.create(item, count)); + } + + public ItemStack createStack() { + return createStack(1); + } + + public boolean isInTag(CompatIdentifier id) { + return ItemUtil.isInTag(item, id); + } + + public boolean isBlock() { + return !isEmpty() && item instanceof net.minecraft.item.BlockItem; + } + + public BlockWrapper asBlock() { + if (!isBlock()) + return BlockWrapper.of(); + + return BlockWrapper.of(((net.minecraft.item.BlockItem) item).getBlock()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/Items.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/Items.java new file mode 100644 index 000000000..07adf908a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/Items.java @@ -0,0 +1,20 @@ +package net.pitan76.mcpitanlib.midohra.item; + +public class Items { + + public static ItemWrapper AIR = of(net.minecraft.item.Items.AIR); + public static ItemWrapper DIRT = of(net.minecraft.item.Items.DIRT); + public static ItemWrapper GRASS_BLOCK = of(net.minecraft.item.Items.GRASS_BLOCK); + public static ItemWrapper STONE = of(net.minecraft.item.Items.STONE); + public static ItemWrapper SAND = of(net.minecraft.item.Items.SAND); + public static ItemWrapper COBBLESTONE = of(net.minecraft.item.Items.COBBLESTONE); + public static ItemWrapper OAK_LOG = of(net.minecraft.item.Items.OAK_LOG); + public static ItemWrapper OAK_PLANKS = of(net.minecraft.item.Items.OAK_PLANKS); + public static ItemWrapper OAK_LEAVES = of(net.minecraft.item.Items.OAK_LEAVES); + public static ItemWrapper WHITE_WOOL = of(net.minecraft.item.Items.WHITE_WOOL); + public static ItemWrapper GLASS = of(net.minecraft.item.Items.GLASS); + + public static ItemWrapper of(net.minecraft.item.Item item) { + return ItemWrapper.of(item); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java index c7143f5bc..248f0d47f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java @@ -70,7 +70,7 @@ public class AbstractBlockMixin { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); - ActionResult returnValue = provider.onRightClick(new BlockUseEvent(state, world, pos, player, hand, hit), options); + ActionResult returnValue = provider.onRightClick(new BlockUseEvent(state, world, pos, player, hand, hit), options).toActionResult(); if (options.cancel && returnValue != null) cir.setReturnValue(returnValue); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 209fdb410..5749bcc81 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -10,13 +10,14 @@ import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; -import net.minecraft.util.Rarity; -import net.minecraft.util.TypedActionResult; +import net.minecraft.util.UseAction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.*; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider.Options; +import net.pitan76.mcpitanlib.api.item.args.UseActionArgs; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -28,11 +29,11 @@ @Mixin(Item.class) public class ItemMixin { @Inject(method = "use", at = @At("HEAD"), cancellable = true) - private void mcpitanlib$use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> cir) { + private void mcpitanlib$use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); - TypedActionResult returnValue = provider.onRightClick(new ItemUseEvent(world, user, hand), options); + ActionResult returnValue = provider.onRightClick(new ItemUseEvent(world, user, hand), options).toActionResult(); if (options.cancel && returnValue != null) cir.setReturnValue(returnValue); } @@ -44,7 +45,7 @@ public class ItemMixin { ExtendItemProvider provider = (ExtendItemProvider) this; ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; Options options = new Options(); - ActionResult returnValue = provider.onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit()), options); + ActionResult returnValue = provider.onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit()), options).toActionResult(); if (options.cancel && returnValue != null) cir.setReturnValue(returnValue); } @@ -55,7 +56,7 @@ public class ItemMixin { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); - ActionResult returnValue = provider.onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand), options); + ActionResult returnValue = provider.onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand), options).toActionResult(); if (options.cancel && returnValue != null) cir.setReturnValue(returnValue); } @@ -127,17 +128,7 @@ public class ItemMixin { } } - @Inject(method = "getRarity", at = @At("HEAD"), cancellable = true) - private void mcpitanlib$getRarity(ItemStack stack, CallbackInfoReturnable cir) { - if (this instanceof ExtendItemProvider) { - ExtendItemProvider provider = (ExtendItemProvider) this; - Options options = new Options(); - Rarity returnValue = provider.getRarity(stack, options); - if (options.cancel) - cir.setReturnValue(returnValue); - } - } - + /* @Inject(method = "isEnchantable", at = @At("HEAD"), cancellable = true) private void mcpitanlib$isEnchantable(ItemStack stack, CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { @@ -148,7 +139,9 @@ public class ItemMixin { cir.setReturnValue(returnValue); } } + */ + /* @Inject(method = "getEnchantability", at = @At("HEAD"), cancellable = true) private void mcpitanlib$getEnchantability(CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { @@ -159,6 +152,7 @@ public class ItemMixin { cir.setReturnValue(returnValue); } } + */ @Inject(method = "getItemBarColor", at = @At("HEAD"), cancellable = true) private void mcpitanlib$getItemBarColor(ItemStack stack, CallbackInfoReturnable cir) { @@ -192,4 +186,15 @@ public class ItemMixin { cir.setReturnValue(returnValue); } } + + @Inject(method = "getUseAction", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$getUseAction(ItemStack stack, CallbackInfoReturnable cir) { + if (this instanceof CompatItemProvider) { + CompatItemProvider provider = (CompatItemProvider) this; + Options options = new Options(); + UseAction returnValue = provider.getUseAction(new UseActionArgs(stack), options).getUseAction(); + if (options.cancel) + cir.setReturnValue(returnValue); + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java index 7822463ea..7a52d1587 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiBlock.java @@ -2,21 +2,22 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; -import net.minecraft.util.ActionResult; -import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlock; import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; import net.pitan76.mcpitanlib.api.gui.v2.SimpleScreenHandlerFactory; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; -public class ExampleGuiBlock extends ExtendBlock implements SimpleScreenHandlerFactory { +public class ExampleGuiBlock extends CompatBlock implements SimpleScreenHandlerFactory { - public ExampleGuiBlock(Settings settings) { + public ExampleGuiBlock(CompatibleBlockSettings settings) { super(settings); } @Override - public ActionResult onRightClick(BlockUseEvent e) { + public CompatActionResult onRightClick(BlockUseEvent e) { if (e.isClient()) e.player.openGuiScreen(this); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java index 1db7fbac3..7f3571e0a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleGuiItem.java @@ -1,25 +1,24 @@ package net.pitan76.mcpitanlib.test; -import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; -import net.minecraft.util.TypedActionResult; import net.pitan76.mcpitanlib.api.event.container.factory.DisplayNameArgs; import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; import net.pitan76.mcpitanlib.api.gui.v2.SimpleScreenHandlerFactory; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.v2.CompatItem; +import net.pitan76.mcpitanlib.api.util.StackActionResult; import net.pitan76.mcpitanlib.api.util.TextUtil; -public class ExampleGuiItem extends ExtendItem implements SimpleScreenHandlerFactory { +public class ExampleGuiItem extends CompatItem implements SimpleScreenHandlerFactory { public ExampleGuiItem(CompatibleItemSettings settings) { super(settings); } @Override - public TypedActionResult onRightClick(ItemUseEvent e) { + public StackActionResult onRightClick(ItemUseEvent e) { if (!e.isClient()) e.user.openGuiScreen(this); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java index 92ff67617..e1f1da908 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java @@ -4,21 +4,21 @@ import net.minecraft.item.Item; import net.minecraft.screen.ScreenHandlerType; import net.pitan76.mcpitanlib.api.CommonModInitializer; -import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; -import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlock; import net.pitan76.mcpitanlib.api.command.CommandRegistry; import net.pitan76.mcpitanlib.api.gui.SimpleScreenHandlerTypeBuilder; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.DefaultItemGroups; -import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.item.v2.CompatItem; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.simple.item.SimpleGuiItem; import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; import net.pitan76.mcpitanlib.api.registry.result.SupplierResult; import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; -import net.pitan76.mcpitanlib.api.util.ItemUtil; +import net.pitan76.mcpitanlib.api.util.item.ItemUtil; import net.pitan76.mcpitanlib.guilib.GuiRegistry; +import net.pitan76.mcpitanlib.midohra.item.ItemGroups; public class ExampleMod extends CommonModInitializer { public static final String MOD_ID = "examplemod"; @@ -38,6 +38,13 @@ public class ExampleMod extends CommonModInitializer { public static RegistryResult EXAMPLE_GUI_BLOCK; public static RegistryResult EXAMPLE_GUI_BLOCK_ITEM; + public static CompatIdentifier EXAMPLE_ITEM_ID = _id("example_item"); + public static CompatIdentifier EXAMPLE_BLOCK_ID = _id("example_block"); + public static CompatIdentifier EXAMPLE_GUI_ITEM_ID = _id("example_gui_item"); + public static CompatIdentifier EXAMPLE_GUI_BLOCK_ID = _id("example_gui_block"); + public static CompatIdentifier EXAMPLE_CONTAINER_GUI_ITEM_ID = _id("example_container_gui_item"); + + public void init() { INSTANCE = this; registry = super.registry; @@ -46,18 +53,18 @@ public void init() { EXAMPLE_SCREENHANDLER = registry.registerScreenHandlerType(compatId("example_gui"), new SimpleScreenHandlerTypeBuilder<>(ExampleScreenHandler::new)); EXAMPLE_CONTAINER_GUI = GuiRegistry.register(registry, compatId("example_container_gui"), new SimpleScreenHandlerTypeBuilder<>(ExampleContainerGui::new)); - EXAMPLE_ITEM = registry.registerItem(compatId("example_item"), () -> new ExtendItem(new CompatibleItemSettings().addGroup(DefaultItemGroups.INGREDIENTS, compatId("example_item")))); - EXAMPLE_BLOCK = registry.registerBlock(compatId("example_block"), () -> new ExtendBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE))); - EXAMPLE_BLOCK_ITEM = registry.registerItem(compatId("example_block"), () -> ItemUtil.ofBlock(EXAMPLE_BLOCK.supplier.get(), new CompatibleItemSettings().addGroup(DefaultItemGroups.INGREDIENTS, compatId("example_block")))); + EXAMPLE_ITEM = registry.registerItem(EXAMPLE_ITEM_ID, () -> new CompatItem(CompatibleItemSettings.of(EXAMPLE_ITEM_ID).addGroup(ItemGroups.INGREDIENTS))); + EXAMPLE_BLOCK = registry.registerBlock(EXAMPLE_BLOCK_ID, () -> new CompatBlock(CompatibleBlockSettings.of(EXAMPLE_BLOCK_ID, CompatibleMaterial.STONE))); + EXAMPLE_BLOCK_ITEM = registry.registerItem(EXAMPLE_BLOCK_ID, () -> ItemUtil.create(EXAMPLE_BLOCK.supplier.get(), CompatibleItemSettings.of(EXAMPLE_BLOCK_ID).addGroup(ItemGroups.INGREDIENTS))); - EXAMPLE_GUI_ITEM = registry.registerItem(compatId("example_gui_item"), () -> new ExampleGuiItem(new CompatibleItemSettings().addGroup(DefaultItemGroups.INGREDIENTS, compatId("example_gui_item")))); + EXAMPLE_GUI_ITEM = registry.registerItem(EXAMPLE_GUI_ITEM_ID, () -> new ExampleGuiItem(CompatibleItemSettings.of(EXAMPLE_GUI_ITEM_ID).addGroup(ItemGroups.INGREDIENTS))); - EXAMPLE_GUI_BLOCK = registry.registerBlock(compatId("example_gui_block"), () -> new ExampleGuiBlock(CompatibleBlockSettings.of(CompatibleMaterial.STONE).build())); - EXAMPLE_GUI_BLOCK_ITEM = registry.registerItem(compatId("example_gui_block"), () -> ItemUtil.ofBlock(EXAMPLE_GUI_BLOCK.supplier.get(), new CompatibleItemSettings().addGroup(() -> DefaultItemGroups.INGREDIENTS, compatId("example_gui_block")))); + EXAMPLE_GUI_BLOCK = registry.registerBlock(EXAMPLE_GUI_BLOCK_ID, () -> new ExampleGuiBlock(CompatibleBlockSettings.of(EXAMPLE_GUI_BLOCK_ID, CompatibleMaterial.STONE))); + EXAMPLE_GUI_BLOCK_ITEM = registry.registerItem(EXAMPLE_GUI_BLOCK_ID, () -> ItemUtil.create(EXAMPLE_GUI_BLOCK.supplier.get(), CompatibleItemSettings.of(EXAMPLE_GUI_BLOCK_ID).addGroup(ItemGroups.INGREDIENTS))); - EXAMPLE_CONTAINER_GUI_ITEM = registry.registerItem(compatId("example_container_gui_item"), - () -> new SimpleGuiItem(CompatibleItemSettings.of() - .addGroup(DefaultItemGroups.INGREDIENTS, compatId("example_container_gui_item")), + EXAMPLE_CONTAINER_GUI_ITEM = registry.registerItem(EXAMPLE_CONTAINER_GUI_ITEM_ID, + () -> new SimpleGuiItem(CompatibleItemSettings.of(EXAMPLE_CONTAINER_GUI_ITEM_ID) + .addGroup(ItemGroups.INGREDIENTS), ExampleContainerGui::new) ); diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/diamond_tool_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/diamond_tool_materials.json new file mode 100644 index 000000000..f44f30dd5 --- /dev/null +++ b/common/src/main/resources/data/mcpitanlib/tags/items/diamond_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:diamond" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/gold_tool_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/gold_tool_materials.json new file mode 100644 index 000000000..07e9f66a3 --- /dev/null +++ b/common/src/main/resources/data/mcpitanlib/tags/items/gold_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gold_ingot" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/iron_tool_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/iron_tool_materials.json new file mode 100644 index 000000000..c656021bd --- /dev/null +++ b/common/src/main/resources/data/mcpitanlib/tags/items/iron_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:iron_ingot" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/leather_armor_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/leather_armor_materials.json new file mode 100644 index 000000000..71b797d35 --- /dev/null +++ b/common/src/main/resources/data/mcpitanlib/tags/items/leather_armor_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:leather" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/netherite_tool_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/netherite_tool_materials.json new file mode 100644 index 000000000..bd6929df7 --- /dev/null +++ b/common/src/main/resources/data/mcpitanlib/tags/items/netherite_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:netherite_ingot" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/stone_tool_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/stone_tool_materials.json new file mode 100644 index 000000000..e579c141b --- /dev/null +++ b/common/src/main/resources/data/mcpitanlib/tags/items/stone_tool_materials.json @@ -0,0 +1,7 @@ +{ + "values": [ + "minecraft:cobblestone", + "minecraft:blackstone", + "minecraft:cobbled_deepslate" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/turtle_helmet_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/turtle_helmet_materials.json new file mode 100644 index 000000000..d1d4c27fb --- /dev/null +++ b/common/src/main/resources/data/mcpitanlib/tags/items/turtle_helmet_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:turtle_scute" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/wooden_tool_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/wooden_tool_materials.json new file mode 100644 index 000000000..97fee2c01 --- /dev/null +++ b/common/src/main/resources/data/mcpitanlib/tags/items/wooden_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#minecraft:planks" + ] +} \ No newline at end of file diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java index 2d14d9ed2..3b9f71300 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/event/fabric/WorldRenderRegistryImpl.java @@ -5,7 +5,6 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; import net.minecraft.util.math.Matrix4f; -import net.minecraft.util.profiler.Profiler; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineEvent; import net.pitan76.mcpitanlib.api.client.event.listener.BeforeBlockOutlineListener; import net.pitan76.mcpitanlib.api.client.event.listener.WorldRenderContext; @@ -56,11 +55,6 @@ public ClientWorld getWorld() { return worldRenderContext.world(); } - @Override - public Profiler getProfiler() { - return worldRenderContext.profiler(); - } - @Override public boolean isAdvancedTranslucency() { return worldRenderContext.advancedTranslucency(); @@ -121,11 +115,6 @@ public ClientWorld getWorld() { return context.world(); } - @Override - public Profiler getProfiler() { - return context.profiler(); - } - @Override public boolean isAdvancedTranslucency() { return context.advancedTranslucency(); diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java index 4da0c92b4..e9320aa22 100644 --- a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/event/forge/WorldRenderRegistryImpl.java @@ -71,11 +71,6 @@ public ClientWorld getWorld() { return MinecraftClient.getInstance().world; } - @Override - public Profiler getProfiler() { - return MinecraftClient.getInstance().getProfiler(); - } - @Deprecated @Override public boolean isAdvancedTranslucency() { @@ -147,11 +142,6 @@ public ClientWorld getWorld() { return MinecraftClient.getInstance().world; } - @Override - public Profiler getProfiler() { - return MinecraftClient.getInstance().getProfiler(); - } - @Deprecated @Override public boolean isAdvancedTranslucency() { diff --git a/info.properties b/info.properties index 212b6bcca..8c8e61a65 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=2.5.2 +mod_version=3.0.0 maven_group=net.pitan76 changelog= \ No newline at end of file From 11faff26f721524e9c305a4b3b6d62e1a4f7dfc6 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Wed, 6 Nov 2024 18:21:48 +0900 Subject: [PATCH 388/617] use compatitemprovider --- .../api/item/CompatibleArmorItem.java | 14 +++++++++++++- .../api/item/tool/CompatibleAxeItem.java | 16 +++++++++++++--- .../api/item/tool/CompatibleHoeItem.java | 16 +++++++++++++--- .../item/tool/CompatibleMiningToolItem.java | 15 ++++++++++++--- .../api/item/tool/CompatiblePickaxeItem.java | 16 +++++++++++++--- .../api/item/tool/CompatibleShearsItem.java | 16 +++++++++++++--- .../api/item/tool/CompatibleShovelItem.java | 14 +++++++++++--- .../api/item/tool/CompatibleSwordItem.java | 16 +++++++++++++--- .../api/item/tool/CompatibleToolItem.java | 15 ++++++++++++--- .../api/item/v2/ExtendBlockItem.java | 18 +++++++++++++----- 10 files changed, 126 insertions(+), 30 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java index 82244034e..9d6316134 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleArmorItem.java @@ -1,13 +1,25 @@ package net.pitan76.mcpitanlib.api.item; import net.minecraft.item.ArmorItem; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; -public class CompatibleArmorItem extends ArmorItem implements ExtendItemProvider { +public class CompatibleArmorItem extends ArmorItem implements CompatItemProvider { public final ArmorEquipmentType type; + + public CompatibleItemSettings settings; + public CompatibleArmorItem(CompatibleArmorMaterial material, ArmorEquipmentType type, CompatibleItemSettings settings) { super(material.build(), type.getSlot(), settings.build()); this.type = type; + + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } /** diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java index bf926b6d7..7eb66217d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleAxeItem.java @@ -9,16 +9,26 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; + +public class CompatibleAxeItem extends AxeItem implements CompatItemProvider { + + public CompatibleItemSettings settings; -public class CompatibleAxeItem extends AxeItem implements ExtendItemProvider { public CompatibleAxeItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material.build(), attackDamage, attackSpeed, settings.build()); + this.settings = settings; } public CompatibleAxeItem(float attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } public boolean overrideIsSuitableFor(BlockState state) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java index 1f4d84d57..c61228b2c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleHoeItem.java @@ -9,16 +9,26 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; + +public class CompatibleHoeItem extends HoeItem implements CompatItemProvider { + + public CompatibleItemSettings settings; -public class CompatibleHoeItem extends HoeItem implements ExtendItemProvider { public CompatibleHoeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material.build(), attackDamage, attackSpeed, settings.build()); + this.settings = settings; } public CompatibleHoeItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } public boolean overrideIsSuitableFor(BlockState state) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java index 428f56df2..58be76517 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java @@ -10,11 +10,14 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.tag.TagKey; -public class CompatibleMiningToolItem extends MiningToolItem implements ExtendItemProvider { +public class CompatibleMiningToolItem extends MiningToolItem implements CompatItemProvider { + + public CompatibleItemSettings settings; + @Deprecated protected CompatibleMiningToolItem(float attackDamage, float attackSpeed, ToolMaterial material, net.minecraft.tag.TagKey effectiveBlocks, Settings settings) { super(attackDamage, attackSpeed, material, effectiveBlocks, settings); @@ -22,6 +25,12 @@ protected CompatibleMiningToolItem(float attackDamage, float attackSpeed, ToolMa public CompatibleMiningToolItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, TagKey tagKey, CompatibleItemSettings settings) { this(attackDamage, attackSpeed, material.build(), tagKey.getTagKey(), settings.build()); + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } public boolean overrideIsSuitableFor(BlockState state) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java index 13e21b546..e89e1a622 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatiblePickaxeItem.java @@ -9,16 +9,26 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; + +public class CompatiblePickaxeItem extends PickaxeItem implements CompatItemProvider { + + public CompatibleItemSettings settings; -public class CompatiblePickaxeItem extends PickaxeItem implements ExtendItemProvider { public CompatiblePickaxeItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material.build(), attackDamage, attackSpeed, settings.build()); + this.settings = settings; } public CompatiblePickaxeItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } public boolean overrideIsSuitableFor(BlockState state) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java index a38a4d1ba..634bd0013 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShearsItem.java @@ -8,16 +8,26 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; -public class CompatibleShearsItem extends ShearsItem implements ExtendItemProvider { +public class CompatibleShearsItem extends ShearsItem implements CompatItemProvider { + + public CompatibleItemSettings settings; + + @Deprecated public CompatibleShearsItem(Settings settings) { super(settings); } public CompatibleShearsItem(CompatibleItemSettings settings) { this(settings.build()); + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } public boolean overrideIsSuitableFor(BlockState state) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java index 356c8d7b4..c27b44343 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleShovelItem.java @@ -9,10 +9,13 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; + +public class CompatibleShovelItem extends ShovelItem implements CompatItemProvider { + + public CompatibleItemSettings settings; -public class CompatibleShovelItem extends ShovelItem implements ExtendItemProvider { public CompatibleShovelItem(CompatibleToolMaterial material, float attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material.build(), attackDamage, attackSpeed, settings.build()); } @@ -21,6 +24,11 @@ public CompatibleShovelItem(float attackDamage, float attackSpeed, ToolMaterial super(material, attackDamage, attackSpeed, settings.build()); } + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; + } + public boolean overrideIsSuitableFor(BlockState state) { return super.isSuitableFor(state); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java index 1d345eccf..07a55d103 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleSwordItem.java @@ -9,16 +9,26 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; + +public class CompatibleSwordItem extends SwordItem implements CompatItemProvider { + + public CompatibleItemSettings settings; -public class CompatibleSwordItem extends SwordItem implements ExtendItemProvider { public CompatibleSwordItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatibleItemSettings settings) { super(material.build(), attackDamage, attackSpeed, settings.build()); + this.settings = settings; } public CompatibleSwordItem(int attackDamage, float attackSpeed, ToolMaterial material, CompatibleItemSettings settings) { super(material, attackDamage, attackSpeed, settings.build()); + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } public boolean overrideIsSuitableFor(BlockState state) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java index 646c1addc..b59a701b4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleToolItem.java @@ -9,10 +9,13 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; + +public class CompatibleToolItem extends ToolItem implements CompatItemProvider { + + public CompatibleItemSettings settings; -public class CompatibleToolItem extends ToolItem implements ExtendItemProvider { @Deprecated protected CompatibleToolItem(ToolMaterial material, Settings settings) { super(material, settings); @@ -20,6 +23,12 @@ protected CompatibleToolItem(ToolMaterial material, Settings settings) { public CompatibleToolItem(CompatibleToolMaterial material, CompatibleItemSettings settings) { this(material.build(), settings.build()); + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } public boolean overrideIsSuitableFor(BlockState state) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java index ec3724971..80d9276b1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ExtendBlockItem.java @@ -10,21 +10,29 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; -import net.pitan76.mcpitanlib.api.item.CompatibleItemSettings; -import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; import org.jetbrains.annotations.Nullable; import java.util.List; -public class ExtendBlockItem extends BlockItem implements ExtendItemProvider { +public class ExtendBlockItem extends BlockItem implements CompatItemProvider { + + public CompatibleItemSettings settings; + + @Deprecated public ExtendBlockItem(Block block, Settings settings) { super(block, settings); } public ExtendBlockItem(Block block, CompatibleItemSettings settings) { this(block, settings.build()); + this.settings = settings; + } + + @Override + public CompatibleItemSettings getCompatSettings() { + return settings; } @Deprecated @@ -37,7 +45,7 @@ public ActionResult useOnBlock(ItemUsageContext context) { @Deprecated @Override public CompatActionResult onRightClickOnBlock(ItemUseOnBlockEvent event, Options options) { - return ExtendItemProvider.super.onRightClickOnBlock(event, options); + return CompatItemProvider.super.onRightClickOnBlock(event, options); } public CompatActionResult onRightClickOnBlock(ItemUseOnBlockEvent event) { @@ -53,7 +61,7 @@ public void appendTooltip(ItemStack stack, @Nullable World world, List too @Deprecated @Override public void appendTooltip(ItemAppendTooltipEvent event, Options options) { - ExtendItemProvider.super.appendTooltip(event, options); + CompatItemProvider.super.appendTooltip(event, options); } public void appendTooltip(ItemAppendTooltipEvent event) { From dd844ca9e49d52766620982f76b85eed3e8029a4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:25:30 +0900 Subject: [PATCH 389/617] fix mixin --- .../main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 5749bcc81..de67b5f0e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -127,8 +127,6 @@ public class ItemMixin { ci.cancel(); } } - - /* @Inject(method = "isEnchantable", at = @At("HEAD"), cancellable = true) private void mcpitanlib$isEnchantable(ItemStack stack, CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { @@ -139,9 +137,7 @@ public class ItemMixin { cir.setReturnValue(returnValue); } } - */ - /* @Inject(method = "getEnchantability", at = @At("HEAD"), cancellable = true) private void mcpitanlib$getEnchantability(CallbackInfoReturnable cir) { if (this instanceof ExtendItemProvider) { @@ -152,7 +148,6 @@ public class ItemMixin { cir.setReturnValue(returnValue); } } - */ @Inject(method = "getItemBarColor", at = @At("HEAD"), cancellable = true) private void mcpitanlib$getItemBarColor(ItemStack stack, CallbackInfoReturnable cir) { From a27deba6d46695ec3191fb283ef966b20ac128c2 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:17:23 +0900 Subject: [PATCH 390/617] add TagAPI and Fix CompatColor --- .../api/block/v2/BlockSettingsBuilder.java | 4 +- .../api/block/v2/CompatibleBlockSettings.java | 17 +++++++ .../api/item/v2/CompatArmorMaterial.java | 1 + .../api/item/v3/CompatArmorMaterial.java | 3 +- .../mcpitanlib/api/tag/v2/CompatTagKey.java | 29 +++++++++++ .../api/tag/v2/CompatTagKeyType.java | 48 +++++++++++++++++++ .../api/tag/v2/typed/BlockTagKey.java | 25 ++++++++++ .../api/tag/v2/typed/EntityTagKey.java | 20 ++++++++ .../api/tag/v2/typed/FluidTagKey.java | 18 +++++++ .../api/tag/v2/typed/ItemTagKey.java | 31 ++++++++++++ .../api/util/color/CompatDyeColor.java | 2 +- .../api/util/color/CompatMapColor.java | 2 +- 12 files changed, 194 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKey.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/BlockTagKey.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/EntityTagKey.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/FluidTagKey.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/ItemTagKey.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java index e0d04ee8b..fa012ed4e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java @@ -97,9 +97,9 @@ public CompatibleBlockSettings build(CompatIdentifier id) { settings = CompatibleBlockSettings.of(id, material); if (mapColor != null) { - settings = settings.mapColor(mapColor.get()); + settings = settings.mapColor(mapColor.getColor()); } else if (dyeColor != null) { - settings = settings.mapColor(dyeColor.get().getMapColor()); + settings = settings.mapColor(dyeColor.getColor().getMapColor()); } if (requiresTool) settings.requiresTool(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatibleBlockSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatibleBlockSettings.java index 8b8b78bb3..ff26eddf4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatibleBlockSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatibleBlockSettings.java @@ -10,6 +10,8 @@ import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.color.CompatDyeColor; +import net.pitan76.mcpitanlib.api.util.color.CompatMapColor; import java.util.function.Function; import java.util.function.ToIntFunction; @@ -129,11 +131,26 @@ public CompatibleBlockSettings mapColor(DyeColor color) { return this; } + public CompatibleBlockSettings mapColor(CompatMapColor color) { + super.mapColor(color.getColor()); + return this; + } + + public CompatibleBlockSettings mapColor(CompatDyeColor color) { + super.mapColor(color.getColor()); + return this; + } + public CompatibleBlockSettings mapColor(Function color) { super.mapColor(color); return this; } + public CompatibleBlockSettings compatMapColor(Function color) { + super.mapColor(state -> color.apply(net.pitan76.mcpitanlib.midohra.block.BlockState.of(state)).getColor()); + return this; + } + @Deprecated public CompatibleBlockSettings dropsLike(Block source) { super.dropsLike(source); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java index 219e3400a..8d757d099 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatArmorMaterial.java @@ -6,6 +6,7 @@ import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +@Deprecated public interface CompatArmorMaterial extends CompatibleArmorMaterial { @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatArmorMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatArmorMaterial.java index 132e57239..472e44342 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatArmorMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/CompatArmorMaterial.java @@ -1,10 +1,9 @@ package net.pitan76.mcpitanlib.api.item.v3; import net.minecraft.recipe.Ingredient; -import net.pitan76.mcpitanlib.api.item.CompatibleArmorMaterial; import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; -public interface CompatArmorMaterial extends CompatibleArmorMaterial { +public interface CompatArmorMaterial extends net.pitan76.mcpitanlib.api.item.v2.CompatArmorMaterial { @Override default Ingredient getRepairIngredient() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKey.java new file mode 100644 index 000000000..63f4df308 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKey.java @@ -0,0 +1,29 @@ +package net.pitan76.mcpitanlib.api.tag.v2; + +import net.minecraft.registry.entry.RegistryEntry; +import net.pitan76.mcpitanlib.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class CompatTagKey extends TagKey { + @Deprecated + public CompatTagKey(net.minecraft.registry.tag.TagKey tagKey) { + super(tagKey); + } + + @Deprecated + public static CompatTagKey of(net.minecraft.registry.tag.TagKey tagKey) { + return new CompatTagKey<>(tagKey); + } + + public static CompatTagKey of(CompatTagKeyType type, CompatIdentifier identifier) { + return of(net.minecraft.registry.tag.TagKey.of(type.getRegistryKey(), identifier.toMinecraft())); + } + + public boolean isOf(T value) { + return RegistryEntry.of(value).isIn(getTagKey()); + } + + public CompatIdentifier getId() { + return CompatIdentifier.fromMinecraft(getTagKey().id()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java new file mode 100644 index 000000000..2a0dabc61 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java @@ -0,0 +1,48 @@ +package net.pitan76.mcpitanlib.api.tag.v2; + +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.EntityType; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.screen.ScreenHandlerType; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class CompatTagKeyType { + public static final CompatTagKeyType BLOCK = of(RegistryKeys.BLOCK); + public static final CompatTagKeyType ITEM = new CompatTagKeyType<>(RegistryKeys.ITEM); + public static final CompatTagKeyType FLUID = new CompatTagKeyType<>(RegistryKeys.FLUID); + public static final CompatTagKeyType> ENTITY_TYPE = new CompatTagKeyType<>(RegistryKeys.ENTITY_TYPE); + public static final CompatTagKeyType> BLOCK_ENTITY_TYPE = new CompatTagKeyType<>(RegistryKeys.BLOCK_ENTITY_TYPE); + public static final CompatTagKeyType> SCREEN_HANDLER = new CompatTagKeyType<>(RegistryKeys.SCREEN_HANDLER); + + public final CompatIdentifier id; + + protected CompatTagKeyType(CompatIdentifier id) { + this.id = id; + } + + public static CompatTagKeyType of(CompatIdentifier id) { + return new CompatTagKeyType<>(id); + } + + // RegistryKey + private RegistryKey> key; + + protected CompatTagKeyType(RegistryKey> key) { + this.id = CompatIdentifier.fromMinecraft(key.getRegistry()); + this.key = key; + } + + public static CompatTagKeyType of(RegistryKey> key) { + return new CompatTagKeyType<>(key); + } + + @Deprecated + public RegistryKey> getRegistryKey() { + return key; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/BlockTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/BlockTagKey.java new file mode 100644 index 000000000..382e101b8 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/BlockTagKey.java @@ -0,0 +1,25 @@ +package net.pitan76.mcpitanlib.api.tag.v2.typed; + +import net.minecraft.block.Block; +import net.minecraft.registry.tag.TagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKeyType; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.block.BlockUtil; + +import java.util.List; + +public class BlockTagKey extends CompatTagKey { + @Deprecated + public BlockTagKey(TagKey tagKey) { + super(tagKey); + } + + public static BlockTagKey of(CompatIdentifier identifier) { + return new BlockTagKey(TagKey.of(CompatTagKeyType.BLOCK.getRegistryKey(), identifier.toMinecraft())); + } + + public List values() { + return BlockUtil.getInTag(this); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/EntityTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/EntityTagKey.java new file mode 100644 index 000000000..61d57fee9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/EntityTagKey.java @@ -0,0 +1,20 @@ +package net.pitan76.mcpitanlib.api.tag.v2.typed; + +import net.minecraft.entity.EntityType; +import net.minecraft.registry.tag.TagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKeyType; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.List; + +public class EntityTagKey extends CompatTagKey> { + @Deprecated + public EntityTagKey(TagKey> tagKey) { + super(tagKey); + } + + public static EntityTagKey of(CompatIdentifier identifier) { + return new EntityTagKey(TagKey.of(CompatTagKeyType.ENTITY_TYPE.getRegistryKey(), identifier.toMinecraft())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/FluidTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/FluidTagKey.java new file mode 100644 index 000000000..03cdeb507 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/FluidTagKey.java @@ -0,0 +1,18 @@ +package net.pitan76.mcpitanlib.api.tag.v2.typed; + +import net.minecraft.fluid.Fluid; +import net.minecraft.registry.tag.TagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKeyType; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class FluidTagKey extends CompatTagKey { + @Deprecated + public FluidTagKey(TagKey tagKey) { + super(tagKey); + } + + public static FluidTagKey of(CompatIdentifier identifier) { + return new FluidTagKey(TagKey.of(CompatTagKeyType.FLUID.getRegistryKey(), identifier.toMinecraft())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/ItemTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/ItemTagKey.java new file mode 100644 index 000000000..cce0a7cb2 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/ItemTagKey.java @@ -0,0 +1,31 @@ +package net.pitan76.mcpitanlib.api.tag.v2.typed; + +import net.minecraft.item.Item; +import net.minecraft.recipe.Ingredient; +import net.minecraft.registry.tag.TagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKeyType; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.IngredientUtil; +import net.pitan76.mcpitanlib.api.util.item.ItemUtil; + +import java.util.List; + +public class ItemTagKey extends CompatTagKey { + @Deprecated + public ItemTagKey(TagKey tagKey) { + super(tagKey); + } + + public static ItemTagKey of(CompatIdentifier identifier) { + return new ItemTagKey(net.minecraft.registry.tag.TagKey.of(CompatTagKeyType.ITEM.getRegistryKey(), identifier.toMinecraft())); + } + + public Ingredient asIngredient() { + return IngredientUtil.fromTagByIdentifier(getTagKey().id()); + } + + public List values() { + return ItemUtil.getInTag(this); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatDyeColor.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatDyeColor.java index b2ca1532d..82c31796e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatDyeColor.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatDyeColor.java @@ -31,7 +31,7 @@ public static CompatDyeColor of(DyeColor color) { return new CompatDyeColor(color); } - public DyeColor get() { + public DyeColor getColor() { return color; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatMapColor.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatMapColor.java index 1440230a5..08c7084cc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatMapColor.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/color/CompatMapColor.java @@ -76,7 +76,7 @@ public static CompatMapColor of(MapColor color) { return new CompatMapColor(color); } - public MapColor get() { + public MapColor getColor() { return color; } From e8f6e3cfb7cdbc65c388e89a7fd7d5df99cc25bd Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:26:55 +0900 Subject: [PATCH 391/617] changelog --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 8c8e61a65..350c2af87 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib mod_version=3.0.0 maven_group=net.pitan76 -changelog= \ No newline at end of file +changelog=Support for 1.21.3 \ No newline at end of file From 597286d819fa55deb86ae7ea84c0dfe63ec622b2 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:44:34 +0900 Subject: [PATCH 392/617] fix1192 --- .../mcpitanlib/api/tag/v2/CompatTagKey.java | 8 ++++---- .../mcpitanlib/api/tag/v2/CompatTagKeyType.java | 17 ++++++++--------- .../api/tag/v2/typed/BlockTagKey.java | 2 +- .../api/tag/v2/typed/EntityTagKey.java | 2 +- .../api/tag/v2/typed/FluidTagKey.java | 2 +- .../mcpitanlib/api/tag/v2/typed/ItemTagKey.java | 4 ++-- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKey.java index 63f4df308..fff8ffe43 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKey.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKey.java @@ -1,22 +1,22 @@ package net.pitan76.mcpitanlib.api.tag.v2; -import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.util.registry.RegistryEntry; import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; public class CompatTagKey extends TagKey { @Deprecated - public CompatTagKey(net.minecraft.registry.tag.TagKey tagKey) { + public CompatTagKey(net.minecraft.tag.TagKey tagKey) { super(tagKey); } @Deprecated - public static CompatTagKey of(net.minecraft.registry.tag.TagKey tagKey) { + public static CompatTagKey of(net.minecraft.tag.TagKey tagKey) { return new CompatTagKey<>(tagKey); } public static CompatTagKey of(CompatTagKeyType type, CompatIdentifier identifier) { - return of(net.minecraft.registry.tag.TagKey.of(type.getRegistryKey(), identifier.toMinecraft())); + return of(net.minecraft.tag.TagKey.of(type.getRegistryKey(), identifier.toMinecraft())); } public boolean isOf(T value) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java index 2a0dabc61..f96ecef9f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java @@ -5,19 +5,18 @@ import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; -import net.minecraft.registry.Registry; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryKey; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; public class CompatTagKeyType { - public static final CompatTagKeyType BLOCK = of(RegistryKeys.BLOCK); - public static final CompatTagKeyType ITEM = new CompatTagKeyType<>(RegistryKeys.ITEM); - public static final CompatTagKeyType FLUID = new CompatTagKeyType<>(RegistryKeys.FLUID); - public static final CompatTagKeyType> ENTITY_TYPE = new CompatTagKeyType<>(RegistryKeys.ENTITY_TYPE); - public static final CompatTagKeyType> BLOCK_ENTITY_TYPE = new CompatTagKeyType<>(RegistryKeys.BLOCK_ENTITY_TYPE); - public static final CompatTagKeyType> SCREEN_HANDLER = new CompatTagKeyType<>(RegistryKeys.SCREEN_HANDLER); + public static final CompatTagKeyType BLOCK = of(Registry.BLOCK_KEY); + public static final CompatTagKeyType ITEM = new CompatTagKeyType<>(Registry.ITEM_KEY); + public static final CompatTagKeyType FLUID = new CompatTagKeyType<>(Registry.FLUID_KEY); + public static final CompatTagKeyType> ENTITY_TYPE = new CompatTagKeyType<>(Registry.ENTITY_TYPE_KEY); + public static final CompatTagKeyType> BLOCK_ENTITY_TYPE = new CompatTagKeyType<>(Registry.BLOCK_ENTITY_TYPE_KEY); + public static final CompatTagKeyType> SCREEN_HANDLER = new CompatTagKeyType<>(Registry.MENU_KEY); public final CompatIdentifier id; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/BlockTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/BlockTagKey.java index 382e101b8..0d00d4ded 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/BlockTagKey.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/BlockTagKey.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.tag.v2.typed; import net.minecraft.block.Block; -import net.minecraft.registry.tag.TagKey; +import net.minecraft.tag.TagKey; import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKeyType; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/EntityTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/EntityTagKey.java index 61d57fee9..22a5f6892 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/EntityTagKey.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/EntityTagKey.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.tag.v2.typed; import net.minecraft.entity.EntityType; -import net.minecraft.registry.tag.TagKey; +import net.minecraft.tag.TagKey; import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKeyType; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/FluidTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/FluidTagKey.java index 03cdeb507..fa9f5cbac 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/FluidTagKey.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/FluidTagKey.java @@ -1,7 +1,7 @@ package net.pitan76.mcpitanlib.api.tag.v2.typed; import net.minecraft.fluid.Fluid; -import net.minecraft.registry.tag.TagKey; +import net.minecraft.tag.TagKey; import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKeyType; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/ItemTagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/ItemTagKey.java index cce0a7cb2..034443dd7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/ItemTagKey.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/typed/ItemTagKey.java @@ -2,7 +2,7 @@ import net.minecraft.item.Item; import net.minecraft.recipe.Ingredient; -import net.minecraft.registry.tag.TagKey; +import net.minecraft.tag.TagKey; import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKeyType; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; @@ -18,7 +18,7 @@ public ItemTagKey(TagKey tagKey) { } public static ItemTagKey of(CompatIdentifier identifier) { - return new ItemTagKey(net.minecraft.registry.tag.TagKey.of(CompatTagKeyType.ITEM.getRegistryKey(), identifier.toMinecraft())); + return new ItemTagKey(net.minecraft.tag.TagKey.of(CompatTagKeyType.ITEM.getRegistryKey(), identifier.toMinecraft())); } public Ingredient asIngredient() { From cfc29b5d66ed2040c993d2e6d49bd76612dc7fdf Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:47:55 +0900 Subject: [PATCH 393/617] use method_41185 --- .../net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java index f96ecef9f..9243174b6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/v2/CompatTagKeyType.java @@ -32,7 +32,7 @@ public static CompatTagKeyType of(CompatIdentifier id) { private RegistryKey> key; protected CompatTagKeyType(RegistryKey> key) { - this.id = CompatIdentifier.fromMinecraft(key.getRegistry()); + this.id = CompatIdentifier.fromMinecraft(key.method_41185()); this.key = key; } From 2dda4373bc93f2aeff22264d8283f99cd68ae14f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 9 Nov 2024 18:07:48 +0900 Subject: [PATCH 394/617] back TypedActionResult --- .../main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index de67b5f0e..907470dc1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -10,6 +10,7 @@ import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; import net.minecraft.util.UseAction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -29,11 +30,11 @@ @Mixin(Item.class) public class ItemMixin { @Inject(method = "use", at = @At("HEAD"), cancellable = true) - private void mcpitanlib$use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable cir) { + private void mcpitanlib$use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> cir) { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); - ActionResult returnValue = provider.onRightClick(new ItemUseEvent(world, user, hand), options).toActionResult(); + TypedActionResult returnValue = provider.onRightClick(new ItemUseEvent(world, user, hand), options).toTypedActionResult(); if (options.cancel && returnValue != null) cir.setReturnValue(returnValue); } From 0b7097893dfdaa8c7ef6ef3657a8f74856842e5b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 9 Nov 2024 22:31:17 +0900 Subject: [PATCH 395/617] add Midohra Easy Builder API --- .../api/event/item/ItemUseEvent.java | 16 +- .../api/item/v2/ItemSettingsBuilder.java | 9 ++ .../api/util/StackActionResult.java | 16 ++ .../midohra/block/BlockWrapper.java | 16 +- .../midohra/block/SupplierBlockWrapper.java | 22 +++ .../midohra/easybuilder/BlockBuilder.java | 132 +++++++++++++++++ .../midohra/easybuilder/BuiltBlock.java | 69 +++++++++ .../midohra/easybuilder/BuiltItem.java | 72 +++++++++ .../midohra/easybuilder/ItemBuilder.java | 138 ++++++++++++++++++ .../mcpitanlib/midohra/item/ItemWrapper.java | 22 +-- .../midohra/item/SupplierItemWrapper.java | 22 +++ .../midohra/util/math/BlockPos.java | 81 ++++++++++ .../midohra/util/math/Direction.java | 96 ++++++++++++ 13 files changed, 690 insertions(+), 21 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/block/SupplierBlockWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/item/SupplierItemWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java index e68921d9b..518e75148 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java @@ -62,12 +62,20 @@ public StackActionResult success() { return StackActionResult.create(CompatActionResult.SUCCESS); } - public CompatActionResult fail() { - return CompatActionResult.FAIL; + public StackActionResult fail() { + return StackActionResult.fail(); } - public CompatActionResult pass() { - return CompatActionResult.PASS; + public StackActionResult fail(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return StackActionResult.fail(stack.toMinecraft()); + } + + public StackActionResult pass() { + return StackActionResult.pass(); + } + + public StackActionResult pass(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return StackActionResult.pass(stack.toMinecraft()); } public StackActionResult consume(ItemStack stack) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java index da754ba07..6100b0839 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java @@ -7,6 +7,7 @@ import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.CompatRarity; import net.pitan76.mcpitanlib.midohra.item.ItemGroupWrapper; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; public class ItemSettingsBuilder { @@ -18,6 +19,7 @@ public class ItemSettingsBuilder { public RepairIngredientTag repairIngredientTag; public CompatFoodComponent foodComponent; public CompatRarity rarity; + public ItemWrapper recipeRemainder; public ItemGroupWrapper itemGroupWrapper; public CreativeTabBuilder itemGroupBuilder; @@ -55,6 +57,11 @@ public ItemSettingsBuilder maxDamageIfAbsent(int maxDamage) { return this; } + public ItemSettingsBuilder recipeRemainder(ItemWrapper recipeRemainder) { + this.recipeRemainder = recipeRemainder; + return this; + } + public ItemSettingsBuilder enchantability(int enchantability) { this.enchantability = enchantability; return this; @@ -103,6 +110,8 @@ public CompatibleItemSettings build(CompatIdentifier id) { if (rarity != null) settings.rarity(rarity); if (foodComponent != null) settings.food(foodComponent); + if (recipeRemainder != null) settings.recipeRemainder(recipeRemainder); + if (enchantability != -1) settings.enchantable(enchantability); if (repairIngredientTag != null) settings.repairable(repairIngredientTag); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/StackActionResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StackActionResult.java index b97944b9b..3711e987f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/StackActionResult.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/StackActionResult.java @@ -104,6 +104,22 @@ public TypedActionResult toTypedActionResult() { return new TypedActionResult<>(toActionResult(), getStack()); } + public static StackActionResult pass(ItemStack stack) { + return create(CompatActionResult.PASS, stack); + } + + public static StackActionResult pass() { + return create(CompatActionResult.PASS); + } + + public static StackActionResult fail(ItemStack stack) { + return create(CompatActionResult.FAIL, stack); + } + + public static StackActionResult fail() { + return create(CompatActionResult.FAIL); + } + public ItemStack getStack() { return stack; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java index 5a0a77fa3..06df6ce68 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java @@ -3,6 +3,7 @@ import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.block.BlockUtil; import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; +import org.jetbrains.annotations.Nullable; public class BlockWrapper { private final net.minecraft.block.Block block; @@ -46,42 +47,43 @@ public boolean isExist() { } public boolean isEmpty() { - return block == null; + return get() == null; } + @Nullable public net.minecraft.block.Block get() { return block; } public net.minecraft.block.Block gerOrDefault(net.minecraft.block.Block defaultItem) { - return isEmpty() ? defaultItem : block; + return isEmpty() ? defaultItem : get(); } public CompatIdentifier getId() { if (isEmpty()) return CompatIdentifier.empty(); - return BlockUtil.toId(block); + return BlockUtil.toId(get()); } public String getName() { if (isEmpty()) return ""; - return BlockUtil.getNameAsString(block); + return BlockUtil.getNameAsString(get()); } public String getTranslationKey() { if (isEmpty()) return ""; - return BlockUtil.getTranslationKey(block); + return BlockUtil.getTranslationKey(get()); } public ItemWrapper asItem() { if (isEmpty()) return ItemWrapper.of(); - return ItemWrapper.of(BlockUtil.toItem(block)); + return ItemWrapper.of(BlockUtil.toItem(get())); } public BlockState getDefaultState() { - return BlockState.of(block); + return BlockState.of(get()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/SupplierBlockWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/SupplierBlockWrapper.java new file mode 100644 index 000000000..776e5664b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/SupplierBlockWrapper.java @@ -0,0 +1,22 @@ +package net.pitan76.mcpitanlib.midohra.block; + +import net.minecraft.block.Block; + +import java.util.function.Supplier; + +public class SupplierBlockWrapper extends BlockWrapper { + private final Supplier supplier; + + protected SupplierBlockWrapper(Supplier supplier) { + this.supplier = supplier; + } + + public static SupplierBlockWrapper of(Supplier supplier) { + return new SupplierBlockWrapper(supplier); + } + + @Override + public Block get() { + return supplier.get(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java new file mode 100644 index 000000000..1386fa12a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -0,0 +1,132 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder; + +import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.block.v2.BlockSettingsBuilder; +import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; +import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; +import net.pitan76.mcpitanlib.api.event.block.StateReplacedEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.color.CompatDyeColor; +import net.pitan76.mcpitanlib.api.util.color.CompatMapColor; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; + +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.function.ToIntFunction; + +public class BlockBuilder { + + public BlockSettingsBuilder settingsBuilder; + public Function onRightClick; + public Consumer onStateReplaced; + public Consumer onAppendTooltip; + public Consumer onAppendProperties; + + public BlockBuilder(BlockSettingsBuilder settingsBuilder) { + this.settingsBuilder = settingsBuilder; + } + + public BlockBuilder(CompatIdentifier id) { + this(new BlockSettingsBuilder(id)); + } + + public static BlockBuilder of(CompatIdentifier id) { + return new BlockBuilder(id); + } + + public static BlockBuilder of(BlockSettingsBuilder settingsBuilder) { + return new BlockBuilder(settingsBuilder); + } + + public SupplierBlockWrapper build(CompatRegistryV2 registry) { + if (settingsBuilder.id == null) + throw new IllegalStateException("Block id is not set. hint: use build(CompatRegistryV2, CompatIdentifier)"); + + Supplier result = registry.registerExtendBlock(settingsBuilder.id, () -> new BuiltBlock(this)); + + return SupplierBlockWrapper.of(result::get); + } + + public SupplierBlockWrapper build(CompatRegistryV2 registry, CompatIdentifier id) { + Supplier result = registry.registerExtendBlock(settingsBuilder.id, () -> new BuiltBlock(this, id)); + + return SupplierBlockWrapper.of(result::get); + } + + public BlockBuilder material(CompatibleMaterial material) { + settingsBuilder.material(material); + return this; + } + + public BlockBuilder sounds(CompatBlockSoundGroup sounds) { + settingsBuilder.sounds(sounds); + return this; + } + + public BlockBuilder strength(float hardness, float resistance) { + settingsBuilder.strength(hardness, resistance); + return this; + } + + public BlockBuilder strength(float hardness) { + settingsBuilder.hardness(hardness); + return this; + } + + public BlockBuilder resistance(float resistance) { + settingsBuilder.resistance(resistance); + return this; + } + + public BlockBuilder mapColor(CompatMapColor color) { + settingsBuilder.mapColor(color); + return this; + } + + public BlockBuilder mapColor(CompatDyeColor color) { + settingsBuilder.dyeColor(color); + return this; + } + + public BlockBuilder luminance(ToIntFunction luminance) { + settingsBuilder.luminance(luminance); + return this; + } + + public BlockBuilder requiresTool() { + settingsBuilder.requiresTool(); + return this; + } + + public BlockBuilder dropsNothing() { + settingsBuilder.dropsNothing(); + return this; + } + + public BlockBuilder onRightClick(Function onRightClick) { + this.onRightClick = onRightClick; + return this; + } + + public BlockBuilder onStateReplaced(Consumer onStateReplaced) { + this.onStateReplaced = onStateReplaced; + return this; + } + + public BlockBuilder onAppendTooltip(Consumer onAppendTooltip) { + this.onAppendTooltip = onAppendTooltip; + return this; + } + + public BlockBuilder onAppendProperties(Consumer onAppendProperties) { + this.onAppendProperties = onAppendProperties; + return this; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java new file mode 100644 index 000000000..837d1c5ac --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java @@ -0,0 +1,69 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder; + +import net.pitan76.mcpitanlib.api.block.v2.CompatBlock; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; +import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; +import net.pitan76.mcpitanlib.api.event.block.StateReplacedEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.function.Consumer; +import java.util.function.Function; + +public class BuiltBlock extends CompatBlock { + + protected Function onRightClick; + protected Consumer onStateReplaced; + protected Consumer onAppendTooltip; + protected Consumer onAppendProperties; + + public BuiltBlock(CompatibleBlockSettings settings) { + super(settings); + } + + public BuiltBlock(BlockBuilder builder) { + this(builder.settingsBuilder.build()); + + this.onRightClick = builder.onRightClick; + this.onStateReplaced = builder.onStateReplaced; + this.onAppendTooltip = builder.onAppendTooltip; + this.onAppendProperties = builder.onAppendProperties; + } + + public BuiltBlock(BlockBuilder builder, CompatIdentifier id) { + this(builder.settingsBuilder.build(id)); + + this.onRightClick = builder.onRightClick; + this.onStateReplaced = builder.onStateReplaced; + this.onAppendTooltip = builder.onAppendTooltip; + this.onAppendProperties = builder.onAppendProperties; + } + + @Override + public CompatActionResult onRightClick(BlockUseEvent e) { + if (onRightClick == null) + return e.pass(); + + return onRightClick.apply(e); + } + + @Override + public void onStateReplaced(StateReplacedEvent e) { + if (onStateReplaced != null) + onStateReplaced.accept(e); + } + + @Override + public void appendTooltip(ItemAppendTooltipEvent e) { + if (onAppendTooltip != null) + onAppendTooltip.accept(e); + } + + @Override + public void appendProperties(AppendPropertiesArgs args) { + if (onAppendProperties != null) + onAppendProperties.accept(args); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java new file mode 100644 index 000000000..b52a3d32e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java @@ -0,0 +1,72 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder; + +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnEntityEvent; +import net.pitan76.mcpitanlib.api.item.v2.CompatItem; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.StackActionResult; + +import java.util.function.Consumer; +import java.util.function.Function; + +public class BuiltItem extends CompatItem { + + protected Function onRightClick; + protected Function onRightClickOnBlock; + protected Function onRightClickOnEntity; + protected Consumer onAppendTooltip; + + protected BuiltItem(CompatibleItemSettings settings) { + super(settings); + } + + public BuiltItem(ItemBuilder builder) { + this(builder.settingsBuilder.build()); + + this.onRightClick = builder.onRightClick; + this.onRightClickOnBlock = builder.onRightClickOnBlock; + this.onAppendTooltip = builder.onAppendTooltip; + } + + public BuiltItem(ItemBuilder builder, CompatIdentifier id) { + this(builder.settingsBuilder.build(id)); + + this.onRightClick = builder.onRightClick; + this.onRightClickOnBlock = builder.onRightClickOnBlock; + this.onAppendTooltip = builder.onAppendTooltip; + } + + @Override + public StackActionResult onRightClick(ItemUseEvent e) { + if (onRightClick == null) + return e.pass(); + + return onRightClick.apply(e); + } + + @Override + public CompatActionResult onRightClickOnBlock(ItemUseOnBlockEvent e) { + if (onRightClickOnBlock == null) + return e.pass(); + + return onRightClickOnBlock.apply(e); + } + + @Override + public CompatActionResult onRightClickOnEntity(ItemUseOnEntityEvent e) { + if (onRightClickOnEntity == null) + return e.pass(); + + return onRightClickOnEntity.apply(e); + } + + @Override + public void appendTooltip(ItemAppendTooltipEvent e) { + if (onAppendTooltip != null) + onAppendTooltip.accept(e); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java new file mode 100644 index 000000000..9598cf0fc --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java @@ -0,0 +1,138 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder; + +import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnEntityEvent; +import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; +import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; +import net.pitan76.mcpitanlib.api.item.ExtendItem; +import net.pitan76.mcpitanlib.api.item.v2.ItemSettingsBuilder; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.CompatRarity; +import net.pitan76.mcpitanlib.api.util.StackActionResult; +import net.pitan76.mcpitanlib.midohra.item.ItemGroupWrapper; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; +import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; + +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; + +public class ItemBuilder { + + public ItemSettingsBuilder settingsBuilder; + public Function onRightClick; + public Function onRightClickOnBlock; + public Function onRightClickOnEntity; + public Consumer onAppendTooltip; + + public ItemBuilder(ItemSettingsBuilder settingsBuilder) { + this.settingsBuilder = settingsBuilder; + } + + public ItemBuilder(CompatIdentifier id) { + this(new ItemSettingsBuilder(id)); + } + + public static ItemBuilder of(CompatIdentifier id) { + return new ItemBuilder(id); + } + + public static ItemBuilder of(ItemSettingsBuilder settingsBuilder) { + return new ItemBuilder(settingsBuilder); + } + + public SupplierItemWrapper build(CompatRegistryV2 registry) { + if (settingsBuilder.id == null) + throw new IllegalStateException("Item id is not set. hint: use build(CompatRegistryV2, CompatIdentifier)"); + + Supplier result = registry.registerExtendItem(settingsBuilder.id, () -> new BuiltItem(this)); + + return SupplierItemWrapper.of(result::get); + } + + public SupplierItemWrapper build(CompatRegistryV2 registry, CompatIdentifier id) { + Supplier result = registry.registerExtendItem(settingsBuilder.id, () -> new BuiltItem(this, id)); + + return SupplierItemWrapper.of(result::get); + } + + public ItemBuilder maxCount(int maxCount) { + settingsBuilder.maxCount(maxCount); + return this; + } + + public ItemBuilder maxDamage(int maxDamage) { + settingsBuilder.maxDamage(maxDamage); + return this; + } + + public ItemBuilder maxDamageIfAbsent(int maxDamage) { + settingsBuilder.maxDamageIfAbsent(maxDamage); + return this; + } + + public ItemBuilder food(CompatFoodComponent foodComponent) { + settingsBuilder.foodComponent(foodComponent); + return this; + } + + public ItemBuilder recipeRemainder(ItemWrapper recipeRemainder) { + settingsBuilder.recipeRemainder(recipeRemainder); + return this; + } + + public ItemBuilder enchantability(int enchantability) { + settingsBuilder.enchantability(enchantability); + return this; + } + + public ItemBuilder repairable(CompatIdentifier repairIngredientTag) { + settingsBuilder.repairable(repairIngredientTag); + return this; + } + + public ItemBuilder repairable(RepairIngredientTag repairIngredientTag) { + settingsBuilder.repairable(repairIngredientTag); + return this; + } + + public ItemBuilder rarity(CompatRarity rarity) { + settingsBuilder.rarity(rarity); + return this; + } + + public ItemBuilder group(ItemGroupWrapper itemGroup) { + settingsBuilder.addGroup(itemGroup); + return this; + } + + public ItemBuilder group(CreativeTabBuilder itemGroup) { + settingsBuilder.addGroup(itemGroup); + return this; + } + + public ItemBuilder onRightClick(Function onRightClick) { + this.onRightClick = onRightClick; + return this; + } + + public ItemBuilder onRightClickOnBlock(Function onRightClickOnBlock) { + this.onRightClickOnBlock = onRightClickOnBlock; + return this; + } + + public ItemBuilder onRightClickOnEntity(Function onRightClickOnEntity) { + this.onRightClickOnEntity = onRightClickOnEntity; + return this; + } + + public ItemBuilder onAppendTooltip(Consumer onAppendTooltip) { + this.onAppendTooltip = onAppendTooltip; + return this; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java index be03f87d9..69fe742c2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java @@ -4,6 +4,7 @@ import net.pitan76.mcpitanlib.api.util.ItemStackUtil; import net.pitan76.mcpitanlib.api.util.item.ItemUtil; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import org.jetbrains.annotations.Nullable; public class ItemWrapper { private final net.minecraft.item.Item item; @@ -47,41 +48,42 @@ public boolean isExist() { } public boolean isEmpty() { - return item == null; + return get() == null; } public boolean isAir() { - return isEmpty() || item == net.minecraft.item.Items.AIR; + return isEmpty() || get() == net.minecraft.item.Items.AIR; } + @Nullable public net.minecraft.item.Item get() { return item; } public net.minecraft.item.Item gerOrDefault(net.minecraft.item.Item defaultItem) { - return isEmpty() ? defaultItem : item; + return isEmpty() ? defaultItem : get(); } public CompatIdentifier getId() { if (isEmpty()) return CompatIdentifier.empty(); - return ItemUtil.toId(item); + return ItemUtil.toId(get()); } public String getName() { if (isEmpty()) return ""; - return ItemUtil.getNameAsString(item); + return ItemUtil.getNameAsString(get()); } public String getTranslationKey() { if (isEmpty()) return ""; - return ItemUtil.getTranslationKey(item); + return ItemUtil.getTranslationKey(get()); } public ItemStack createStack(int count) { if (isEmpty()) return ItemStack.EMPTY; - return ItemStack.of(ItemStackUtil.create(item, count)); + return ItemStack.of(ItemStackUtil.create(get(), count)); } public ItemStack createStack() { @@ -89,17 +91,17 @@ public ItemStack createStack() { } public boolean isInTag(CompatIdentifier id) { - return ItemUtil.isInTag(item, id); + return ItemUtil.isInTag(get(), id); } public boolean isBlock() { - return !isEmpty() && item instanceof net.minecraft.item.BlockItem; + return !isEmpty() && get() instanceof net.minecraft.item.BlockItem; } public BlockWrapper asBlock() { if (!isBlock()) return BlockWrapper.of(); - return BlockWrapper.of(((net.minecraft.item.BlockItem) item).getBlock()); + return BlockWrapper.of(((net.minecraft.item.BlockItem) get()).getBlock()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/SupplierItemWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/SupplierItemWrapper.java new file mode 100644 index 000000000..c39629242 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/SupplierItemWrapper.java @@ -0,0 +1,22 @@ +package net.pitan76.mcpitanlib.midohra.item; + +import net.minecraft.item.Item; + +import java.util.function.Supplier; + +public class SupplierItemWrapper extends ItemWrapper { + private final Supplier supplier; + + protected SupplierItemWrapper(Supplier supplier) { + this.supplier = supplier; + } + + public static SupplierItemWrapper of(Supplier supplier) { + return new SupplierItemWrapper(supplier); + } + + @Override + public Item get() { + return supplier.get(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java new file mode 100644 index 000000000..5211c0b87 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java @@ -0,0 +1,81 @@ +package net.pitan76.mcpitanlib.midohra.util.math; + +import net.minecraft.util.math.Vec3i; + +public class BlockPos { + private final net.minecraft.util.math.BlockPos blockPos; + + protected BlockPos(net.minecraft.util.math.BlockPos blockPos) { + this.blockPos = blockPos; + } + + public static BlockPos of(net.minecraft.util.math.BlockPos blockPos) { + return new BlockPos(blockPos); + } + + public static BlockPos of(int x, int y, int z) { + return new BlockPos(new net.minecraft.util.math.BlockPos(x, y, z)); + } + + public int getX() { + return blockPos.getX(); + } + + public int getY() { + return blockPos.getY(); + } + + public int getZ() { + return blockPos.getZ(); + } + + @Deprecated + public net.minecraft.util.math.BlockPos toMinecraft() { + return blockPos; + } + + public BlockPos add(int x, int y, int z) { + return new BlockPos(blockPos.add(x, y, z)); + } + + public BlockPos add(BlockPos pos) { + return new BlockPos(blockPos.add(pos.blockPos)); + } + + public BlockPos subtract(int x, int y, int z) { + return new BlockPos(blockPos.subtract(new Vec3i(x, y, z))); + } + + public BlockPos subtract(BlockPos pos) { + return new BlockPos(blockPos.subtract(pos.blockPos)); + } + + public BlockPos up() { + return new BlockPos(blockPos.up()); + } + + public BlockPos down() { + return new BlockPos(blockPos.down()); + } + + public BlockPos north() { + return new BlockPos(blockPos.north()); + } + + public BlockPos south() { + return new BlockPos(blockPos.south()); + } + + public BlockPos east() { + return new BlockPos(blockPos.east()); + } + + public BlockPos west() { + return new BlockPos(blockPos.west()); + } + + public BlockPos offset(Direction direction, int amount) { + return new BlockPos(blockPos.offset(direction.toMinecraft(), amount)); + } + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java new file mode 100644 index 000000000..30965cd5a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java @@ -0,0 +1,96 @@ +package net.pitan76.mcpitanlib.midohra.util.math; + +public class Direction { + + public static final Direction UP = of(net.minecraft.util.math.Direction.UP); + public static final Direction DOWN = of(net.minecraft.util.math.Direction.DOWN); + public static final Direction NORTH = of(net.minecraft.util.math.Direction.NORTH); + public static final Direction SOUTH = of(net.minecraft.util.math.Direction.SOUTH); + public static final Direction EAST = of(net.minecraft.util.math.Direction.EAST); + public static final Direction WEST = of(net.minecraft.util.math.Direction.WEST); + + private final net.minecraft.util.math.Direction direction; + + protected Direction(net.minecraft.util.math.Direction direction) { + this.direction = direction; + } + + public static Direction of(net.minecraft.util.math.Direction direction) { + switch (direction) { + case UP: + return UP; + case DOWN: + return DOWN; + case NORTH: + return NORTH; + case SOUTH: + return SOUTH; + case EAST: + return EAST; + case WEST: + return WEST; + default: + return new Direction(direction); + } + } + + public Direction getOpposite() { + switch (direction) { + case UP: + return DOWN; + case DOWN: + return UP; + case NORTH: + return SOUTH; + case SOUTH: + return NORTH; + case EAST: + return WEST; + case WEST: + return EAST; + default: + return null; + } + } + + public net.minecraft.util.math.Direction toMinecraft() { + return direction; + } + + public boolean isHorizontal() { + return direction.getAxis().isHorizontal(); + } + + public boolean isVertical() { + return direction.getAxis().isVertical(); + } + + public boolean isPositive() { + return direction.getDirection() == net.minecraft.util.math.Direction.AxisDirection.POSITIVE; + } + + public boolean isNegative() { + return direction.getDirection() == net.minecraft.util.math.Direction.AxisDirection.NEGATIVE; + } + + public int getOffsetX() { + return direction.getOffsetX(); + } + + public int getOffsetY() { + return direction.getOffsetY(); + } + + public int getOffsetZ() { + return direction.getOffsetZ(); + } + + public Direction rotateYClockwise() { + return of(direction.rotateYClockwise()); + } + + public Direction rotateYCounterclockwise() { + return of(direction.rotateYCounterclockwise()); + } + +} From 2573463b7e3d8297cbbc3c7480b1ab3fcc7fe92c Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 9 Nov 2024 22:37:03 +0900 Subject: [PATCH 396/617] fix StackActionResult --- .../pitan76/mcpitanlib/api/event/item/ItemUseEvent.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java index 518e75148..1fb17b585 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java @@ -59,11 +59,11 @@ public StackActionResult success(net.pitan76.mcpitanlib.midohra.item.ItemStack s } public StackActionResult success() { - return StackActionResult.create(CompatActionResult.SUCCESS); + return StackActionResult.create(CompatActionResult.SUCCESS, stack); } public StackActionResult fail() { - return StackActionResult.fail(); + return new StackActionResult(CompatActionResult.FAIL, stack); } public StackActionResult fail(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { @@ -71,7 +71,7 @@ public StackActionResult fail(net.pitan76.mcpitanlib.midohra.item.ItemStack stac } public StackActionResult pass() { - return StackActionResult.pass(); + return new StackActionResult(CompatActionResult.PASS, stack); } public StackActionResult pass(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { @@ -90,7 +90,7 @@ public CompatActionResult consume(net.pitan76.mcpitanlib.midohra.item.ItemStack } public StackActionResult consume() { - return StackActionResult.create(CompatActionResult.CONSUME); + return StackActionResult.create(CompatActionResult.CONSUME, stack); } public boolean isSneaking() { From a8c0bceac36aca8adb2c18d885dd6ab89936157d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 10 Nov 2024 17:22:22 +0900 Subject: [PATCH 397/617] fix APIs --- .../api/item/args/StoppedUsingArgs.java | 80 +++++++++++++++++++ .../mcpitanlib/api/item/v2/CompatItem.java | 14 ++++ .../core/serialization/CompatMapCodec.java | 9 ++- .../codecs/CompatBlockMapCodecUtil.java | 57 +++++++++++++ .../midohra/easybuilder/BlockBuilder.java | 24 +++++- info.properties | 2 +- 6 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/args/StoppedUsingArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/core/serialization/codecs/CompatBlockMapCodecUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/StoppedUsingArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/StoppedUsingArgs.java new file mode 100644 index 000000000..e7c9e8446 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/args/StoppedUsingArgs.java @@ -0,0 +1,80 @@ +package net.pitan76.mcpitanlib.api.item.args; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; + +import java.util.Optional; + +public class StoppedUsingArgs { + + public ItemStack stack; + public World world; + public LivingEntity user; + public int remainingUseTicks; + + public StoppedUsingArgs(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { + this.stack = stack; + this.world = world; + this.user = user; + this.remainingUseTicks = remainingUseTicks; + } + + public StoppedUsingArgs(ItemStack stack, World world, LivingEntity user) { + this(stack, world, user, 0); + } + + public StoppedUsingArgs(ItemStack stack, World world, Player player, int remainingUseTicks) { + this(stack, world, player.getEntity(), remainingUseTicks); + } + + public StoppedUsingArgs(ItemStack stack, World world, Player player) { + this(stack, world, player, 0); + } + + public ItemStack getStack() { + return stack; + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStack() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(stack); + } + + public World getWorld() { + return world; + } + + public LivingEntity getUser() { + return user; + } + + public int getRemainingUseTicks() { + return remainingUseTicks; + } + + public boolean hasRemainingUseTicks() { + return remainingUseTicks > 0; + } + + public boolean hasNoRemainingUseTicks() { + return !hasRemainingUseTicks(); + } + + public boolean isClient() { + return world.isClient(); + } + + public boolean isServer() { + return !isClient(); + } + + public boolean isPlayer() { + return user instanceof PlayerEntity; + } + + public Optional getPlayer() { + return isPlayer() ? Optional.of(new Player((PlayerEntity) user)) : Optional.empty(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java index 016f3bd1c..15931b829 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java @@ -1,13 +1,16 @@ package net.pitan76.mcpitanlib.api.item.v2; +import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Rarity; import net.minecraft.util.UseAction; +import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.CanRepairArgs; import net.pitan76.mcpitanlib.api.event.item.EnchantabilityArgs; import net.pitan76.mcpitanlib.api.event.item.EnchantableArgs; import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.pitan76.mcpitanlib.api.item.args.RarityArgs; +import net.pitan76.mcpitanlib.api.item.args.StoppedUsingArgs; import net.pitan76.mcpitanlib.api.item.args.UseActionArgs; import net.pitan76.mcpitanlib.api.item.consume.CompatUseAction; import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; @@ -80,4 +83,15 @@ protected String getOrCreateTranslationKey() { return super.getOrCreateTranslationKey(); } + + @Deprecated + @Override + public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { + onStoppedUsing(new StoppedUsingArgs(stack, world, user, remainingUseTicks)); + } + + public boolean onStoppedUsing(StoppedUsingArgs args) { + super.onStoppedUsing(args.stack, args.world, args.user, args.remainingUseTicks); + return false; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java index c62ba530d..0ff083dc6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/CompatMapCodec.java @@ -5,8 +5,10 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.pitan76.mcpitanlib.api.block.CompatStairsBlock; -import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlock; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.core.serialization.codecs.CompatBlockMapCodecUtil; import java.util.function.BiFunction; import java.util.function.Function; @@ -42,6 +44,7 @@ public static CompatMapCodec createCodec(Function CompatMapCodec createCodecOfExtendBlock(Function blockFromSettings) { return of(); } @@ -49,4 +52,8 @@ public static CompatMapCodec createCodecOfExtendBlock public static CompatMapCodec createCodecOfCompatStairsBlock(BiFunction createFunction) { return of(); } + + public static CompatMapCodec createCodecOfCompatBlock(Function blockFromSettings) { + return CompatBlockMapCodecUtil.createCodec(blockFromSettings); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/codecs/CompatBlockMapCodecUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/codecs/CompatBlockMapCodecUtil.java new file mode 100644 index 000000000..12d5880b6 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/serialization/codecs/CompatBlockMapCodecUtil.java @@ -0,0 +1,57 @@ +package net.pitan76.mcpitanlib.core.serialization.codecs; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.pitan76.mcpitanlib.api.block.CompatChestBlock; +import net.pitan76.mcpitanlib.api.block.CompatPillarBlock; +import net.pitan76.mcpitanlib.api.block.CompatSlabBlock; +import net.pitan76.mcpitanlib.api.block.CompatStairsBlock; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlock; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; + +import java.util.function.BiFunction; +import java.util.function.Function; + +public class CompatBlockMapCodecUtil { + + @Deprecated + protected static CompatMapCodec of(MapCodec codec) { + return new CompatMapCodec<>(codec); + } + + public static RecordCodecBuilder createSettingsCodec() { + return CompatibleBlockSettings.CODEC.fieldOf("properties").forGetter(CompatBlock::getCompatSettings); + } + + public static CompatMapCodec createCodec(Function blockFromSettings) { + return of(RecordCodecBuilder.mapCodec((instance) -> instance.group(createSettingsCodec()).apply(instance, blockFromSettings))); + } + + public static CompatMapCodec createCodecOfStairsBlock(BiFunction createFunction) { + return of(RecordCodecBuilder.mapCodec((instance) -> instance.group( + BlockState.CODEC.fieldOf("base_state").forGetter(CompatStairsBlock::getBaseBlockState), + CompatibleBlockSettings.CODEC.fieldOf("properties").forGetter(CompatStairsBlock::getCompatSettings) + ).apply(instance, createFunction))); + } + + public static CompatMapCodec createCodecOfSlabBlock(Function createFunction) { + return of(RecordCodecBuilder.mapCodec((instance) -> instance.group( + CompatibleBlockSettings.CODEC.fieldOf("properties").forGetter(CompatSlabBlock::getCompatSettings) + ).apply(instance, createFunction))); + } + + public static CompatMapCodec createCodecOfPillarBlock(Function createFunction) { + return of(RecordCodecBuilder.mapCodec((instance) -> instance.group( + CompatibleBlockSettings.CODEC.fieldOf("properties").forGetter(CompatPillarBlock::getCompatSettings) + ).apply(instance, createFunction))); + } + + public static CompatMapCodec createCodecOfChestBlock(Function createFunction) { + return of(RecordCodecBuilder.mapCodec((instance) -> instance.group( + CompatibleBlockSettings.CODEC.fieldOf("properties").forGetter(CompatChestBlock::getCompatSettings) + ).apply(instance, createFunction))); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java index 1386fa12a..cd1b5e9fe 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.midohra.easybuilder; +import net.minecraft.item.Item; import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.block.v2.BlockSettingsBuilder; @@ -7,14 +8,19 @@ import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; import net.pitan76.mcpitanlib.api.event.block.StateReplacedEvent; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; +import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.color.CompatDyeColor; import net.pitan76.mcpitanlib.api.util.color.CompatMapColor; +import net.pitan76.mcpitanlib.api.util.item.ItemUtil; +import net.pitan76.mcpitanlib.core.datafixer.Pair; import net.pitan76.mcpitanlib.midohra.block.BlockState; import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; +import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; import java.util.function.Consumer; import java.util.function.Function; @@ -55,11 +61,27 @@ public SupplierBlockWrapper build(CompatRegistryV2 registry) { } public SupplierBlockWrapper build(CompatRegistryV2 registry, CompatIdentifier id) { - Supplier result = registry.registerExtendBlock(settingsBuilder.id, () -> new BuiltBlock(this, id)); + Supplier result = registry.registerExtendBlock(id, () -> new BuiltBlock(this, id)); return SupplierBlockWrapper.of(result::get); } + public Pair buildWithItem(CompatRegistryV2 registry, CompatibleItemSettings settings) { + SupplierBlockWrapper block = build(registry); + + RegistryResult result = registry.registerItem(settingsBuilder.id, () -> ItemUtil.create(block.get(), settings)); + + return Pair.of(block, SupplierItemWrapper.of(result::get)); + } + + public Pair buildWithItem(CompatRegistryV2 registry, CompatIdentifier id, CompatibleItemSettings settings) { + SupplierBlockWrapper block = build(registry, id); + + RegistryResult result = registry.registerItem(id, () -> ItemUtil.create(block.get(), settings.setId(id))); + + return Pair.of(block, SupplierItemWrapper.of(result::get)); + } + public BlockBuilder material(CompatibleMaterial material) { settingsBuilder.material(material); return this; diff --git a/info.properties b/info.properties index 350c2af87..62a89ebf1 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.0 +mod_version=3.0.1 maven_group=net.pitan76 changelog=Support for 1.21.3 \ No newline at end of file From 0fb615e2d7e24b1a417f8274faf2b4793e4b9341 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:03:17 +0900 Subject: [PATCH 398/617] Fix recipe api --- .../api/recipe/v2/CompatRecipeNonEntry.java | 21 +++++++++++++++++++ .../mcpitanlib/api/util/RecipeUtil.java | 15 ++++++++++--- info.properties | 2 +- 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java new file mode 100644 index 000000000..ea36e6abb --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.recipe.v2; + +import net.minecraft.inventory.Inventory; +import net.minecraft.recipe.Recipe; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.RecipeUtil; + +public class CompatRecipeNonEntry extends CompatRecipeEntry { + public CompatRecipeNonEntry(Recipe recipe) { + super(CompatIdentifier.EMPTY, "", RecipeUtil.CompatibilityCraftingRecipeCategory.MISC, recipe); + } + + @Override + public Recipe getRecipe() { + return super.getRecipe(); + } + + public Recipe getRawRecipe() { + return super.getRecipe(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java index c5dea577c..a567ae977 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/RecipeUtil.java @@ -11,6 +11,7 @@ import net.pitan76.mcpitanlib.api.recipe.MatchGetter; import net.pitan76.mcpitanlib.api.recipe.input.CompatRecipeInput; import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeEntry; +import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeNonEntry; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; @@ -41,12 +42,11 @@ public static ItemStack craft(Recipe recipe, Inventory inventory, World world Recipe inputRecipe = (Recipe) recipe; return inputRecipe.craft((CraftingInventory) inventory); } - return ItemStack.EMPTY; } public static ItemStack getOutput(Recipe recipe, World world) { - return recipe.getOutput(); + return getOutput(recipe, RegistryLookupUtil.getRegistryLookup(world)); } public static List> getAllRecipes(World world) { @@ -54,6 +54,15 @@ public static List> getAllRecipes(World world) { return new ArrayList<>(recipes); } + public static List> getAllCompatRecipeEntry(World world) { + List> recipes = getAllRecipes(world); + List> outRecipes = new ArrayList<>(); + for (Recipe recipe : recipes) { + outRecipes.add(new CompatRecipeNonEntry<>(recipe)); + } + return outRecipes; + } + public static RecipeType getType(Recipe recipe) { return recipe.getType(); } @@ -128,7 +137,7 @@ public static ItemStack getOutput(Recipe recipe, CompatRegistryLookup registr } public static ItemStack getOutput(CompatRecipeEntry recipeEntry, CompatRegistryLookup registryLookup) { - return recipeEntry.getRecipe().getOutput(); + return getOutput(recipeEntry.getRecipe(), registryLookup); } public static CompatRecipeType getType(CompatRecipeEntry recipeEntry) { diff --git a/info.properties b/info.properties index 62a89ebf1..d5311a091 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.1 +mod_version=3.0.2 maven_group=net.pitan76 changelog=Support for 1.21.3 \ No newline at end of file From 1b5ba17e148fefea4d15d0de212e2e533bfb001d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:10:34 +0900 Subject: [PATCH 399/617] add create function --- .../mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java index ea36e6abb..b51c45b08 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java @@ -10,6 +10,10 @@ public CompatRecipeNonEntry(Recipe recipe) { super(CompatIdentifier.EMPTY, "", RecipeUtil.CompatibilityCraftingRecipeCategory.MISC, recipe); } + public static CompatRecipeNonEntry create(Recipe recipe) { + return new CompatRecipeNonEntry<>(recipe); + } + @Override public Recipe getRecipe() { return super.getRecipe(); From ebd878ef2fe8c0a981c36c13075683030cd9d3f2 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 12 Nov 2024 15:03:23 +0900 Subject: [PATCH 400/617] add APIs v3.0.3 --- .../api/block/CompatBlockRenderType.java | 25 +++++++ .../api/block/args/RenderTypeArgs.java | 19 +++++ .../mcpitanlib/api/block/args/RotateArgs.java | 36 ++++++++++ .../api/block/args/SideInvisibleArgs.java | 46 ++++++++++++ .../api/block/v2/BlockSettingsBuilder.java | 11 ++- .../mcpitanlib/api/block/v2/CompatBlock.java | 38 ++++++++++ .../api/event/block/AppendPropertiesArgs.java | 7 ++ .../api/event/tile/TileTickEvent.java | 8 +++ .../item/v3/VanillaCompatToolMaterial.java | 72 +++++++++++++++++++ .../api/state/property/BooleanProperty.java | 27 +++++++ .../api/state/property/CompatProperties.java | 20 ++++++ .../api/state/property/EnumProperty.java | 40 +++++++++++ .../api/state/property/IntProperty.java | 35 +++++++++ .../mcpitanlib/api/util/BlockStateUtil.java | 15 ++++ .../mcpitanlib/midohra/block/BlockState.java | 34 +++++++++ info.properties | 2 +- 16 files changed, 431 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlockRenderType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RenderTypeArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RotateArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/SideInvisibleArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/state/property/BooleanProperty.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/state/property/EnumProperty.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IntProperty.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlockRenderType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlockRenderType.java new file mode 100644 index 000000000..5c403aca2 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlockRenderType.java @@ -0,0 +1,25 @@ +package net.pitan76.mcpitanlib.api.block; + +import net.minecraft.block.BlockRenderType; + +public class CompatBlockRenderType { + + public static final CompatBlockRenderType MODEL = of(BlockRenderType.MODEL); + public static final CompatBlockRenderType ENTITYBLOCK_ANIMATED = of(BlockRenderType.ENTITYBLOCK_ANIMATED); + public static final CompatBlockRenderType INVISIBLE = of(BlockRenderType.INVISIBLE); + + @Deprecated + public final BlockRenderType renderType; + + public CompatBlockRenderType(BlockRenderType renderType) { + this.renderType = renderType; + } + + public static CompatBlockRenderType of(BlockRenderType renderType) { + return new CompatBlockRenderType(renderType); + } + + public BlockRenderType toMinecraft() { + return renderType; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RenderTypeArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RenderTypeArgs.java new file mode 100644 index 000000000..7f57e86d5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RenderTypeArgs.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.block.args; + +import net.minecraft.block.BlockState; + +public class RenderTypeArgs { + public BlockState state; + + public RenderTypeArgs(BlockState state) { + this.state = state; + } + + public BlockState getState() { + return state; + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getState()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RotateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RotateArgs.java new file mode 100644 index 000000000..f479ed90d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RotateArgs.java @@ -0,0 +1,36 @@ +package net.pitan76.mcpitanlib.api.block.args; + +import net.minecraft.block.BlockState; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.Direction; + +public class RotateArgs { + + public BlockState state; + public BlockRotation rotation; + + public RotateArgs(BlockState state, BlockRotation rotation) { + this.state = state; + this.rotation = rotation; + } + + public BlockState getState() { + return state; + } + + public BlockRotation getRotation() { + return rotation; + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } + + public Direction rotate(Direction direction) { + return rotation.rotate(direction); + } + + public net.pitan76.mcpitanlib.midohra.util.math.Direction rotate(net.pitan76.mcpitanlib.midohra.util.math.Direction direction) { + return net.pitan76.mcpitanlib.midohra.util.math.Direction.of(rotation.rotate(direction.toMinecraft())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/SideInvisibleArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/SideInvisibleArgs.java new file mode 100644 index 000000000..503136183 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/SideInvisibleArgs.java @@ -0,0 +1,46 @@ +package net.pitan76.mcpitanlib.api.block.args; + +import net.minecraft.block.BlockState; +import net.minecraft.util.math.Direction; + +public class SideInvisibleArgs { + public BlockState state; + public BlockState stateFrom; + public Direction direction; + + public SideInvisibleArgs(BlockState state, BlockState stateFrom, Direction direction) { + this.state = state; + this.stateFrom = stateFrom; + this.direction = direction; + } + + public SideInvisibleArgs(net.pitan76.mcpitanlib.midohra.block.BlockState state, net.pitan76.mcpitanlib.midohra.block.BlockState stateFrom, net.pitan76.mcpitanlib.midohra.util.math.Direction direction) { + this.state = state.toMinecraft(); + this.stateFrom = stateFrom.toMinecraft(); + this.direction = direction.toMinecraft(); + } + + public BlockState getState() { + return state; + } + + public BlockState getStateFrom() { + return stateFrom; + } + + public Direction getDirection() { + return direction; + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getState()); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraStateFrom() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getStateFrom()); + } + + public net.pitan76.mcpitanlib.midohra.util.math.Direction getMidohraDirection() { + return net.pitan76.mcpitanlib.midohra.util.math.Direction.of(getDirection()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java index fa012ed4e..dffeee616 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java @@ -13,8 +13,8 @@ public class BlockSettingsBuilder { public CompatIdentifier id; - public float hardness; - public float resistance; + public float hardness = -1; + public float resistance = -1; public CompatBlockSoundGroup blockSoundGroup; public CompatibleMaterial material; public CompatMapColor mapColor; @@ -106,7 +106,12 @@ public CompatibleBlockSettings build(CompatIdentifier id) { if (dropsNothing) settings.dropsNothing(); if (luminance != null) settings.luminance((state) -> luminance.applyAsInt(BlockState.of(state))); - return settings.strength(hardness, resistance).sounds(blockSoundGroup); + if (hardness != -1 && resistance != -1) settings.strength(hardness, resistance); + else if (hardness != -1) settings.strength(hardness); + + if (blockSoundGroup != null) settings.sounds(blockSoundGroup); + + return settings; } public AbstractBlock.Settings _build(CompatIdentifier id) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index 57f75cc60..f83e7d57f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -1,6 +1,14 @@ package net.pitan76.mcpitanlib.api.block.v2; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.Direction; +import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; +import net.pitan76.mcpitanlib.api.block.args.RotateArgs; +import net.pitan76.mcpitanlib.api.block.args.SideInvisibleArgs; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; public class CompatBlock extends ExtendBlock { @@ -19,4 +27,34 @@ public CompatibleBlockSettings getCompatSettings() { public BlockWrapper getWrapper() { return BlockWrapper.of(this); } + + @Override + @Deprecated + protected BlockRenderType getRenderType(BlockState state) { + return getRenderType(new RenderTypeArgs(state)).renderType; + } + + public CompatBlockRenderType getRenderType(RenderTypeArgs args) { + return new CompatBlockRenderType(super.getRenderType(args.state)); + } + + @Override + @Deprecated + protected BlockState rotate(BlockState state, BlockRotation rotation) { + return rotate(new RotateArgs(state, rotation)); + } + + public BlockState rotate(RotateArgs args) { + return super.rotate(args.state, args.rotation); + } + + @Override + @Deprecated + protected boolean isSideInvisible(BlockState state, BlockState stateFrom, Direction direction) { + return isSideInvisible(new SideInvisibleArgs(state, stateFrom, direction)); + } + + public boolean isSideInvisible(SideInvisibleArgs args) { + return super.isSideInvisible(args.state, args.stateFrom, args.direction); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java index 412e03a58..9bd8fa2a1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java @@ -5,6 +5,7 @@ import net.minecraft.state.StateManager; import net.minecraft.state.property.Property; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.state.property.IProperty; public class AppendPropertiesArgs extends BaseEvent { public StateManager.Builder builder; @@ -20,4 +21,10 @@ public StateManager.Builder getBuilder() { public void addProperty(Property... properties) { builder.add(properties); } + + public void addProperty(IProperty... properties) { + for (IProperty property : properties) { + builder.add(property.getProperty()); + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java index 80f543f56..8f767a49a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java @@ -17,4 +17,12 @@ public TileTickEvent(World world, BlockPos pos, BlockState state, T blockEntity) this.state = state; this.blockEntity = blockEntity; } + + public boolean isClient() { + return world.isClient(); + } + + public boolean isServer() { + return !isClient(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java new file mode 100644 index 000000000..41c63b9ba --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java @@ -0,0 +1,72 @@ +package net.pitan76.mcpitanlib.api.item.v3; + +import net.minecraft.block.Block; +import net.minecraft.item.ToolMaterial; +import net.minecraft.registry.tag.TagKey; +import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; + +public class VanillaCompatToolMaterial implements CompatToolMaterial { + private final ToolMaterial material; + + public static final VanillaCompatToolMaterial WOOD = of(ToolMaterial.WOOD); + public static final VanillaCompatToolMaterial STONE = of(ToolMaterial.STONE); + public static final VanillaCompatToolMaterial IRON = of(ToolMaterial.IRON); + public static final VanillaCompatToolMaterial GOLD = of(ToolMaterial.GOLD); + public static final VanillaCompatToolMaterial DIAMOND = of(ToolMaterial.DIAMOND); + public static final VanillaCompatToolMaterial NETHERITE = of(ToolMaterial.NETHERITE); + + protected VanillaCompatToolMaterial(ToolMaterial material) { + this.material = material; + } + + private static VanillaCompatToolMaterial of(ToolMaterial material) { + return new VanillaCompatToolMaterial(material); + } + + @Override + public RepairIngredientTag getRepairIngredientTag() { + return new RepairIngredientTag(material.repairItems()); + } + + @Override + public int getCompatDurability() { + return material.durability(); + } + + @Override + public float getCompatMiningSpeedMultiplier() { + return material.speed(); + } + + @Override + public float getCompatAttackDamage() { + return material.attackDamageBonus(); + } + + @Override + public int getCompatMiningLevel() { + TagKey tag = material.incorrectBlocksForDrops(); + if (tag == ToolMaterial.WOOD.incorrectBlocksForDrops()) return 0; + if (tag == ToolMaterial.STONE.incorrectBlocksForDrops()) return 1; + if (tag == ToolMaterial.IRON.incorrectBlocksForDrops()) return 2; + if (tag == ToolMaterial.GOLD.incorrectBlocksForDrops()) return 2; + if (tag == ToolMaterial.DIAMOND.incorrectBlocksForDrops()) return 3; + if (tag == ToolMaterial.NETHERITE.incorrectBlocksForDrops()) return 4; + return -1; + } + + @Override + public int getCompatEnchantability() { + return material.enchantmentValue(); + } + + @Deprecated + public ToolMaterial toMinecraft() { + return material; + } + + @Override + public ToolMaterial build() { + return material; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/BooleanProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/BooleanProperty.java new file mode 100644 index 000000000..a6b7775be --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/BooleanProperty.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.state.property; + +public class BooleanProperty implements IProperty { + + private final net.minecraft.state.property.BooleanProperty property; + + public BooleanProperty(String name) { + this(net.minecraft.state.property.BooleanProperty.of(name)); + } + + public BooleanProperty(net.minecraft.state.property.BooleanProperty property) { + this.property = property; + } + + public static BooleanProperty of(String name) { + return new BooleanProperty(name); + } + + public static BooleanProperty of(net.minecraft.state.property.BooleanProperty property) { + return new BooleanProperty(property); + } + + @Override + public net.minecraft.state.property.BooleanProperty getProperty() { + return property; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java index 1e2ffb348..e443066b8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java @@ -1,9 +1,29 @@ package net.pitan76.mcpitanlib.api.state.property; +import net.minecraft.block.enums.BlockHalf; +import net.minecraft.block.enums.StairShape; import net.minecraft.state.property.Properties; public class CompatProperties { public static final DirectionProperty FACING = new DirectionProperty(Properties.FACING); public static final DirectionProperty HORIZONTAL_FACING = new DirectionProperty(Properties.HORIZONTAL_FACING); public static final DirectionProperty HOPPER_FACING = new DirectionProperty(Properties.HOPPER_FACING); + + public static final BooleanProperty POWERED = new BooleanProperty(Properties.POWERED); + public static final BooleanProperty ENABLED = new BooleanProperty(Properties.ENABLED); + public static final BooleanProperty WATERLOGGED = new BooleanProperty(Properties.WATERLOGGED); + public static final BooleanProperty LIT = new BooleanProperty(Properties.LIT); + public static final BooleanProperty OCCUPIED = new BooleanProperty(Properties.OCCUPIED); + public static final BooleanProperty ATTACHED = new BooleanProperty(Properties.ATTACHED); + public static final BooleanProperty HANGING = new BooleanProperty(Properties.HANGING); + public static final BooleanProperty BOTTOM = new BooleanProperty(Properties.BOTTOM); + public static final BooleanProperty OPEN = new BooleanProperty(Properties.OPEN); + public static final BooleanProperty UNSTABLE = new BooleanProperty(Properties.UNSTABLE); + + public static final IntProperty POWER = new IntProperty(Properties.POWER); + public static final IntProperty LAYERS = new IntProperty(Properties.LAYERS); + public static final IntProperty NOTE = new IntProperty(Properties.NOTE); + + public static final EnumProperty BLOCK_HALF = new EnumProperty<>(Properties.BLOCK_HALF); + public static final EnumProperty STAIR_SHAPE = new EnumProperty<>(Properties.STAIR_SHAPE); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/EnumProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/EnumProperty.java new file mode 100644 index 000000000..7e7e9522b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/EnumProperty.java @@ -0,0 +1,40 @@ +package net.pitan76.mcpitanlib.api.state.property; + +import net.minecraft.util.StringIdentifiable; + +import java.util.function.Predicate; + +public class EnumProperty & StringIdentifiable> implements IProperty { + + private final net.minecraft.state.property.EnumProperty property; + + public EnumProperty(String name, Class type) { + this(net.minecraft.state.property.EnumProperty.of(name, type)); + } + + public EnumProperty(String name, Class type, Predicate filter) { + this(net.minecraft.state.property.EnumProperty.of(name, type, filter)); + } + + public EnumProperty(net.minecraft.state.property.EnumProperty property) { + this.property = property; + } + + public static & StringIdentifiable> EnumProperty of(String name, Class type) { + return new EnumProperty<>(name, type); + } + + public static & StringIdentifiable> EnumProperty of(String name, Class type, Predicate filter) { + return new EnumProperty<>(name, type, filter); + } + + + public static & StringIdentifiable> EnumProperty of(net.minecraft.state.property.EnumProperty property) { + return new EnumProperty<>(property); + } + + @Override + public net.minecraft.state.property.EnumProperty getProperty() { + return property; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IntProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IntProperty.java new file mode 100644 index 000000000..850604d9f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IntProperty.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.api.state.property; + +public class IntProperty implements IProperty { + + private final net.minecraft.state.property.IntProperty property; + + public IntProperty(String name, int min, int max) { + this(net.minecraft.state.property.IntProperty.of(name, min, max)); + } + + public IntProperty(String name) { + this(name, 0, 15); + } + + public IntProperty(net.minecraft.state.property.IntProperty property) { + this.property = property; + } + + public static IntProperty of(String name) { + return new IntProperty(name); + } + + public static IntProperty of(String name, int min, int max) { + return new IntProperty(name, min, max); + } + + public static IntProperty of(net.minecraft.state.property.IntProperty property) { + return new IntProperty(property); + } + + @Override + public net.minecraft.state.property.IntProperty getProperty() { + return property; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index fe74937a8..44a3cb401 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -3,11 +3,14 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; import net.minecraft.item.ItemStack; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.state.StateManager; import net.minecraft.state.property.Property; +import net.minecraft.util.BlockRotation; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -83,4 +86,16 @@ public static CompatActionResult onUseWithItem(BlockState state, ItemStack stack public static CompatActionResult onUseWithItem_actionResult(BlockState state, ItemStack stack, World world, PlayerEntity player, Hand hand, BlockHitResult hit) { return onUseWithItem(state, stack, world, player, hand, hit); } + + public static FluidState getFluidState(BlockState state) { + return state.getFluidState(); + } + + public static Fluid getFluid(BlockState state) { + return getFluidState(state).getFluid(); + } + + public static BlockState rotate(BlockState state, BlockRotation rotation) { + return state.rotate(rotation); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java index 790e527e1..acdc84640 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java @@ -1,6 +1,8 @@ package net.pitan76.mcpitanlib.midohra.block; +import net.minecraft.state.property.Property; import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; +import net.pitan76.mcpitanlib.api.state.property.IProperty; import net.pitan76.mcpitanlib.api.util.BlockStateUtil; public class BlockState { @@ -54,4 +56,36 @@ public String getName() { public net.minecraft.block.BlockState toMinecraft() { return state; } + + public , V extends T> BlockState with(Property property, V value) { + return of(state.with(property, value)); + } + + public , V extends T> BlockState with(IProperty property, V value) { + return with(property.getProperty(), value); + } + + public > BlockState cycle(Property property) { + return of(state.cycle(property)); + } + + public > BlockState cycle(IProperty property) { + return cycle(property.getProperty()); + } + + public > T get(Property property) { + return state.get(property); + } + + public > T get(IProperty property) { + return get(property.getProperty()); + } + + public > boolean contains(Property property) { + return state.contains(property); + } + + public > boolean contains(IProperty property) { + return contains(property.getProperty()); + } } diff --git a/info.properties b/info.properties index d5311a091..665bcd5ae 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.2 +mod_version=3.0.3 maven_group=net.pitan76 changelog=Support for 1.21.3 \ No newline at end of file From 0fbf1a93a329eae09bc044b4866ba2925d5cc9a5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:03:10 +0900 Subject: [PATCH 401/617] fix APIs v3.0.3 --- .../item/v3/VanillaCompatToolMaterial.java | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java index 41c63b9ba..8d3ca27b9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java @@ -2,18 +2,19 @@ import net.minecraft.block.Block; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.ToolMaterials; import net.minecraft.registry.tag.TagKey; import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; public class VanillaCompatToolMaterial implements CompatToolMaterial { private final ToolMaterial material; - public static final VanillaCompatToolMaterial WOOD = of(ToolMaterial.WOOD); - public static final VanillaCompatToolMaterial STONE = of(ToolMaterial.STONE); - public static final VanillaCompatToolMaterial IRON = of(ToolMaterial.IRON); - public static final VanillaCompatToolMaterial GOLD = of(ToolMaterial.GOLD); - public static final VanillaCompatToolMaterial DIAMOND = of(ToolMaterial.DIAMOND); - public static final VanillaCompatToolMaterial NETHERITE = of(ToolMaterial.NETHERITE); + public static final VanillaCompatToolMaterial WOOD = of(ToolMaterials.WOOD); + public static final VanillaCompatToolMaterial STONE = of(ToolMaterials.STONE); + public static final VanillaCompatToolMaterial IRON = of(ToolMaterials.IRON); + public static final VanillaCompatToolMaterial GOLD = of(ToolMaterials.GOLD); + public static final VanillaCompatToolMaterial DIAMOND = of(ToolMaterials.DIAMOND); + public static final VanillaCompatToolMaterial NETHERITE = of(ToolMaterials.NETHERITE); protected VanillaCompatToolMaterial(ToolMaterial material) { this.material = material; @@ -25,39 +26,44 @@ private static VanillaCompatToolMaterial of(ToolMaterial material) { @Override public RepairIngredientTag getRepairIngredientTag() { - return new RepairIngredientTag(material.repairItems()); + if (material == ToolMaterials.STONE) return RepairIngredientTag.STONE_TOOL_MATERIALS; + if (material == ToolMaterials.IRON) return RepairIngredientTag.IRON_TOOL_MATERIALS; + if (material == ToolMaterials.GOLD) return RepairIngredientTag.GOLDEN_TOOL_MATERIALS; + if (material == ToolMaterials.DIAMOND) return RepairIngredientTag.DIAMOND_TOOL_MATERIALS; + if (material == ToolMaterials.NETHERITE) return RepairIngredientTag.NETHERITE_TOOL_MATERIALS; + return RepairIngredientTag.WOODEN_TOOL_MATERIALS; } @Override public int getCompatDurability() { - return material.durability(); + return material.getDurability(); } @Override public float getCompatMiningSpeedMultiplier() { - return material.speed(); + return material.getMiningSpeedMultiplier(); } @Override public float getCompatAttackDamage() { - return material.attackDamageBonus(); + return material.getAttackDamage(); } @Override public int getCompatMiningLevel() { - TagKey tag = material.incorrectBlocksForDrops(); - if (tag == ToolMaterial.WOOD.incorrectBlocksForDrops()) return 0; - if (tag == ToolMaterial.STONE.incorrectBlocksForDrops()) return 1; - if (tag == ToolMaterial.IRON.incorrectBlocksForDrops()) return 2; - if (tag == ToolMaterial.GOLD.incorrectBlocksForDrops()) return 2; - if (tag == ToolMaterial.DIAMOND.incorrectBlocksForDrops()) return 3; - if (tag == ToolMaterial.NETHERITE.incorrectBlocksForDrops()) return 4; + TagKey tag = material.getInverseTag(); + if (tag == ToolMaterials.WOOD.getInverseTag()) return 0; + if (tag == ToolMaterials.STONE.getInverseTag()) return 1; + if (tag == ToolMaterials.IRON.getInverseTag()) return 2; + if (tag == ToolMaterials.GOLD.getInverseTag()) return 2; + if (tag == ToolMaterials.DIAMOND.getInverseTag()) return 3; + if (tag == ToolMaterials.NETHERITE.getInverseTag()) return 4; return -1; } @Override public int getCompatEnchantability() { - return material.enchantmentValue(); + return material.getEnchantability(); } @Deprecated From 6e63d2d2a4ca4e7a384f1853b5448cd58008788d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:38:31 +0900 Subject: [PATCH 402/617] fix APIs v3.0.3-2 --- .../pitan76/mcpitanlib/api/block/v2/CompatBlock.java | 6 +++--- .../api/item/v3/VanillaCompatToolMaterial.java | 11 +---------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index f83e7d57f..17f95580b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -30,7 +30,7 @@ public BlockWrapper getWrapper() { @Override @Deprecated - protected BlockRenderType getRenderType(BlockState state) { + public BlockRenderType getRenderType(BlockState state) { return getRenderType(new RenderTypeArgs(state)).renderType; } @@ -40,7 +40,7 @@ public CompatBlockRenderType getRenderType(RenderTypeArgs args) { @Override @Deprecated - protected BlockState rotate(BlockState state, BlockRotation rotation) { + public BlockState rotate(BlockState state, BlockRotation rotation) { return rotate(new RotateArgs(state, rotation)); } @@ -50,7 +50,7 @@ public BlockState rotate(RotateArgs args) { @Override @Deprecated - protected boolean isSideInvisible(BlockState state, BlockState stateFrom, Direction direction) { + public boolean isSideInvisible(BlockState state, BlockState stateFrom, Direction direction) { return isSideInvisible(new SideInvisibleArgs(state, stateFrom, direction)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java index 8d3ca27b9..407249db0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v3/VanillaCompatToolMaterial.java @@ -1,9 +1,7 @@ package net.pitan76.mcpitanlib.api.item.v3; -import net.minecraft.block.Block; import net.minecraft.item.ToolMaterial; import net.minecraft.item.ToolMaterials; -import net.minecraft.registry.tag.TagKey; import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; public class VanillaCompatToolMaterial implements CompatToolMaterial { @@ -51,14 +49,7 @@ public float getCompatAttackDamage() { @Override public int getCompatMiningLevel() { - TagKey tag = material.getInverseTag(); - if (tag == ToolMaterials.WOOD.getInverseTag()) return 0; - if (tag == ToolMaterials.STONE.getInverseTag()) return 1; - if (tag == ToolMaterials.IRON.getInverseTag()) return 2; - if (tag == ToolMaterials.GOLD.getInverseTag()) return 2; - if (tag == ToolMaterials.DIAMOND.getInverseTag()) return 3; - if (tag == ToolMaterials.NETHERITE.getInverseTag()) return 4; - return -1; + return material.getMiningLevel(); } @Override From 9f740c5e764d3304a1b4ca085d1dbf26e4e7d609 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Wed, 13 Nov 2024 11:39:21 +0900 Subject: [PATCH 403/617] add with fix APIs v3.0.4 --- README.md | 16 ++- .../mcpitanlib/api/block/v2/CompatBlock.java | 16 +++ .../api/event/block/OutlineShapeEvent.java | 17 +++ .../api/event/block/PlacementStateArgs.java | 13 ++ .../api/state/property/DirectionProperty.java | 13 ++ .../api/state/property/IProperty.java | 8 ++ .../api/tile/BlockEntityTypeBuilder.java | 4 +- .../mcpitanlib/api/util/CustomDataUtil.java | 13 ++ .../mcpitanlib/api/util/PropertyUtil.java | 4 + .../mcpitanlib/api/util/item/FuelUtil.java | 16 +++ .../mcpitanlib/api/util/item/ItemUtil.java | 13 ++ .../api/util/world/WorldAccessUtil.java | 35 +++++ .../api/util/world/WorldViewUtil.java | 7 + .../core/registry/FuelRegistry.java | 5 + .../mcpitanlib/midohra/block/BlockState.java | 33 +++-- .../block/entity/BlockEntityWrapper.java | 93 +++++++++++++ .../mcpitanlib/midohra/item/ItemStack.java | 20 ++- .../mcpitanlib/midohra/world/World.java | 90 +++++++++++++ .../mcpitanlib/midohra/world/WorldAccess.java | 122 ++++++++++++++++++ info.properties | 4 +- 20 files changed, 524 insertions(+), 18 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/item/FuelUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java diff --git a/README.md b/README.md index 6e89f70cc..c513f1bad 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ MCPitanLibはライブラリです。 1つのjarで複数のMCバージョンを - [Architectury API (CurseForge)](https://www.curseforge.com/minecraft/mc-mods/architectury-api) ### ダウンロード -[CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch) -[Modrinth](https://modrinth.com/mod/mcpitanlibarch) +- [CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch) +- [Modrinth](https://modrinth.com/mod/mcpitanlibarch) ### 使い方 `build.gradle`に以下のように記述してください。 @@ -38,11 +38,14 @@ dependencies { `gradle.properties`に以下のように記述してください。 ```properties +# Example: mcpitanlib_version=+1.18.2:3.0.4 mcpitanlib_version=x.x.x ``` バージョンは[maven.pitan76.net](https://maven.pitan76.net/net/pitan76/)で確認してください。 +MCPitanLibを用いたMOD開発は「common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java」を参考にしてください。 + ## English MCPitanLib is a library. It is for supporting multiple MC versions with one jar.
It is under development, so the specification may change without notice, and there may be bugs.
@@ -56,8 +59,8 @@ I am creating it for my own use, so I don't expect others to use it much.
- [Architectury API (CurseForge)](https://www.curseforge.com/minecraft/mc-mods/architectury-api) ### Download -[CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch) -[Modrinth](https://modrinth.com/mod/mcpitanlibarch) +- [CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch) +- [Modrinth](https://modrinth.com/mod/mcpitanlibarch) ### How to use Write as follows in `build.gradle`. @@ -82,8 +85,11 @@ dependencies { Write as follows in `gradle.properties`. ```properties -# Example: mcpitanlib_version=+1.18.2:1.9.5 +# Example: mcpitanlib_version=+1.18.2:3.0.4 mcpitanlib_version=+x.x.x:x.x.x ``` Please check the version at [maven.pitan76.net](https://maven.pitan76.net/net/pitan76/). + +For MOD development using MCPitanLib, refer to "common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java". + diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index 17f95580b..2c81fedea 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -57,4 +57,20 @@ public boolean isSideInvisible(BlockState state, BlockState stateFrom, Direction public boolean isSideInvisible(SideInvisibleArgs args) { return super.isSideInvisible(args.state, args.stateFrom, args.direction); } + + /** + * Compatible for getDefaultState() + * @return default block state + */ + public net.pitan76.mcpitanlib.midohra.block.BlockState getDefaultMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getNewDefaultState()); + } + + /** + * Compatible for setDefaultState() + * @param state BlockState + */ + public void setDefaultState(net.pitan76.mcpitanlib.midohra.block.BlockState state) { + setNewDefaultState(state.toMinecraft()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java index 3eec1b815..7131ee630 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/OutlineShapeEvent.java @@ -6,6 +6,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.state.property.IProperty; public class OutlineShapeEvent extends BaseEvent { public BlockState state; @@ -43,4 +44,20 @@ public > T getProperty(Property property) { public > boolean containsProperty(Property property) { return state.contains(property); } + + public , V extends T> BlockState with(Property property, V value) { + return state.with(property, value); + } + + public > T get(IProperty property) { + return getProperty(property.getProperty()); + } + + public > boolean contains(IProperty property) { + return containsProperty(property.getProperty()); + } + + public , V extends T> net.pitan76.mcpitanlib.midohra.block.BlockState with(IProperty property, V value) { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(with(property.getProperty(), value)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java index 381572a0a..a3ca7db4b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PlacementStateArgs.java @@ -14,6 +14,7 @@ import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; +import net.pitan76.mcpitanlib.api.state.property.IProperty; import net.pitan76.mcpitanlib.api.util.BlockStateUtil; import net.pitan76.mcpitanlib.api.util.WorldUtil; import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; @@ -106,6 +107,18 @@ public , V extends T> BlockState withBlockState(Property return BlockStateUtil.with(BlockStateUtil.getDefaultState(block), property, value); } + public , V extends T> net.pitan76.mcpitanlib.midohra.block.BlockState with(IProperty property, V value) { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(withBlockState(property.getProperty(), value)); + } + + public BlockState getBlockState() { + return BlockStateUtil.getDefaultState(block); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraBlockState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getBlockState()); + } + public BlockEntity getBlockEntity() { return WorldUtil.getBlockEntity(getWorld(), getPos()); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/DirectionProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/DirectionProperty.java index 50c38ab1e..f1bd61a7b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/DirectionProperty.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/DirectionProperty.java @@ -3,6 +3,7 @@ import net.minecraft.state.property.EnumProperty; import net.minecraft.state.property.Property; import net.minecraft.util.math.Direction; +import net.pitan76.mcpitanlib.midohra.block.BlockState; import java.util.function.Predicate; @@ -30,6 +31,18 @@ public static DirectionProperty of(String name, Predicate filter) { return new DirectionProperty(name, filter); } + public net.pitan76.mcpitanlib.midohra.util.math.Direction getAsMidohra(BlockState state) { + return net.pitan76.mcpitanlib.midohra.util.math.Direction.of(get(state.toMinecraft())); + } + + public BlockState with(BlockState state, net.pitan76.mcpitanlib.midohra.util.math.Direction value) { + return BlockState.of(with(state.toMinecraft(), value.toMinecraft())); + } + + public BlockState cycle(BlockState state) { + return BlockState.of(cycle(state.toMinecraft())); + } + @Override public Property getProperty() { return property; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java index 555fec27e..3fb738dd5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java @@ -17,5 +17,13 @@ default BlockState with(BlockState state, T value) { return state.with(getProperty(), value); } + default boolean contains(BlockState state) { + return state.contains(getProperty()); + } + + default BlockState cycle(BlockState state) { + return state.cycle(getProperty()); + } + Property getProperty(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java index ebee9da24..1798b0e01 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/BlockEntityTypeBuilder.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.tile; import com.mojang.datafixers.types.Type; +import dev.architectury.injectables.annotations.ExpectPlatform; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; @@ -43,7 +44,8 @@ public BlockEntityType build() { } public BlockEntityType build(Type type) { - return BlockEntityTypeBuilder.create(factory, blocks.toArray(new Block[0])).build(type); + return BlockEntityType.Builder.create(factory::create, blocks.toArray(new Block[0])).build(type); + } @FunctionalInterface diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java index fef95d330..94b039d98 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CustomDataUtil.java @@ -186,4 +186,17 @@ public static void fix_oldNbt(ItemStack stack, String[] keys) { setNbt(stack, customData); } + + /** + * カスタムNBTを削除する + * @param stack ItemStack + */ + public static void remove(ItemStack stack) { + NbtCompound nbt = stack.getOrCreateNbt(); + if (nbt.contains("components")) { + NbtCompound components = nbt.getCompound("components"); + components.remove("minecraft:custom_data"); + nbt.put("components", components); + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java index 104d00b92..a97c8dc53 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/PropertyUtil.java @@ -51,6 +51,10 @@ public static Direction get(BlockState state, DirectionProperty property) { return property.get(state); } + public static net.pitan76.mcpitanlib.midohra.util.math.Direction getAsMidohra(BlockState state, DirectionProperty property) { + return net.pitan76.mcpitanlib.midohra.util.math.Direction.of(property.get(state)); + } + public static Direction getFacing(BlockState state) { return facing().get(state); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/FuelUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/FuelUtil.java new file mode 100644 index 000000000..4024ce047 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/FuelUtil.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.util.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.core.registry.FuelRegistry; + +public class FuelUtil { + + public static int getTime(World world, ItemStack stack) { + return FuelRegistry.get(world, stack); + } + + public static boolean isFuel(World world, ItemStack stack) { + return FuelRegistry.isFuel(world, stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemUtil.java index d608f7129..f2522401e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/item/ItemUtil.java @@ -8,6 +8,7 @@ import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; import java.util.ArrayList; import java.util.List; @@ -247,4 +248,16 @@ public static TextComponent getName(Item item) { public static String getTranslationKey(Item item) { return item.getTranslationKey(); } + + public static boolean hasRecipeRemainder(Item item) { + return !ItemStackUtil.isEmpty(getRecipeRemainderStack(item)); + } + + public static Item getRecipeRemainder(Item item) { + return item.getRecipeRemainder(); + } + + public static ItemStack getRecipeRemainderStack(Item item) { + return ItemStackUtil.create(getRecipeRemainder(item)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldAccessUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldAccessUtil.java index 08797bef1..7724bbfd2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldAccessUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldAccessUtil.java @@ -1,7 +1,10 @@ package net.pitan76.mcpitanlib.api.util.world; import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; import net.minecraft.fluid.Fluid; +import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldAccess; @@ -14,4 +17,36 @@ public static void scheduleBlockTick(WorldAccess world, BlockPos pos, Block bloc public static void scheduleFluidTick(WorldAccess world, BlockPos pos, Fluid fluid, int delay) { world.createAndScheduleFluidTick(pos, fluid, delay); } + + public static boolean setBlockState(WorldAccess world, BlockPos pos, BlockState state, int flags) { + return world.setBlockState(pos, state, flags); + } + + public static boolean setBlockState(WorldAccess world, BlockPos pos, BlockState state, int flags, int maxUpdateDepth) { + return world.setBlockState(pos, state, flags, maxUpdateDepth); + } + + public static boolean setBlockState(WorldAccess world, BlockPos pos, BlockState state) { + return setBlockState(world, pos, state, 3); + } + + public static BlockState getBlockState(WorldAccess world, BlockPos pos) { + return world.getBlockState(pos); + } + + public static boolean breakBlock(WorldAccess world, BlockPos pos, boolean drop) { + return world.breakBlock(pos, drop); + } + + public static boolean breakBlock(WorldAccess world, BlockPos pos, boolean drop, Entity entity) { + return world.breakBlock(pos, drop, entity); + } + + public static boolean removeBlock(WorldAccess world, BlockPos pos, boolean move) { + return world.removeBlock(pos, move); + } + + public static MinecraftServer getServer(WorldAccess world) { + return world.getServer(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldViewUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldViewUtil.java index 2f773c1cf..9d27e078c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldViewUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/WorldViewUtil.java @@ -3,6 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.tag.FluidTags; @@ -10,6 +11,8 @@ import net.minecraft.world.WorldView; import net.minecraft.world.dimension.DimensionType; +import java.util.Optional; + public class WorldViewUtil { public static boolean isClient(WorldView world) { @@ -28,6 +31,10 @@ public static BlockEntity getBlockEntity(WorldView world, BlockPos pos) { return world.getBlockEntity(pos); } + public static Optional getBlockEntity(WorldView world, BlockPos pos, BlockEntityType type) { + return world.getBlockEntity(pos, type); + } + public static FluidState getFluidState(WorldView world, BlockPos pos) { return getBlockState(world, pos).getFluidState(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java index 42062ef4e..b895feb2c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/core/registry/FuelRegistry.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.core.registry; +import net.minecraft.block.entity.AbstractFurnaceBlockEntity; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -21,4 +22,8 @@ public static int get(ItemStack stack) { public static int get(World world, ItemStack stack) { return dev.architectury.registry.fuel.FuelRegistry.get(stack); } + + public static boolean isFuel(World world, ItemStack stack) { + return AbstractFurnaceBlockEntity.canUseAsFuel(stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java index acdc84640..7440041bd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java @@ -2,6 +2,7 @@ import net.minecraft.state.property.Property; import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; +import net.pitan76.mcpitanlib.api.state.property.DirectionProperty; import net.pitan76.mcpitanlib.api.state.property.IProperty; import net.pitan76.mcpitanlib.api.util.BlockStateUtil; @@ -30,20 +31,20 @@ public boolean isExist() { } public boolean isEmpty() { - return state == null; + return toMinecraft() == null; } public boolean isAir() { - return isEmpty() || BlockStateUtil.isAir(state); + return isEmpty() || BlockStateUtil.isAir(toMinecraft()); } public CompatBlockSoundGroup getSoundGroup() { - return BlockStateUtil.getCompatSoundGroup(state); + return BlockStateUtil.getCompatSoundGroup(toMinecraft()); } public BlockWrapper getBlock() { if (blockWrapper == null) - blockWrapper = BlockWrapper.of(BlockStateUtil.getBlock(state)); + blockWrapper = BlockWrapper.of(BlockStateUtil.getBlock(toMinecraft())); return blockWrapper; } @@ -58,34 +59,50 @@ public net.minecraft.block.BlockState toMinecraft() { } public , V extends T> BlockState with(Property property, V value) { - return of(state.with(property, value)); + return of(toMinecraft().with(property, value)); } public , V extends T> BlockState with(IProperty property, V value) { return with(property.getProperty(), value); } + public BlockState with(DirectionProperty property, net.pitan76.mcpitanlib.midohra.util.math.Direction value) { + return of(property.with(toMinecraft(), value.toMinecraft())); + } + public > BlockState cycle(Property property) { - return of(state.cycle(property)); + return of(toMinecraft().cycle(property)); } public > BlockState cycle(IProperty property) { return cycle(property.getProperty()); } + public BlockState cycle(DirectionProperty property) { + return of(property.cycle(toMinecraft())); + } + public > T get(Property property) { - return state.get(property); + return toMinecraft().get(property); } public > T get(IProperty property) { return get(property.getProperty()); } + public net.pitan76.mcpitanlib.midohra.util.math.Direction get(DirectionProperty property) { + return net.pitan76.mcpitanlib.midohra.util.math.Direction.of(get(property.getProperty())); + } + public > boolean contains(Property property) { - return state.contains(property); + return toMinecraft().contains(property); } public > boolean contains(IProperty property) { return contains(property.getProperty()); } + + public boolean contains(DirectionProperty property) { + return contains(property.getProperty()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityWrapper.java new file mode 100644 index 000000000..e2c94d201 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityWrapper.java @@ -0,0 +1,93 @@ +package net.pitan76.mcpitanlib.midohra.block.entity; + +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.util.BlockEntityUtil; +import net.pitan76.mcpitanlib.api.util.RegistryLookupUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.nbt.NbtCompound; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.World; + +public class BlockEntityWrapper { + private final net.minecraft.block.entity.BlockEntity blockEntity; + + public static final BlockEntityWrapper EMPTY = new BlockEntityWrapper(null); + + protected BlockEntityWrapper(net.minecraft.block.entity.BlockEntity blockEntity) { + this.blockEntity = blockEntity; + } + + public static BlockEntityWrapper of(net.minecraft.block.entity.BlockEntity blockEntity) { + return new BlockEntityWrapper(blockEntity); + } + + public static BlockEntityWrapper of() { + return EMPTY; + } + + public net.minecraft.block.entity.BlockEntity get() { + return blockEntity; + } + + public BlockPos getPos() { + return BlockPos.of(get().getPos()); + } + + public boolean isExist() { + return !isEmpty(); + } + + public boolean isEmpty() { + return this == EMPTY || get() == null; + } + + public boolean isRemoved() { + return get().isRemoved(); + } + + public void markDirty() { + BlockEntityUtil.markDirty(get()); + } + + public World getWorld() { + return World.of(BlockEntityUtil.getWorld(get())); + } + + public BlockWrapper getBlock() { + return BlockWrapper.of(BlockEntityUtil.getBlock(get())); + } + + + public BlockState getBlockState() { + return BlockState.of(BlockEntityUtil.getBlockState(get())); + } + + public BlockState getCachedState() { + return BlockState.of(BlockEntityUtil.getCachedState(get())); + } + + public NbtCompound createNbt() { + return NbtCompound.of(BlockEntityUtil.getBlockEntityNbt(get())); + } + + public void markRemoved() { + BlockEntityUtil.markRemoved(get()); + } + + public void writeNbt(NbtCompound nbt, CompatRegistryLookup registryLookup) { + BlockEntityUtil.writeNbt(get(), nbt.toMinecraft(), registryLookup); + } + + public void readNbt(NbtCompound nbt, CompatRegistryLookup registryLookup) { + BlockEntityUtil.readNbt(get(), nbt.toMinecraft(), registryLookup); + } + + public void writeNbt(NbtCompound nbt) { + writeNbt(nbt, RegistryLookupUtil.getRegistryLookup(get())); + } + + public void readNbt(NbtCompound nbt) { + readNbt(nbt, RegistryLookupUtil.getRegistryLookup(get())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java index 0fef58538..fcdbd2ce6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java @@ -44,14 +44,26 @@ public void setCount(int count) { stack.setCount(count); } - public NbtCompound getNbt() { + public NbtCompound getCustomNbt() { return CustomDataUtil.getNbt(stack); } - public void setNbt(NbtCompound nbt) { + public void setCustomNbt(NbtCompound nbt) { CustomDataUtil.setNbt(stack, nbt); } + public void removeCustomNbt() { + CustomDataUtil.remove(stack); + } + + public boolean hasCustomNbt() { + return CustomDataUtil.hasNbt(stack); + } + + public boolean isEmpty() { + return stack.isEmpty(); + } + public CompatIdentifier getItemId() { return ItemUtil.toCompatID(stack.getItem()); } @@ -60,6 +72,10 @@ public ItemStack copy() { return new ItemStack(stack.copy()); } + public ItemStack copyWithCount(int count) { + return new ItemStack(ItemStackUtil.copyWithCount(stack, count)); + } + public Map getEnchantments(@Nullable World world) { return EnchantmentUtil.getEnchantment(stack, world); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java new file mode 100644 index 000000000..a8d8f4b46 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java @@ -0,0 +1,90 @@ +package net.pitan76.mcpitanlib.midohra.world; + +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.fluid.FluidState; +import net.minecraft.server.world.ServerWorld; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public class World extends WorldAccess { + + private final net.minecraft.world.World world; + + protected World(net.minecraft.world.World world) { + super(null); + this.world = world; + } + + @Override + public net.minecraft.world.World getWorld() { + return world; + } + + public static World of(net.minecraft.world.World world) { + return new World(world); + } + + public net.minecraft.world.World toMinecraft() { + return getWorld(); + } + + public void addBlockEntity(BlockEntityWrapper blockEntity) { + addBlockEntity(blockEntity.get()); + } + + public void addBlockEntity(BlockEntity blockEntity) { + getWorld().addBlockEntity(blockEntity); + } + + public void removeBlockEntity(BlockPos pos) { + getWorld().removeBlockEntity(pos.toMinecraft()); + } + + public long getTime() { + return WorldUtil.getTime(getWorld()); + } + + public long getTopY() { + return WorldUtil.getTopY(getWorld()); + } + + public long getBottomY() { + return WorldUtil.getBottomY(getWorld()); + } + + public long getDimensionHeight() { + return WorldUtil.getDimensionHeight(getWorld()); + } + + public CompatIdentifier getId() { + return WorldUtil.getCompatWorldId(getWorld()); + } + + public FluidState getRawFluidState(BlockPos pos) { + return WorldUtil.getFluidState(getWorld(), pos.toMinecraft()); + } + + public Player getPlayerByUUID(UUID uuid) { + return WorldUtil.getPlayer(getWorld(), uuid); + } + + public List getPlayers() { + return WorldUtil.getPlayers(getWorld()); + } + + public BlockPos getSpawnPos() { + return BlockPos.of(WorldUtil.getSpawnPos(getWorld())); + } + + public Optional getWorld(CompatIdentifier id) { + Optional optional = WorldUtil.getWorld(getWorld(), id); + return optional.map(World::of); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java new file mode 100644 index 000000000..2ac2ef97c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java @@ -0,0 +1,122 @@ +package net.pitan76.mcpitanlib.midohra.world; + +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; +import net.pitan76.mcpitanlib.api.util.world.WorldAccessUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; + +import java.util.Optional; + +public class WorldAccess { + private final net.minecraft.world.WorldAccess world; + + protected WorldAccess(net.minecraft.world.WorldAccess world) { + this.world = world; + } + + public static WorldAccess of(net.minecraft.world.WorldAccess world) { + return new WorldAccess(world); + } + + protected net.minecraft.world.WorldAccess getWorld() { + return world; + } + + public net.minecraft.world.WorldAccess toMinecraft() { + return getWorld(); + } + + public boolean isClient() { + return WorldAccessUtil.isClient(getWorld()); + } + + public boolean isServer() { + return !isClient(); + } + + public CompatRandom getRandom() { + return new CompatRandom(getWorld().getRandom()); + } + + public MinecraftServer getServer() { + return WorldAccessUtil.getServer(getWorld()); + } + + public BlockEntityWrapper getBlockEntity(BlockPos pos) { + return BlockEntityWrapper.of(WorldAccessUtil.getBlockEntity(getWorld(), pos.toMinecraft())); + } + + public Optional getRawBlockEntity(BlockPos pos, BlockEntityType type) { + return WorldAccessUtil.getBlockEntity(getWorld(), pos.toMinecraft(), type); + } + + public BlockEntityWrapper getBlockEntity(BlockPos pos, BlockEntityType type) { + Optional blockEntity = WorldAccessUtil.getBlockEntity(getWorld(), pos.toMinecraft(), type); + return blockEntity.map(BlockEntityWrapper::of).orElse(BlockEntityWrapper.of()); + } + + public boolean removeBlock(BlockPos pos, boolean move) { + return WorldAccessUtil.removeBlock(getWorld(), pos.toMinecraft(), move); + } + + public boolean breakBlock(BlockPos pos, boolean drop) { + return WorldAccessUtil.breakBlock(getWorld(), pos.toMinecraft(), drop); + } + + public boolean breakBlock(BlockPos pos, boolean drop, Entity entity) { + return WorldAccessUtil.breakBlock(getWorld(), pos.toMinecraft(), drop, entity); + } + + public BlockState getBlockState(BlockPos pos) { + return BlockState.of(WorldAccessUtil.getBlockState(getWorld(), pos.toMinecraft())); + } + + public boolean setBlockState(BlockPos pos, BlockState state, int flags) { + return WorldAccessUtil.setBlockState(getWorld(), pos.toMinecraft(), state.toMinecraft(), flags); + } + + public boolean setBlockState(BlockPos pos, BlockState state, int flags, int maxUpdateDepth) { + return WorldAccessUtil.setBlockState(getWorld(), pos.toMinecraft(), state.toMinecraft(), flags, maxUpdateDepth); + } + + public boolean setBlockState(BlockPos pos, BlockState state) { + return WorldAccessUtil.setBlockState(getWorld(), pos.toMinecraft(), state.toMinecraft()); + } + + @Deprecated + public void playSound(PlayerEntity playerEntity, net.minecraft.util.math.BlockPos pos, SoundEvent sound, SoundCategory category, float volume, float pitch) { + getWorld().playSound(playerEntity, pos, sound, category, volume, pitch); + } + + @Deprecated + public void playSound(PlayerEntity playerEntity, net.minecraft.util.math.BlockPos pos, SoundEvent sound, SoundCategory category) { + getWorld().playSound(playerEntity, pos, sound, category, 1f, 1f); + } + + public void playSound(Player player, BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { + playSound(player.getEntity(), pos.toMinecraft(), soundEvent.get(), category.get(), volume, pitch); + } + + public void playSound(Player player, BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category) { + playSound(player.getEntity(), pos.toMinecraft(), soundEvent.get(), category.get()); + } + + public void playSound(BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { + playSound(null, pos.toMinecraft(), soundEvent.get(), category.get(), volume, pitch); + } + + public void playSound(BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category) { + playSound(null, pos.toMinecraft(), soundEvent.get(), category.get()); + } +} diff --git a/info.properties b/info.properties index 665bcd5ae..96a80533e 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.3 +mod_version=3.0.4 maven_group=net.pitan76 -changelog=Support for 1.21.3 \ No newline at end of file +changelog=Fix APIs \ No newline at end of file From 79e71b06bf8896548ccc2dabd044c49a2ec79c1a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 16 Nov 2024 09:13:45 +0900 Subject: [PATCH 404/617] fix midohera api --- .../api/block/args/RenderTypeArgs.java | 10 +- .../mcpitanlib/api/block/args/RotateArgs.java | 8 +- .../api/block/args/v2/OutlineShapeEvent.java | 64 +++++++ .../api/block/args/v2/PlacementStateArgs.java | 166 ++++++++++++++++++ .../args/v2/StateForNeighborUpdateArgs.java | 93 ++++++++++ .../mcpitanlib/api/block/v2/CompatBlock.java | 35 ++++ .../api/event/block/BlockUseEvent.java | 27 +++ .../api/event/block/StateReplacedEvent.java | 27 +++ .../api/event/item/ItemUseEvent.java | 11 ++ .../api/event/item/ItemUseOnBlockEvent.java | 27 +++ .../mcpitanlib/api/util/BlockStateUtil.java | 9 + .../mcpitanlib/api/util/FluidStateUtil.java | 9 + .../mcpitanlib/api/util/FluidUtil.java | 8 + .../mcpitanlib/api/util/ItemStackUtil.java | 5 + .../pitan76/mcpitanlib/midohra/Midohra.java | 160 +++++++++++++++++ .../mcpitanlib/midohra/block/BlockState.java | 1 - .../midohra/block/SupplierBlockWrapper.java | 5 + .../midohra/fluid/FluidWrapper.java | 83 +++++++++ .../holder/BlockStatePropertyHolder.java | 24 +++ .../mcpitanlib/midohra/nbt/NbtCompound.java | 1 - .../mcpitanlib/midohra/nbt/NbtElement.java | 1 - .../mcpitanlib/midohra/nbt/NbtList.java | 1 - .../midohra/util/math/BlockPos.java | 1 - .../midohra/util/math/Direction.java | 26 +-- .../mcpitanlib/midohra/world/BlockView.java | 41 +++++ .../mcpitanlib/midohra/world/IWorldView.java | 23 +++ .../mcpitanlib/midohra/world/World.java | 36 ++-- .../mcpitanlib/midohra/world/WorldAccess.java | 38 ++-- .../mcpitanlib/midohra/world/WorldView.java | 66 +++++++ .../midohra/world/tick/ScheduledTickView.java | 48 +++++ info.properties | 2 +- 31 files changed, 996 insertions(+), 60 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/OutlineShapeEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/PlacementStateArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/StateForNeighborUpdateArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/Midohra.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/holder/BlockStatePropertyHolder.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/BlockView.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/IWorldView.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/tick/ScheduledTickView.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RenderTypeArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RenderTypeArgs.java index 7f57e86d5..645b17745 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RenderTypeArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RenderTypeArgs.java @@ -1,19 +1,21 @@ package net.pitan76.mcpitanlib.api.block.args; import net.minecraft.block.BlockState; +import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; -public class RenderTypeArgs { +public class RenderTypeArgs implements BlockStatePropertyHolder { public BlockState state; public RenderTypeArgs(BlockState state) { this.state = state; } - public BlockState getState() { + public BlockState getRawBlockState() { return state; } - public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { - return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getState()); + @Override + public net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getRawBlockState()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RotateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RotateArgs.java index f479ed90d..0b4e6339e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RotateArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/RotateArgs.java @@ -3,8 +3,9 @@ import net.minecraft.block.BlockState; import net.minecraft.util.BlockRotation; import net.minecraft.util.math.Direction; +import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; -public class RotateArgs { +public class RotateArgs implements BlockStatePropertyHolder { public BlockState state; public BlockRotation rotation; @@ -14,14 +15,15 @@ public RotateArgs(BlockState state, BlockRotation rotation) { this.rotation = rotation; } - public BlockState getState() { + public BlockState getRawBlockState() { return state; } - public BlockRotation getRotation() { + public BlockRotation getRawRotation() { return rotation; } + @Override public net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState() { return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/OutlineShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/OutlineShapeEvent.java new file mode 100644 index 000000000..225949458 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/OutlineShapeEvent.java @@ -0,0 +1,64 @@ +package net.pitan76.mcpitanlib.api.block.args.v2; + +import net.minecraft.block.ShapeContext; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.Item; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.BlockView; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; + +public class OutlineShapeEvent extends BaseEvent implements BlockStatePropertyHolder { + public BlockState state; + public BlockView world; + public BlockPos pos; + public ShapeContext context; + + public OutlineShapeEvent(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + this.state = state; + this.world = world; + this.pos = pos; + this.context = context; + } + + public OutlineShapeEvent(net.minecraft.block.BlockState state, net.minecraft.world.BlockView world, net.minecraft.util.math.BlockPos pos, net.minecraft.block.ShapeContext context) { + this(BlockState.of(state), BlockView.of(world), BlockPos.of(pos), context); + } + + @Override + public BlockState getBlockState() { + return state; + } + + public BlockEntityWrapper getBlockEntity() { + return world.getBlockEntity(pos); + } + + public BlockEntity getRawBlockEntity() { + return getBlockEntity().get(); + } + + public IWorldView getWorldView() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public ShapeContext getContext() { + return context; + } + + public boolean isHolding(Item item) { + return getContext().isHolding(item); + } + + public boolean isHolding(ItemWrapper item) { + return isHolding(item.get()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/PlacementStateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/PlacementStateArgs.java new file mode 100644 index 000000000..0db8aa5de --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/PlacementStateArgs.java @@ -0,0 +1,166 @@ +package net.pitan76.mcpitanlib.api.block.args.v2; + +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.state.property.Property; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; +import net.pitan76.mcpitanlib.api.util.BlockStateUtil; +import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.Direction; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; +import net.pitan76.mcpitanlib.midohra.world.World; +import net.pitan76.mcpitanlib.mixin.ItemUsageContextMixin; +import org.jetbrains.annotations.Nullable; + +public class PlacementStateArgs extends BaseEvent implements BlockStatePropertyHolder { + public ItemPlacementContext ctx; + + @Nullable + public Block block; + + public PlacementStateArgs(ItemPlacementContext ctx) { + this.ctx = ctx; + } + + public PlacementStateArgs(ItemPlacementContext ctx, @Nullable Block block) { + this.ctx = ctx; + this.block = block; + } + + public boolean canPlace() { + return ctx.canPlace(); + } + + public BlockPos getRawPos() { + return ctx.getBlockPos(); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getRawPos()); + } + + public Player getPlayer() { + return new Player(ctx.getPlayer()); + } + + public Direction[] getPlacementDirections() { + net.minecraft.util.math.Direction[] rawDirs = getRawPlacementDirections(); + Direction[] directions = new Direction[rawDirs.length]; + for (int i = 0; i < directions.length; i++) { + directions[i] = Direction.of(rawDirs[i]); + } + + return directions; + } + + public net.minecraft.util.math.Direction[] getRawPlacementDirections() { + return ctx.getPlacementDirections(); + } + + public Hand getHand() { + return ctx.getHand(); + } + + public Direction getSide() { + return Direction.of(getRawSide()); + } + + public net.minecraft.util.math.Direction getRawSide() { + return ctx.getSide(); + } + + public Direction getHorizontalPlayerFacing() { + return Direction.of(getRawHorizontalPlayerFacing()); + } + + public net.minecraft.util.math.Direction getRawHorizontalPlayerFacing() { + return ctx.getPlayerFacing(); + } + + public float getPlayerYaw() { + return ctx.getPlayerYaw(); + } + + public World getWorld() { + return World.of(ctx.getWorld()); + } + + public IWorldView getWorldView() { + return getWorld(); + } + + public boolean isClient() { + return getWorld().isClient(); + } + + public Vec3d getHitPos() { + return ctx.getHitPos(); + } + + public boolean canReplaceExisting() { + return ctx.canReplaceExisting(); + } + + @Deprecated + public ItemUsageContextMixin getIUCAccessor() { + return (ItemUsageContextMixin) ctx; + } + + public BlockHitResult getHitResult() { + return getIUCAccessor().getHit(); + } + + public ItemUseOnBlockEvent toItemUseOnBlockEvent() { + return new ItemUseOnBlockEvent(getWorld().getRaw(), getPlayer().getPlayerEntity(), getHand(), ctx.getStack(), getHitResult()); + } + + public ItemPlacementContext getCtx() { + return ctx; + } + + public @Nullable Block getRawBlock() { + return block; + } + + public boolean isBlockExist() { + return block != null; + } + + public net.minecraft.block.BlockState getRawBlockState() { + return BlockStateUtil.getDefaultState(block); + } + + public BlockEntity getRawBlockEntity() { + return getWorld().getBlockEntity(getRawPos()); + } + + public BlockWrapper getBlock() { + return BlockWrapper.of(block); + } + + public , V extends T> net.minecraft.block.BlockState with(Property property, V value) { + if (block == null) + return null; + + return BlockStateUtil.with(BlockStateUtil.getDefaultState(block), property, value); + } + + @Override + public BlockState getBlockState() { + return BlockState.of(getRawBlockState()); + } + + public BlockEntityWrapper getBlockEntity() { + return getWorld().getBlockEntity(getPos()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/StateForNeighborUpdateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/StateForNeighborUpdateArgs.java new file mode 100644 index 000000000..5c39c24b7 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/StateForNeighborUpdateArgs.java @@ -0,0 +1,93 @@ +package net.pitan76.mcpitanlib.api.block.args.v2; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; +import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; + +public class StateForNeighborUpdateArgs implements BlockStatePropertyHolder { + public BlockState state; + public Direction direction; + public BlockState neighborState; + public WorldAccess world; + public BlockPos pos; + public BlockPos neighborPos; + public CompatRandom random; + + public StateForNeighborUpdateArgs(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + this.state = state; + this.direction = direction; + this.neighborState = neighborState; + this.world = world; + this.pos = pos; + this.neighborPos = neighborPos; + this.random = new CompatRandom(world.getRandom()); + } + + public Direction getDirection() { + return direction; + } + + public BlockState getRawNeighborState() { + return neighborState; + } + + public WorldView getRawWorld() { + return world; + } + + public BlockPos getRawPos() { + return pos; + } + + public BlockPos getRawNeighborPos() { + return neighborPos; + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getNeighborState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getRawNeighborState()); + } + + public net.pitan76.mcpitanlib.midohra.world.WorldView getWorld() { + return net.pitan76.mcpitanlib.midohra.world.WorldView.of(getRawWorld()); + } + + public IWorldView getWorldView() { + return getWorld(); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getRawPos()); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getNeighborPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getRawNeighborPos()); + } + + public CompatRandom getRandom() { + return random; + } + + public net.pitan76.mcpitanlib.midohra.world.tick.ScheduledTickView getTickView() { + return net.pitan76.mcpitanlib.midohra.world.tick.ScheduledTickView.of(world); + } + + @Override + public net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } + + public BlockEntityWrapper getBlockEntity() { + return getWorld().getBlockEntity(getPos()); + } + + public BlockEntity getRawBlockEntity() { + return world.getBlockEntity(pos); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index 2c81fedea..78e28e8bc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -4,12 +4,17 @@ import net.minecraft.block.BlockState; import net.minecraft.util.BlockRotation; import net.minecraft.util.math.Direction; +import net.minecraft.util.shape.VoxelShape; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; import net.pitan76.mcpitanlib.api.block.args.RotateArgs; import net.pitan76.mcpitanlib.api.block.args.SideInvisibleArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import org.jetbrains.annotations.Nullable; public class CompatBlock extends ExtendBlock { @@ -73,4 +78,34 @@ public net.pitan76.mcpitanlib.midohra.block.BlockState getDefaultMidohraState() public void setDefaultState(net.pitan76.mcpitanlib.midohra.block.BlockState state) { setNewDefaultState(state.toMinecraft()); } + + public @Nullable net.pitan76.mcpitanlib.midohra.block.BlockState getPlacementState(PlacementStateArgs args) { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(super.getPlacementState(args.ctx)); + } + + @Deprecated + @Override + public @Nullable BlockState getPlacementState(net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs args) { + return getPlacementState(new PlacementStateArgs(args.ctx)).toMinecraft(); + } + + public BlockState getStateForNeighborUpdate(StateForNeighborUpdateArgs args) { + return super.getStateForNeighborUpdate(args.state, args.direction, args.neighborState, args.world, args.pos, args.neighborPos); + } + + @Deprecated + @Override + public BlockState getStateForNeighborUpdate(net.pitan76.mcpitanlib.api.event.block.StateForNeighborUpdateArgs args) { + return getStateForNeighborUpdate(new StateForNeighborUpdateArgs(args.state, args.direction, args.neighborState, args.world, args.pos, args.neighborPos)); + } + + public VoxelShape getOutlineShape(OutlineShapeEvent e) { + return super.getOutlineShape(e.state.toMinecraft(), e.world.getRaw(), e.pos.toMinecraft(), e.context); + } + + @Deprecated + @Override + public VoxelShape getOutlineShape(net.pitan76.mcpitanlib.api.event.block.OutlineShapeEvent e) { + return getOutlineShape(new OutlineShapeEvent(e.state, e.world, e.pos, e.context)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java index 55b5f4d50..f6d29de43 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockUseEvent.java @@ -12,6 +12,9 @@ import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; public class BlockUseEvent extends BaseEvent { public BlockState state; @@ -99,4 +102,28 @@ public BlockEntity getBlockEntity() { public boolean isSneaking() { return player.isSneaking(); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public IWorldView getWorldView() { + return getMidohraWorld(); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(pos); + } + + public BlockWrapper getBlockWrapper() { + return BlockWrapper.of(state.getBlock()); + } + + public BlockEntityWrapper getBlockEntityWrapper() { + return BlockEntityWrapper.of(getBlockEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java index a314e2526..a3e2d0e08 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java @@ -7,6 +7,9 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; public class StateReplacedEvent extends BaseEvent { @@ -92,4 +95,28 @@ public boolean hasInventory() { public void updateComparators() { WorldUtil.updateComparators(getWorld(), getPos(), getState().getBlock()); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public IWorldView getWorldView() { + return getMidohraWorld(); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(pos); + } + + public BlockWrapper getBlockWrapper() { + return BlockWrapper.of(state.getBlock()); + } + + public BlockEntityWrapper getBlockEntityWrapper() { + return BlockEntityWrapper.of(getBlockEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java index 1fb17b585..da5d8d2f4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseEvent.java @@ -8,6 +8,9 @@ import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.StackActionResult; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; public class ItemUseEvent extends BaseEvent { @@ -96,4 +99,12 @@ public StackActionResult consume() { public boolean isSneaking() { return user.isSneaking(); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public IWorldView getWorldView() { + return getMidohraWorld(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java index 080663db9..0ac1977e8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemUseOnBlockEvent.java @@ -15,6 +15,9 @@ import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; import org.jetbrains.annotations.Nullable; public class ItemUseOnBlockEvent extends BaseEvent { @@ -110,4 +113,28 @@ public Vec3d getPos() { public Direction getSide() { return hit.getSide(); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public IWorldView getWorldView() { + return getMidohraWorld(); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getBlockState()); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getBlockPos()); + } + + public BlockWrapper getBlockWrapper() { + return getMidohraState().getBlock(); + } + + public BlockEntityWrapper getBlockEntityWrapper() { + return BlockEntityWrapper.of(getBlockEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index 44a3cb401..0909d60bf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -20,6 +20,7 @@ import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; import net.pitan76.mcpitanlib.api.util.block.BlockHitResultUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; public class BlockStateUtil { public static Block getBlock(BlockState state) { @@ -98,4 +99,12 @@ public static Fluid getFluid(BlockState state) { public static BlockState rotate(BlockState state, BlockRotation rotation) { return state.rotate(rotation); } + + public static net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraDefaultState(Block block) { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getDefaultState(block)); + } + + public static net.pitan76.mcpitanlib.midohra.block.BlockState getDefaultState(BlockWrapper block) { + return block.getDefaultState(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java index e56eb6057..5edcfb79b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.block.BlockState; +import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.tag.FluidTags; @@ -17,4 +18,12 @@ public static boolean isLava(FluidState state) { public static FluidState getFluidState(BlockState state) { return state.getFluidState(); } + + public static FluidState getDefaultState(Fluid state) { + return state.getDefaultState(); + } + + public static Fluid getFluid(FluidState state) { + return state.getFluid(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java index 278f1f370..2ab3e5dd1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidUtil.java @@ -4,6 +4,7 @@ import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.fluid.Fluids; +import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.world.WorldView; @@ -17,6 +18,10 @@ public static Fluid fromId(Identifier identifier) { return Registry.FLUID.get(identifier); } + public static Fluid fromId(CompatIdentifier identifier) { + return fromId(identifier.toMinecraft()); + } + public static int getRawId(Fluid fluid) { return Registry.FLUID.getRawId(fluid); } @@ -98,4 +103,7 @@ public static FluidState getDefaultState(Fluid fluid) { } + public static Item getBucketItem(Fluid fluid) { + return fluid.getBucketItem(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 4017f630c..154b768d7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -9,6 +9,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; import java.util.Objects; @@ -159,4 +160,8 @@ public static boolean isBreak(ItemStack stack) { return false; } + + public static ItemWrapper getItemWrapper(ItemStack stack) { + return ItemWrapper.of(stack.getItem()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/Midohra.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/Midohra.java new file mode 100644 index 000000000..ba5f4535e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/Midohra.java @@ -0,0 +1,160 @@ +package net.pitan76.mcpitanlib.midohra; + +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.fluid.FluidWrapper; +import net.pitan76.mcpitanlib.midohra.item.ItemGroupWrapper; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; +import net.pitan76.mcpitanlib.midohra.nbt.NbtCompound; +import net.pitan76.mcpitanlib.midohra.nbt.NbtElement; +import net.pitan76.mcpitanlib.midohra.nbt.NbtList; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.util.math.Direction; +import net.pitan76.mcpitanlib.midohra.world.*; + +import java.util.function.Supplier; + +public class Midohra { + + public static ItemWrapper of(Item item) { + return ItemWrapper.of(item); + } + + public static ItemGroupWrapper of(ItemGroup itemGroup) { + return ItemGroupWrapper.of(itemGroup); + } + public static BlockWrapper of(Block block) { + return BlockWrapper.of(block); + } + + public static SupplierBlockWrapper of(Supplier block) { + return SupplierBlockWrapper.of(block); + } + + public static SupplierBlockWrapper of(RegistryResult block) { + return SupplierBlockWrapper.of(block); + } + + public static BlockEntityWrapper of(BlockEntity blockEntity) { + return BlockEntityWrapper.of(blockEntity); + } + + public static FluidWrapper of(net.minecraft.fluid.Fluid fluid) { + return FluidWrapper.of(fluid); + } + + public static BlockState of(net.minecraft.block.BlockState state) { + return BlockState.of(state); + } + + public static NbtElement of(net.minecraft.nbt.NbtElement nbt) { + return NbtElement.of(nbt); + } + + public static NbtCompound of(net.minecraft.nbt.NbtCompound nbt) { + return NbtCompound.of(nbt); + } + + public static NbtList of(net.minecraft.nbt.NbtList nbt) { + return NbtList.of(nbt); + } + + public static BlockPos of(net.minecraft.util.math.BlockPos pos) { + return BlockPos.of(pos); + } + + public static Direction of(net.minecraft.util.math.Direction direction) { + return Direction.of(direction); + } + + public static World of(net.minecraft.world.World world) { + return World.of(world); + } + + public static WorldView of(net.minecraft.world.WorldView world) { + return WorldView.of(world); + } + + public static WorldAccess of(net.minecraft.world.WorldAccess world) { + return WorldAccess.of(world); + } + + public static BlockView of(net.minecraft.world.BlockView world) { + return BlockView.of(world); + } + + public static IWorldView asWV(net.minecraft.world.WorldView world) { + return of(world); + } + + public static IWorldView asWV(net.minecraft.world.BlockView world) { + return of(world); + } + + public static Item raw(ItemWrapper item) { + return item.get(); + } + + public static ItemGroup raw(ItemGroupWrapper itemGroup) { + return itemGroup.get(); + } + + public static Block raw(BlockWrapper block) { + return block.get(); + } + + public static BlockEntity raw(BlockEntityWrapper blockEntity) { + return blockEntity.get(); + } + + public static net.minecraft.fluid.Fluid raw(FluidWrapper fluid) { + return fluid.get(); + } + + public static net.minecraft.block.BlockState raw(BlockState state) { + return state.toMinecraft(); + } + + public static net.minecraft.nbt.NbtElement raw(NbtElement nbt) { + return nbt.toMinecraft(); + } + + public static net.minecraft.nbt.NbtCompound raw(NbtCompound nbt) { + return nbt.toMinecraft(); + } + + public static net.minecraft.nbt.NbtList raw(NbtList nbt) { + return nbt.toMinecraft(); + } + + public static net.minecraft.util.math.BlockPos raw(BlockPos pos) { + return pos.toMinecraft(); + } + + public static net.minecraft.util.math.Direction raw(Direction direction) { + return direction.toMinecraft(); + } + + public static net.minecraft.world.World raw(World world) { + return world.toMinecraft(); + } + + public static net.minecraft.world.WorldView raw(WorldView world) { + return world.toMinecraft(); + } + + public static net.minecraft.world.WorldAccess raw(WorldAccess world) { + return world.toMinecraft(); + } + + public static net.minecraft.world.BlockView raw(BlockView world) { + return world.toMinecraft(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java index 7440041bd..8cce5880f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java @@ -53,7 +53,6 @@ public String getName() { return getBlock().getName(); } - @Deprecated public net.minecraft.block.BlockState toMinecraft() { return state; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/SupplierBlockWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/SupplierBlockWrapper.java index 776e5664b..ba604f61b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/SupplierBlockWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/SupplierBlockWrapper.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.midohra.block; import net.minecraft.block.Block; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; import java.util.function.Supplier; @@ -15,6 +16,10 @@ public static SupplierBlockWrapper of(Supplier supplier) { return new SupplierBlockWrapper(supplier); } + public static SupplierBlockWrapper of(RegistryResult result) { + return new SupplierBlockWrapper(result::get); + } + @Override public Block get() { return supplier.get(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java new file mode 100644 index 000000000..fdd6bae88 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java @@ -0,0 +1,83 @@ +package net.pitan76.mcpitanlib.midohra.fluid; + +import net.minecraft.fluid.FluidState; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.FluidStateUtil; +import net.pitan76.mcpitanlib.api.util.FluidUtil; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; +import org.jetbrains.annotations.Nullable; + +public class FluidWrapper { + private final net.minecraft.fluid.Fluid fluid; + + protected FluidWrapper() { + this.fluid = null; + } + + protected FluidWrapper(net.minecraft.fluid.Fluid fluid) { + this.fluid = fluid; + } + + public static FluidWrapper of(net.minecraft.fluid.Fluid fluid) { + return new FluidWrapper(fluid); + } + + public static FluidWrapper of() { + return new FluidWrapper(); + } + + public static FluidWrapper of(CompatIdentifier id) { + if (FluidUtil.isExist(id)) + return of(FluidUtil.fromId(id)); + + return of(); + } + + public static FluidWrapper of(CompatIdentifier id, CompatIdentifier... ids) { + if (of(id).isExist()) return of(id); + + for (CompatIdentifier id1 : ids) { + if (of(id1).isExist()) + return of(id1); + } + + return of(); + } + + public boolean isExist() { + return !isEmpty(); + } + + public boolean isEmpty() { + return get() == null; + } + + @Nullable + public net.minecraft.fluid.Fluid get() { + return fluid; + } + + public net.minecraft.fluid.Fluid gerOrDefault(net.minecraft.fluid.Fluid defaultFluid) { + return isEmpty() ? defaultFluid : get(); + } + + public CompatIdentifier getId() { + if (isEmpty()) + return CompatIdentifier.empty(); + + return FluidUtil.toCompatId(get()); + } + + public String getName() { + if (isEmpty()) return ""; + return get().toString(); + } + + public FluidState getDefaultState() { + return FluidStateUtil.getDefaultState(get()); + } + + public ItemWrapper getBucketItem() { + return ItemWrapper.of(FluidUtil.getBucketItem(get())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/holder/BlockStatePropertyHolder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/holder/BlockStatePropertyHolder.java new file mode 100644 index 000000000..5b293897d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/holder/BlockStatePropertyHolder.java @@ -0,0 +1,24 @@ +package net.pitan76.mcpitanlib.midohra.holder; + +import net.pitan76.mcpitanlib.api.state.property.IProperty; +import net.pitan76.mcpitanlib.midohra.block.BlockState; + +public interface BlockStatePropertyHolder { + BlockState getBlockState(); + + default , V extends T> BlockState with(IProperty property, V value) { + return getBlockState().with(property, value); + } + + default boolean has(IProperty property) { + return getBlockState().contains(property); + } + + default > T get(IProperty property) { + return getBlockState().get(property); + } + + default > BlockState cycle(IProperty property) { + return getBlockState().cycle(property); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtCompound.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtCompound.java index 9b633984d..6615a06be 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtCompound.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtCompound.java @@ -130,7 +130,6 @@ public NbtElement get(String key) { return NbtElement.of(NbtUtil.getElement(nbt, key)); } - @Deprecated public net.minecraft.nbt.NbtCompound toMinecraft() { return nbt; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java index c75a79fa6..963356043 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java @@ -34,7 +34,6 @@ public String toString() { return nbt.toString(); } - @Deprecated public net.minecraft.nbt.NbtElement toMinecraft() { return nbt; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtList.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtList.java index b41c0aa6c..9881d8bdb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtList.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtList.java @@ -99,7 +99,6 @@ public String toString() { return nbtList.toString(); } - @Deprecated public net.minecraft.nbt.NbtList toMinecraft() { return nbtList; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java index 5211c0b87..e38beba46 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java @@ -29,7 +29,6 @@ public int getZ() { return blockPos.getZ(); } - @Deprecated public net.minecraft.util.math.BlockPos toMinecraft() { return blockPos; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java index 30965cd5a..9771fac1e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java @@ -35,7 +35,7 @@ public static Direction of(net.minecraft.util.math.Direction direction) { } public Direction getOpposite() { - switch (direction) { + switch (getRaw()) { case UP: return DOWN; case DOWN: @@ -53,44 +53,48 @@ public Direction getOpposite() { } } - public net.minecraft.util.math.Direction toMinecraft() { + public net.minecraft.util.math.Direction getRaw() { return direction; } + public net.minecraft.util.math.Direction toMinecraft() { + return getRaw(); + } + public boolean isHorizontal() { - return direction.getAxis().isHorizontal(); + return getRaw().getAxis().isHorizontal(); } public boolean isVertical() { - return direction.getAxis().isVertical(); + return getRaw().getAxis().isVertical(); } public boolean isPositive() { - return direction.getDirection() == net.minecraft.util.math.Direction.AxisDirection.POSITIVE; + return getRaw().getDirection() == net.minecraft.util.math.Direction.AxisDirection.POSITIVE; } public boolean isNegative() { - return direction.getDirection() == net.minecraft.util.math.Direction.AxisDirection.NEGATIVE; + return getRaw().getDirection() == net.minecraft.util.math.Direction.AxisDirection.NEGATIVE; } public int getOffsetX() { - return direction.getOffsetX(); + return getRaw().getOffsetX(); } public int getOffsetY() { - return direction.getOffsetY(); + return getRaw().getOffsetY(); } public int getOffsetZ() { - return direction.getOffsetZ(); + return getRaw().getOffsetZ(); } public Direction rotateYClockwise() { - return of(direction.rotateYClockwise()); + return of(getRaw().rotateYClockwise()); } public Direction rotateYCounterclockwise() { - return of(direction.rotateYCounterclockwise()); + return of(getRaw().rotateYCounterclockwise()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/BlockView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/BlockView.java new file mode 100644 index 000000000..60a94b216 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/BlockView.java @@ -0,0 +1,41 @@ +package net.pitan76.mcpitanlib.midohra.world; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.fluid.FluidState; +import net.minecraft.util.math.BlockPos; + +public class BlockView implements IWorldView { + private net.minecraft.world.BlockView blockView; + + public BlockView(net.minecraft.world.BlockView blockView) { + this.blockView = blockView; + } + + public static BlockView of(net.minecraft.world.BlockView blockView) { + return new BlockView(blockView); + } + + public net.minecraft.world.BlockView getRaw() { + return blockView; + } + + public net.minecraft.world.BlockView toMinecraft() { + return getRaw(); + } + + @Override + public BlockEntity getBlockEntity(BlockPos pos) { + return getRaw().getBlockEntity(pos); + } + + @Override + public BlockState getBlockState(BlockPos pos) { + return getRaw().getBlockState(pos); + } + + @Override + public FluidState getFluidState(BlockPos pos) { + return getRaw().getFluidState(pos); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/IWorldView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/IWorldView.java new file mode 100644 index 000000000..d520e0e3a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/IWorldView.java @@ -0,0 +1,23 @@ +package net.pitan76.mcpitanlib.midohra.world; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.fluid.FluidState; +import net.minecraft.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; + +public interface IWorldView { + BlockEntity getBlockEntity(BlockPos pos); + + BlockState getBlockState(BlockPos pos); + + FluidState getFluidState(BlockPos pos); + + default BlockEntityWrapper getBlockEntity(net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { + return BlockEntityWrapper.of(getBlockEntity(pos.toMinecraft())); + } + + default net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState(net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getBlockState(pos.toMinecraft())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java index a8d8f4b46..fb6d3c5ca 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java @@ -22,17 +22,17 @@ protected World(net.minecraft.world.World world) { this.world = world; } - @Override - public net.minecraft.world.World getWorld() { - return world; - } - public static World of(net.minecraft.world.World world) { return new World(world); } + @Override + public net.minecraft.world.World getRaw() { + return world; + } + public net.minecraft.world.World toMinecraft() { - return getWorld(); + return getRaw(); } public void addBlockEntity(BlockEntityWrapper blockEntity) { @@ -40,51 +40,51 @@ public void addBlockEntity(BlockEntityWrapper blockEntity) { } public void addBlockEntity(BlockEntity blockEntity) { - getWorld().addBlockEntity(blockEntity); + getRaw().addBlockEntity(blockEntity); } public void removeBlockEntity(BlockPos pos) { - getWorld().removeBlockEntity(pos.toMinecraft()); + getRaw().removeBlockEntity(pos.toMinecraft()); } public long getTime() { - return WorldUtil.getTime(getWorld()); + return WorldUtil.getTime(getRaw()); } public long getTopY() { - return WorldUtil.getTopY(getWorld()); + return WorldUtil.getTopY(getRaw()); } public long getBottomY() { - return WorldUtil.getBottomY(getWorld()); + return WorldUtil.getBottomY(getRaw()); } public long getDimensionHeight() { - return WorldUtil.getDimensionHeight(getWorld()); + return WorldUtil.getDimensionHeight(getRaw()); } public CompatIdentifier getId() { - return WorldUtil.getCompatWorldId(getWorld()); + return WorldUtil.getCompatWorldId(getRaw()); } public FluidState getRawFluidState(BlockPos pos) { - return WorldUtil.getFluidState(getWorld(), pos.toMinecraft()); + return WorldUtil.getFluidState(getRaw(), pos.toMinecraft()); } public Player getPlayerByUUID(UUID uuid) { - return WorldUtil.getPlayer(getWorld(), uuid); + return WorldUtil.getPlayer(getRaw(), uuid); } public List getPlayers() { - return WorldUtil.getPlayers(getWorld()); + return WorldUtil.getPlayers(getRaw()); } public BlockPos getSpawnPos() { - return BlockPos.of(WorldUtil.getSpawnPos(getWorld())); + return BlockPos.of(WorldUtil.getSpawnPos(getRaw())); } public Optional getWorld(CompatIdentifier id) { - Optional optional = WorldUtil.getWorld(getWorld(), id); + Optional optional = WorldUtil.getWorld(getRaw(), id); return optional.map(World::of); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java index 2ac2ef97c..e4f320e4a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java @@ -18,10 +18,11 @@ import java.util.Optional; -public class WorldAccess { +public class WorldAccess extends WorldView { private final net.minecraft.world.WorldAccess world; protected WorldAccess(net.minecraft.world.WorldAccess world) { + super(null); this.world = world; } @@ -29,16 +30,17 @@ public static WorldAccess of(net.minecraft.world.WorldAccess world) { return new WorldAccess(world); } - protected net.minecraft.world.WorldAccess getWorld() { + @Override + protected net.minecraft.world.WorldAccess getRaw() { return world; } public net.minecraft.world.WorldAccess toMinecraft() { - return getWorld(); + return getRaw(); } public boolean isClient() { - return WorldAccessUtil.isClient(getWorld()); + return WorldAccessUtil.isClient(getRaw()); } public boolean isServer() { @@ -46,62 +48,62 @@ public boolean isServer() { } public CompatRandom getRandom() { - return new CompatRandom(getWorld().getRandom()); + return new CompatRandom(getRaw().getRandom()); } public MinecraftServer getServer() { - return WorldAccessUtil.getServer(getWorld()); + return WorldAccessUtil.getServer(getRaw()); } public BlockEntityWrapper getBlockEntity(BlockPos pos) { - return BlockEntityWrapper.of(WorldAccessUtil.getBlockEntity(getWorld(), pos.toMinecraft())); + return BlockEntityWrapper.of(WorldAccessUtil.getBlockEntity(getRaw(), pos.toMinecraft())); } public Optional getRawBlockEntity(BlockPos pos, BlockEntityType type) { - return WorldAccessUtil.getBlockEntity(getWorld(), pos.toMinecraft(), type); + return WorldAccessUtil.getBlockEntity(getRaw(), pos.toMinecraft(), type); } public BlockEntityWrapper getBlockEntity(BlockPos pos, BlockEntityType type) { - Optional blockEntity = WorldAccessUtil.getBlockEntity(getWorld(), pos.toMinecraft(), type); + Optional blockEntity = WorldAccessUtil.getBlockEntity(getRaw(), pos.toMinecraft(), type); return blockEntity.map(BlockEntityWrapper::of).orElse(BlockEntityWrapper.of()); } public boolean removeBlock(BlockPos pos, boolean move) { - return WorldAccessUtil.removeBlock(getWorld(), pos.toMinecraft(), move); + return WorldAccessUtil.removeBlock(getRaw(), pos.toMinecraft(), move); } public boolean breakBlock(BlockPos pos, boolean drop) { - return WorldAccessUtil.breakBlock(getWorld(), pos.toMinecraft(), drop); + return WorldAccessUtil.breakBlock(getRaw(), pos.toMinecraft(), drop); } public boolean breakBlock(BlockPos pos, boolean drop, Entity entity) { - return WorldAccessUtil.breakBlock(getWorld(), pos.toMinecraft(), drop, entity); + return WorldAccessUtil.breakBlock(getRaw(), pos.toMinecraft(), drop, entity); } public BlockState getBlockState(BlockPos pos) { - return BlockState.of(WorldAccessUtil.getBlockState(getWorld(), pos.toMinecraft())); + return BlockState.of(WorldAccessUtil.getBlockState(getRaw(), pos.toMinecraft())); } public boolean setBlockState(BlockPos pos, BlockState state, int flags) { - return WorldAccessUtil.setBlockState(getWorld(), pos.toMinecraft(), state.toMinecraft(), flags); + return WorldAccessUtil.setBlockState(getRaw(), pos.toMinecraft(), state.toMinecraft(), flags); } public boolean setBlockState(BlockPos pos, BlockState state, int flags, int maxUpdateDepth) { - return WorldAccessUtil.setBlockState(getWorld(), pos.toMinecraft(), state.toMinecraft(), flags, maxUpdateDepth); + return WorldAccessUtil.setBlockState(getRaw(), pos.toMinecraft(), state.toMinecraft(), flags, maxUpdateDepth); } public boolean setBlockState(BlockPos pos, BlockState state) { - return WorldAccessUtil.setBlockState(getWorld(), pos.toMinecraft(), state.toMinecraft()); + return WorldAccessUtil.setBlockState(getRaw(), pos.toMinecraft(), state.toMinecraft()); } @Deprecated public void playSound(PlayerEntity playerEntity, net.minecraft.util.math.BlockPos pos, SoundEvent sound, SoundCategory category, float volume, float pitch) { - getWorld().playSound(playerEntity, pos, sound, category, volume, pitch); + getRaw().playSound(playerEntity, pos, sound, category, volume, pitch); } @Deprecated public void playSound(PlayerEntity playerEntity, net.minecraft.util.math.BlockPos pos, SoundEvent sound, SoundCategory category) { - getWorld().playSound(playerEntity, pos, sound, category, 1f, 1f); + playSound(playerEntity, pos, sound, category, 1.0F, 1.0F); } public void playSound(Player player, BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java new file mode 100644 index 000000000..2488905b3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java @@ -0,0 +1,66 @@ +package net.pitan76.mcpitanlib.midohra.world; + +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.fluid.FluidState; +import net.pitan76.mcpitanlib.api.util.world.WorldAccessUtil; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; + +import java.util.Optional; + +public class WorldView implements IWorldView { + private final net.minecraft.world.WorldView world; + + protected WorldView(net.minecraft.world.WorldView world) { + this.world = world; + } + + public static WorldView of(net.minecraft.world.WorldView world) { + return new WorldView(world); + } + + protected net.minecraft.world.WorldView getRaw() { + return world; + } + + public net.minecraft.world.WorldView toMinecraft() { + return getRaw(); + } + + public boolean isClient() { + return WorldAccessUtil.isClient(getRaw()); + } + + public boolean isServer() { + return !isClient(); + } + + public BlockEntityWrapper getBlockEntity(BlockPos pos) { + return BlockEntityWrapper.of(WorldAccessUtil.getBlockEntity(getRaw(), pos.toMinecraft())); + } + + public Optional getRawBlockEntity(BlockPos pos, BlockEntityType type) { + return WorldAccessUtil.getBlockEntity(getRaw(), pos.toMinecraft(), type); + } + + public BlockEntityWrapper getBlockEntity(BlockPos pos, BlockEntityType type) { + Optional blockEntity = WorldAccessUtil.getBlockEntity(getRaw(), pos.toMinecraft(), type); + return blockEntity.map(BlockEntityWrapper::of).orElse(BlockEntityWrapper.of()); + } + + @Override + public BlockEntity getBlockEntity(net.minecraft.util.math.BlockPos pos) { + return getRaw().getBlockEntity(pos); + } + + @Override + public net.minecraft.block.BlockState getBlockState(net.minecraft.util.math.BlockPos pos) { + return getRaw().getBlockState(pos); + } + + @Override + public FluidState getFluidState(net.minecraft.util.math.BlockPos pos) { + return getRaw().getFluidState(pos); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/tick/ScheduledTickView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/tick/ScheduledTickView.java new file mode 100644 index 000000000..4ef371240 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/tick/ScheduledTickView.java @@ -0,0 +1,48 @@ +package net.pitan76.mcpitanlib.midohra.world.tick; + +import net.minecraft.block.Block; +import net.minecraft.fluid.Fluid; +import net.minecraft.world.WorldAccess; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.fluid.FluidWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; + +public class ScheduledTickView { + private final WorldAccess scheduledTickView; + + public ScheduledTickView(WorldAccess scheduledTickView) { + this.scheduledTickView = scheduledTickView; + } + + public static net.pitan76.mcpitanlib.midohra.world.tick.ScheduledTickView of(net.minecraft.world.World world) { + return of((WorldAccess) world); + } + + public static net.pitan76.mcpitanlib.midohra.world.tick.ScheduledTickView of(WorldAccess world) { + return new net.pitan76.mcpitanlib.midohra.world.tick.ScheduledTickView(world); + } + + public WorldAccess toMinecraft() { + return get(); + } + + protected WorldAccess get() { + return scheduledTickView; + } + + public void scheduleBlockTick(BlockPos blockPos, BlockWrapper blockWrapper, int delay) { + scheduleBlockTick(blockPos.toMinecraft(), blockWrapper.get(), delay); + } + + public void scheduleBlockTick(net.minecraft.util.math.BlockPos blockPos, Block block, int delay) { + get().createAndScheduleBlockTick(blockPos, block, delay); + } + + public void scheduleFluidTick(BlockPos blockPos, FluidWrapper fluidWrapper, int delay) { + scheduleFluidTick(blockPos.toMinecraft(), fluidWrapper.get(), delay); + } + + public void scheduleFluidTick(net.minecraft.util.math.BlockPos blockPos, Fluid block, int delay) { + get().createAndScheduleFluidTick(blockPos, block, delay); + } +} diff --git a/info.properties b/info.properties index 96a80533e..abd1371a1 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.4 +mod_version=3.0.5 maven_group=net.pitan76 changelog=Fix APIs \ No newline at end of file From d40b1e92c171166e0c1f9ac986e9bf2f605b9654 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 16 Nov 2024 14:34:25 +0900 Subject: [PATCH 405/617] fix midohera api --- .../block/args/v2/CollisionShapeEvent.java | 64 +++++++++++++++++++ .../mcpitanlib/api/block/v2/CompatBlock.java | 38 +++++++++-- .../mcpitanlib/api/util/WorldUtil.java | 44 +++++++++++++ .../mcpitanlib/api/util/math/PosUtil.java | 11 ++++ .../midohra/util/math/Direction.java | 12 ++-- .../mcpitanlib/midohra/world/World.java | 9 +++ info.properties | 2 +- 7 files changed, 168 insertions(+), 12 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CollisionShapeEvent.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CollisionShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CollisionShapeEvent.java new file mode 100644 index 000000000..469cb56a7 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CollisionShapeEvent.java @@ -0,0 +1,64 @@ +package net.pitan76.mcpitanlib.api.block.args.v2; + +import net.minecraft.block.ShapeContext; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.Item; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.BlockView; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; + +public class CollisionShapeEvent extends BaseEvent implements BlockStatePropertyHolder { + public BlockState state; + public BlockView world; + public BlockPos pos; + public ShapeContext context; + + public CollisionShapeEvent(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + this.state = state; + this.world = world; + this.pos = pos; + this.context = context; + } + + public CollisionShapeEvent(net.minecraft.block.BlockState state, net.minecraft.world.BlockView world, net.minecraft.util.math.BlockPos pos, ShapeContext context) { + this(BlockState.of(state), BlockView.of(world), BlockPos.of(pos), context); + } + + @Override + public BlockState getBlockState() { + return state; + } + + public BlockEntityWrapper getBlockEntity() { + return world.getBlockEntity(pos); + } + + public BlockEntity getRawBlockEntity() { + return getBlockEntity().get(); + } + + public IWorldView getWorldView() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public ShapeContext getContext() { + return context; + } + + public boolean isHolding(Item item) { + return getContext().isHolding(item); + } + + public boolean isHolding(ItemWrapper item) { + return isHolding(item.get()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index 78e28e8bc..84d75fd65 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -2,9 +2,15 @@ import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; +import net.minecraft.item.ItemPlacementContext; import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; +import net.minecraft.util.math.random.Random; import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.minecraft.world.WorldView; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; @@ -13,6 +19,8 @@ import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; +import net.pitan76.mcpitanlib.api.event.block.CollisionShapeEvent; +import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import org.jetbrains.annotations.Nullable; @@ -83,29 +91,49 @@ public void setDefaultState(net.pitan76.mcpitanlib.midohra.block.BlockState stat return net.pitan76.mcpitanlib.midohra.block.BlockState.of(super.getPlacementState(args.ctx)); } + @Override + public @Nullable BlockState getPlacementState(ItemPlacementContext ctx) { + return getPlacementState(new PlacementStateArgs(ctx)).toMinecraft(); + } + @Deprecated @Override public @Nullable BlockState getPlacementState(net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs args) { - return getPlacementState(new PlacementStateArgs(args.ctx)).toMinecraft(); + return super.getPlacementState(args); } - public BlockState getStateForNeighborUpdate(StateForNeighborUpdateArgs args) { - return super.getStateForNeighborUpdate(args.state, args.direction, args.neighborState, args.world, args.pos, args.neighborPos); + public net.pitan76.mcpitanlib.midohra.block.BlockState getStateForNeighborUpdate(StateForNeighborUpdateArgs args) { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(super.getStateForNeighborUpdate(args.state, args.world, args.tickView, args.pos, args.direction, args.neighborPos, args.neighborState, args.random.getMcRandom())); + } + + @Override + public BlockState getStateForNeighborUpdate(BlockState state, WorldView world, ScheduledTickView tickView, BlockPos pos, Direction direction, BlockPos neighborPos, BlockState neighborState, Random random) { + return getStateForNeighborUpdate(new StateForNeighborUpdateArgs(state, direction, neighborState, world, pos, neighborPos, tickView, new CompatRandom(random))).toMinecraft(); } @Deprecated @Override public BlockState getStateForNeighborUpdate(net.pitan76.mcpitanlib.api.event.block.StateForNeighborUpdateArgs args) { - return getStateForNeighborUpdate(new StateForNeighborUpdateArgs(args.state, args.direction, args.neighborState, args.world, args.pos, args.neighborPos)); + return super.getStateForNeighborUpdate((args)); } public VoxelShape getOutlineShape(OutlineShapeEvent e) { return super.getOutlineShape(e.state.toMinecraft(), e.world.getRaw(), e.pos.toMinecraft(), e.context); } + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return getOutlineShape(new OutlineShapeEvent(state, world, pos, context)); + } + @Deprecated @Override public VoxelShape getOutlineShape(net.pitan76.mcpitanlib.api.event.block.OutlineShapeEvent e) { - return getOutlineShape(new OutlineShapeEvent(e.state, e.world, e.pos, e.context)); + return super.getOutlineShape(e); + } + + @Override + public VoxelShape getCollisionShape(CollisionShapeEvent e) { + return super.getCollisionShape(e); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 93b238a9a..2345c15b3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -302,4 +302,48 @@ public static void spawnParticles(World world, ParticleEffect parameters, double public static void updateListeners(World world, BlockPos pos, BlockState oldState, BlockState newState, int flags) { world.updateListeners(pos, oldState, newState, flags); } + + public static net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraBlockState(World world, BlockPos pos) { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getBlockState(world, pos)); + } + + public static boolean setBlockState(World world, BlockPos pos, net.pitan76.mcpitanlib.midohra.block.BlockState state, int flags) { + return setBlockState(world, pos, state.toMinecraft(), flags); + } + + public static boolean setBlockState(World world, BlockPos pos, net.pitan76.mcpitanlib.midohra.block.BlockState state) { + return setBlockState(world, pos, state, 3); + } + + public static boolean setBlockState(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, net.pitan76.mcpitanlib.midohra.block.BlockState state, int flags) { + return setBlockState(world, pos.toMinecraft(), state.toMinecraft(), flags); + } + + public static boolean setBlockState(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, net.pitan76.mcpitanlib.midohra.block.BlockState state) { + return setBlockState(world, pos, state, 3); + } + + public static boolean breakBlock(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, boolean drop) { + return breakBlock(world, pos.toMinecraft(), drop); + } + + public static boolean breakBlock(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { + return breakBlock(world, pos, true); + } + + public static boolean breakBlock(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, boolean drop, @Nullable Player player) { + return breakBlock(world, pos.toMinecraft(), drop, player); + } + + public static boolean breakBlock(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, @Nullable Player player) { + return breakBlock(world, pos, true, player); + } + + public static void removeBlockEntity(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { + removeBlockEntity(world, pos.toMinecraft()); + } + + public static boolean removeBlock(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, boolean move) { + return removeBlock(world, pos.toMinecraft(), move); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java index 1c3e51f97..5967a3204 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java @@ -17,6 +17,17 @@ public static BlockPos flooredBlockPos(Vec3d pos) { return new BlockPos(pos); } + public static net.pitan76.mcpitanlib.midohra.util.math.BlockPos midohraBlockPos(int x, int y, int z) { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(x, y, z); + } + + public static net.pitan76.mcpitanlib.midohra.util.math.BlockPos flooredMidohraBlockPos(double x, double y, double z) { + int x1 = (int) Math.floor(x); + int y1 = (int) Math.floor(y); + int z1 = (int) Math.floor(z); + return midohraBlockPos(x1, y1, z1); + } + public static double getSquaredDistance(BlockPos pos1, BlockPos pos2) { return pos1.getSquaredDistance(pos2); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java index 9771fac1e..2ae99c417 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java @@ -2,12 +2,12 @@ public class Direction { - public static final Direction UP = of(net.minecraft.util.math.Direction.UP); - public static final Direction DOWN = of(net.minecraft.util.math.Direction.DOWN); - public static final Direction NORTH = of(net.minecraft.util.math.Direction.NORTH); - public static final Direction SOUTH = of(net.minecraft.util.math.Direction.SOUTH); - public static final Direction EAST = of(net.minecraft.util.math.Direction.EAST); - public static final Direction WEST = of(net.minecraft.util.math.Direction.WEST); + public static final Direction UP = new Direction(net.minecraft.util.math.Direction.UP); + public static final Direction DOWN = new Direction(net.minecraft.util.math.Direction.DOWN); + public static final Direction NORTH = new Direction(net.minecraft.util.math.Direction.NORTH); + public static final Direction SOUTH = new Direction(net.minecraft.util.math.Direction.SOUTH); + public static final Direction EAST = new Direction(net.minecraft.util.math.Direction.EAST); + public static final Direction WEST = new Direction(net.minecraft.util.math.Direction.WEST); private final net.minecraft.util.math.Direction direction; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java index fb6d3c5ca..2aa84bc27 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.midohra.world; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.Entity; import net.minecraft.fluid.FluidState; import net.minecraft.server.world.ServerWorld; import net.pitan76.mcpitanlib.api.entity.Player; @@ -87,4 +88,12 @@ public Optional getWorld(CompatIdentifier id) { Optional optional = WorldUtil.getWorld(getRaw(), id); return optional.map(World::of); } + + public void spawnEntity(Entity entity) { + WorldUtil.spawnEntity(getRaw(), entity); + } + + public void spawnStack(net.minecraft.item.ItemStack stack, BlockPos pos) { + WorldUtil.spawnStack(getRaw(), pos.toMinecraft(), stack); + } } diff --git a/info.properties b/info.properties index abd1371a1..12059f3a1 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.5 +mod_version=3.0.6 maven_group=net.pitan76 changelog=Fix APIs \ No newline at end of file From 21101f721b35b75dcec9d4cb1e58bfa966c51bf9 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 16 Nov 2024 14:34:25 +0900 Subject: [PATCH 406/617] fix APIs --- .../block/args/v2/CollisionShapeEvent.java | 53 +---------- .../mcpitanlib/api/block/v2/CompatBlock.java | 21 +++-- .../api/event/block/BlockBreakEvent.java | 27 ++++++ .../api/event/block/BlockPlacedEvent.java | 27 ++++++ .../api/event/block/ItemScattererUtil.java | 12 +++ .../api/state/property/IProperty.java | 4 + .../BlockWithBlockEntityBuilder.java | 76 ++++++++++++++++ .../easybuilder/BuiltBlockWithEntity.java | 34 +++++++ .../holder/BlockStatePropertyHolder.java | 11 +++ .../midohra/util/math/BlockPos.java | 5 +- .../midohra/util/math/v0/BlockPos.java | 90 +++++++++++++++++++ info.properties | 2 +- 12 files changed, 305 insertions(+), 57 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlockWithEntity.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/v0/BlockPos.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CollisionShapeEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CollisionShapeEvent.java index 469cb56a7..a5544b4db 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CollisionShapeEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CollisionShapeEvent.java @@ -1,64 +1,17 @@ package net.pitan76.mcpitanlib.api.block.args.v2; import net.minecraft.block.ShapeContext; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.item.Item; -import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.midohra.block.BlockState; -import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; -import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; -import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; import net.pitan76.mcpitanlib.midohra.world.BlockView; -import net.pitan76.mcpitanlib.midohra.world.IWorldView; -public class CollisionShapeEvent extends BaseEvent implements BlockStatePropertyHolder { - public BlockState state; - public BlockView world; - public BlockPos pos; - public ShapeContext context; +public class CollisionShapeEvent extends OutlineShapeEvent { public CollisionShapeEvent(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { - this.state = state; - this.world = world; - this.pos = pos; - this.context = context; + super(state, world, pos, context); } public CollisionShapeEvent(net.minecraft.block.BlockState state, net.minecraft.world.BlockView world, net.minecraft.util.math.BlockPos pos, ShapeContext context) { - this(BlockState.of(state), BlockView.of(world), BlockPos.of(pos), context); - } - - @Override - public BlockState getBlockState() { - return state; - } - - public BlockEntityWrapper getBlockEntity() { - return world.getBlockEntity(pos); - } - - public BlockEntity getRawBlockEntity() { - return getBlockEntity().get(); - } - - public IWorldView getWorldView() { - return world; - } - - public BlockPos getPos() { - return pos; - } - - public ShapeContext getContext() { - return context; - } - - public boolean isHolding(Item item) { - return getContext().isHolding(item); - } - - public boolean isHolding(ItemWrapper item) { - return isHolding(item.get()); + super(BlockState.of(state), BlockView.of(world), BlockPos.of(pos), context); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index 84d75fd65..1080833a0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -16,10 +16,10 @@ import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; import net.pitan76.mcpitanlib.api.block.args.RotateArgs; import net.pitan76.mcpitanlib.api.block.args.SideInvisibleArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.CollisionShapeEvent; import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; -import net.pitan76.mcpitanlib.api.event.block.CollisionShapeEvent; import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import org.jetbrains.annotations.Nullable; @@ -54,11 +54,11 @@ public CompatBlockRenderType getRenderType(RenderTypeArgs args) { @Override @Deprecated public BlockState rotate(BlockState state, BlockRotation rotation) { - return rotate(new RotateArgs(state, rotation)); + return rotate(new RotateArgs(state, rotation)).toMinecraft(); } - public BlockState rotate(RotateArgs args) { - return super.rotate(args.state, args.rotation); + public net.pitan76.mcpitanlib.midohra.block.BlockState rotate(RotateArgs args) { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(super.rotate(args.state, args.rotation)); } @Override @@ -132,8 +132,19 @@ public VoxelShape getOutlineShape(net.pitan76.mcpitanlib.api.event.block.Outline return super.getOutlineShape(e); } - @Override public VoxelShape getCollisionShape(CollisionShapeEvent e) { + return super.getCollisionShape(e.state.toMinecraft(), e.world.getRaw(), e.pos.toMinecraft(), e.context); + } + + @Deprecated + @Override + public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return getCollisionShape(new CollisionShapeEvent(state, world, pos, context)); + } + + @Deprecated + @Override + public VoxelShape getCollisionShape(net.pitan76.mcpitanlib.api.event.block.CollisionShapeEvent e) { return super.getCollisionShape(e); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java index 47c330fb5..a5351d2aa 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockBreakEvent.java @@ -8,6 +8,9 @@ import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; public class BlockBreakEvent extends BaseEvent { public World world; @@ -49,4 +52,28 @@ public boolean isClient() { public BlockEntity getBlockEntity() { return WorldUtil.getBlockEntity(getWorld(), getPos()); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public IWorldView getWorldView() { + return getMidohraWorld(); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(pos); + } + + public BlockWrapper getBlockWrapper() { + return BlockWrapper.of(state.getBlock()); + } + + public BlockEntityWrapper getBlockEntityWrapper() { + return BlockEntityWrapper.of(getBlockEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java index 639d95761..c0b365e0a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockPlacedEvent.java @@ -8,6 +8,9 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; public class BlockPlacedEvent extends BaseEvent { @@ -52,4 +55,28 @@ public boolean isClient() { public BlockEntity getBlockEntity() { return WorldUtil.getBlockEntity(getWorld(), getPos()); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public IWorldView getWorldView() { + return getMidohraWorld(); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(pos); + } + + public BlockWrapper getBlockWrapper() { + return BlockWrapper.of(state.getBlock()); + } + + public BlockEntityWrapper getBlockEntityWrapper() { + return BlockEntityWrapper.of(getBlockEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java index 597be5645..d22d9f680 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/ItemScattererUtil.java @@ -41,4 +41,16 @@ public static void onStateReplaced(BlockState state, BlockState newState, World WorldUtil.updateComparators(world, pos, state.getBlock()); } } + + public static void spawn(net.pitan76.mcpitanlib.midohra.world.World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, ItemStack stack) { + spawn(world.getRaw(), pos.toMinecraft(), stack); + } + + public static void spawn(net.pitan76.mcpitanlib.midohra.world.World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, DefaultedList stacks) { + spawn(world.getRaw(), pos.toMinecraft(), stacks); + } + + public static void spawn(net.pitan76.mcpitanlib.midohra.world.World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, Inventory inventory) { + spawn(world.getRaw(), pos.toMinecraft(), inventory); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java index 3fb738dd5..549d2708e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java @@ -25,5 +25,9 @@ default BlockState cycle(BlockState state) { return state.cycle(getProperty()); } + default String getName() { + return getProperty().getName(); + } + Property getProperty(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java new file mode 100644 index 000000000..651b16a5c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java @@ -0,0 +1,76 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder; + +import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.block.v2.BlockSettingsBuilder; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.util.BlockEntityTypeUtil; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; + +import java.util.function.Supplier; + +public class BlockWithBlockEntityBuilder extends BlockBuilder { + + public BlockEntityType blockEntityType; + + public BlockWithBlockEntityBuilder(BlockSettingsBuilder settingsBuilder) { + super(settingsBuilder); + } + + public BlockWithBlockEntityBuilder(CompatIdentifier id) { + super(id); + } + + public BlockWithBlockEntityBuilder(BlockSettingsBuilder settingsBuilder, BlockEntityType blockEntityType) { + super(settingsBuilder); + this.blockEntityType = blockEntityType; + } + + public BlockWithBlockEntityBuilder(CompatIdentifier id, BlockEntityType blockEntityType) { + super(id); + this.blockEntityType = blockEntityType; + } + + @Override + public SupplierBlockWrapper build(CompatRegistryV2 registry) { + if (settingsBuilder.id == null) + throw new IllegalStateException("Block id is not set. hint: use build(CompatRegistryV2, CompatIdentifier)"); + + Supplier result = registry.registerExtendBlock(settingsBuilder.id, () -> new BuiltBlockWithEntity(this)); + + return SupplierBlockWrapper.of(result::get); + } + + @Override + public SupplierBlockWrapper build(CompatRegistryV2 registry, CompatIdentifier id) { + Supplier result = registry.registerExtendBlock(id, () -> new BuiltBlockWithEntity(this, id)); + + return SupplierBlockWrapper.of(result::get); + } + + public static BlockWithBlockEntityBuilder of(CompatIdentifier id) { + return new BlockWithBlockEntityBuilder(id); + } + + public static BlockWithBlockEntityBuilder of(BlockSettingsBuilder settingsBuilder) { + return new BlockWithBlockEntityBuilder(settingsBuilder); + } + + public static BlockWithBlockEntityBuilder of(CompatIdentifier id, BlockEntityType blockEntityType) { + return new BlockWithBlockEntityBuilder(id, blockEntityType); + } + + public static BlockWithBlockEntityBuilder of(BlockSettingsBuilder settingsBuilder, BlockEntityType blockEntityType) { + return new BlockWithBlockEntityBuilder(settingsBuilder, blockEntityType); + } + + public BlockBuilder applyBlockEntity(BlockEntityType blockEntityType) { + this.blockEntityType = blockEntityType; + return this; + } + + public BlockBuilder applyBlockEntity(CompatIdentifier id) { + return applyBlockEntity(BlockEntityTypeUtil.fromId(id)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlockWithEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlockWithEntity.java new file mode 100644 index 000000000..d82ae53ff --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlockWithEntity.java @@ -0,0 +1,34 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder; + +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.api.block.ExtendBlockEntityProvider; +import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import org.jetbrains.annotations.Nullable; + +public class BuiltBlockWithEntity extends BuiltBlock implements ExtendBlockEntityProvider { + + public BlockEntityType blockEntityType; + + public BuiltBlockWithEntity(CompatibleBlockSettings settings) { + super(settings); + } + + public BuiltBlockWithEntity(BlockWithBlockEntityBuilder builder) { + super(builder); + + this.blockEntityType = builder.blockEntityType; + } + + public BuiltBlockWithEntity(BlockWithBlockEntityBuilder builder, CompatIdentifier id) { + super(builder, id); + + this.blockEntityType = builder.blockEntityType; + } + + @Override + public @Nullable BlockEntityType getBlockEntityType() { + return (BlockEntityType) blockEntityType; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/holder/BlockStatePropertyHolder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/holder/BlockStatePropertyHolder.java index 5b293897d..9601ef3d1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/holder/BlockStatePropertyHolder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/holder/BlockStatePropertyHolder.java @@ -1,7 +1,9 @@ package net.pitan76.mcpitanlib.midohra.holder; +import net.pitan76.mcpitanlib.api.state.property.DirectionProperty; import net.pitan76.mcpitanlib.api.state.property.IProperty; import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.util.math.Direction; public interface BlockStatePropertyHolder { BlockState getBlockState(); @@ -21,4 +23,13 @@ default > T get(IProperty property) { default > BlockState cycle(IProperty property) { return getBlockState().cycle(property); } + + // DirectionProperty + default BlockState with(DirectionProperty property, Direction value) { + return with(property, value.toMinecraft()); + } + + default Direction get(DirectionProperty property) { + return Direction.of(get((IProperty) property)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java index e38beba46..613874f7f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java @@ -77,4 +77,7 @@ public BlockPos offset(Direction direction, int amount) { return new BlockPos(blockPos.offset(direction.toMinecraft(), amount)); } -} + public BlockPos offset(Direction direction) { + return new BlockPos(blockPos.offset(direction.toMinecraft())); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/v0/BlockPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/v0/BlockPos.java new file mode 100644 index 000000000..fb0f6d0c3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/v0/BlockPos.java @@ -0,0 +1,90 @@ +package net.pitan76.mcpitanlib.midohra.util.math.v0; + +import net.minecraft.util.math.Vec3i; +import net.pitan76.mcpitanlib.midohra.util.math.Direction; + +public class BlockPos extends net.minecraft.util.math.BlockPos { + private final net.minecraft.util.math.BlockPos blockPos; + + protected BlockPos(net.minecraft.util.math.BlockPos blockPos) { + super(blockPos.getX(), blockPos.getY(), blockPos.getZ()); + this.blockPos = blockPos; + } + + public static BlockPos of(net.minecraft.util.math.BlockPos blockPos) { + return new BlockPos(blockPos); + } + + public static BlockPos of(int x, int y, int z) { + return new BlockPos(new net.minecraft.util.math.BlockPos(x, y, z)); + } + + public int getX() { + return blockPos.getX(); + } + + public int getY() { + return blockPos.getY(); + } + + public int getZ() { + return blockPos.getZ(); + } + + public net.minecraft.util.math.BlockPos toMinecraft() { + return blockPos; + } + + public BlockPos add(int x, int y, int z) { + return new BlockPos(blockPos.add(x, y, z)); + } + + public BlockPos add(BlockPos pos) { + return new BlockPos(blockPos.add(pos.blockPos)); + } + + public BlockPos subtract(int x, int y, int z) { + return new BlockPos(blockPos.subtract(new Vec3i(x, y, z))); + } + + public BlockPos subtract(BlockPos pos) { + return new BlockPos(blockPos.subtract(pos.blockPos)); + } + + public BlockPos up() { + return new BlockPos(blockPos.up()); + } + + public BlockPos down() { + return new BlockPos(blockPos.down()); + } + + public BlockPos north() { + return new BlockPos(blockPos.north()); + } + + public BlockPos south() { + return new BlockPos(blockPos.south()); + } + + public BlockPos east() { + return new BlockPos(blockPos.east()); + } + + public BlockPos west() { + return new BlockPos(blockPos.west()); + } + + public BlockPos offset(Direction direction, int amount) { + return new BlockPos(blockPos.offset(direction.toMinecraft(), amount)); + } + + public BlockPos offset(Direction direction) { + return new BlockPos(blockPos.offset(direction.toMinecraft())); + } + + @Override + public BlockPos add(Vec3i vec3i) { + return new BlockPos(blockPos.add(vec3i)); + } +} diff --git a/info.properties b/info.properties index 12059f3a1..fc981490e 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.6 +mod_version=3.0.7 maven_group=net.pitan76 changelog=Fix APIs \ No newline at end of file From 3d374707a4122869b44186780fa25bac461ded16 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 16 Nov 2024 22:31:11 +0900 Subject: [PATCH 407/617] 1211 --- .../pitan76/mcpitanlib/api/block/v2/CompatBlock.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index 1080833a0..e28b5d6fe 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -7,10 +7,9 @@ import net.minecraft.util.BlockRotation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -import net.minecraft.util.math.random.Random; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; -import net.minecraft.world.WorldView; +import net.minecraft.world.WorldAccess; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; @@ -20,7 +19,6 @@ import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; -import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import org.jetbrains.annotations.Nullable; @@ -103,12 +101,12 @@ public void setDefaultState(net.pitan76.mcpitanlib.midohra.block.BlockState stat } public net.pitan76.mcpitanlib.midohra.block.BlockState getStateForNeighborUpdate(StateForNeighborUpdateArgs args) { - return net.pitan76.mcpitanlib.midohra.block.BlockState.of(super.getStateForNeighborUpdate(args.state, args.world, args.tickView, args.pos, args.direction, args.neighborPos, args.neighborState, args.random.getMcRandom())); + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(super.getStateForNeighborUpdate(args.state, args.direction, args.neighborState, args.world, args.pos, args.neighborPos)); } @Override - public BlockState getStateForNeighborUpdate(BlockState state, WorldView world, ScheduledTickView tickView, BlockPos pos, Direction direction, BlockPos neighborPos, BlockState neighborState, Random random) { - return getStateForNeighborUpdate(new StateForNeighborUpdateArgs(state, direction, neighborState, world, pos, neighborPos, tickView, new CompatRandom(random))).toMinecraft(); + protected BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + return getStateForNeighborUpdate(new StateForNeighborUpdateArgs(state, direction, neighborState, world, pos, neighborPos)).toMinecraft(); } @Deprecated From 6585413a0015677bb59a8a1830df80219f9b2916 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 16 Nov 2024 22:36:57 +0900 Subject: [PATCH 408/617] 1204 --- .../java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index e28b5d6fe..b9aa1e366 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -105,7 +105,7 @@ public net.pitan76.mcpitanlib.midohra.block.BlockState getStateForNeighborUpdate } @Override - protected BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { return getStateForNeighborUpdate(new StateForNeighborUpdateArgs(state, direction, neighborState, world, pos, neighborPos)).toMinecraft(); } From cc4d14d09cb600e1e95ef092ffa6346a9370a25e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:46:07 +0900 Subject: [PATCH 409/617] add APIs --- .../util/inventory/CompatPlayerInventory.java | 42 +++++++++++++++++++ .../util/inventory/PlayerInventoryUtil.java | 4 ++ info.properties | 2 +- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatPlayerInventory.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatPlayerInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatPlayerInventory.java new file mode 100644 index 000000000..9f9ab0730 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatPlayerInventory.java @@ -0,0 +1,42 @@ +package net.pitan76.mcpitanlib.api.util.inventory; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.entity.Player; + +public class CompatPlayerInventory { + public PlayerInventory inv; + + public CompatPlayerInventory(PlayerInventory inv) { + this.inv = inv; + } + + public Player getPlayer() { + return PlayerInventoryUtil.getPlayer(inv); + } + + public int getSelectedSlot() { + return PlayerInventoryUtil.getSelectedSlot(inv); + } + + public void setSelectedSlot(int slot) { + PlayerInventoryUtil.setSelectedSlot(inv, slot); + } + + public void dropAllItems() { + PlayerInventoryUtil.dropAllItems(inv); + } + + public void offerOrDrop(ItemStack stack) { + inv.offerOrDrop(stack); + } + + public void offerOrDrop(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + offerOrDrop(stack.toMinecraft()); + } + + public PlayerInventory getRaw() { + return inv; + } +} + diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java index 689d156d4..d446a9d55 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java @@ -15,4 +15,8 @@ public static int getSelectedSlot(PlayerInventory playerInventory) { public static void setSelectedSlot(PlayerInventory playerInventory, int slot) { playerInventory.selectedSlot = slot; } + + public static void dropAllItems(PlayerInventory inv) { + inv.dropAll(); + } } diff --git a/info.properties b/info.properties index fc981490e..1222fc7ab 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.7 +mod_version=3.0.8 maven_group=net.pitan76 changelog=Fix APIs \ No newline at end of file From 6bd8c68aca2097391b160556a8fede82bbbc75f5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 23 Nov 2024 23:16:34 +0900 Subject: [PATCH 410/617] add APIs --- .../mcpitanlib/api/util/WorldUtil.java | 4 + .../api/util/collection/ItemStackList.java | 133 +++++++++++++++ .../midohra/block/BlockWrapper.java | 4 + .../midohra/fluid/FluidWrapper.java | 4 + .../mcpitanlib/midohra/fluid/Fluids.java | 9 + .../midohra/item/ItemGroupWrapper.java | 4 + .../mcpitanlib/midohra/item/ItemStack.java | 4 +- .../mcpitanlib/midohra/item/ItemWrapper.java | 4 + .../midohra/recipe/CraftingRecipe.java | 54 ++++++ .../mcpitanlib/midohra/recipe/Ingredient.java | 95 +++++++++++ .../mcpitanlib/midohra/recipe/Recipe.java | 92 ++++++++++ .../midohra/recipe/RecipeManager.java | 21 +++ .../mcpitanlib/midohra/recipe/RecipeType.java | 57 +++++++ .../midohra/recipe/ServerRecipeManager.java | 157 ++++++++++++++++++ .../midohra/recipe/ShapedRecipe.java | 45 +++++ .../midohra/recipe/ShapelessRecipe.java | 37 +++++ .../recipe/entry/CraftingRecipeEntry.java | 55 ++++++ .../midohra/recipe/entry/RecipeEntry.java | 87 ++++++++++ .../recipe/entry/ShapedRecipeEntry.java | 55 ++++++ .../recipe/entry/ShapelessRecipeEntry.java | 55 ++++++ .../input/CraftingRecipeInputOrInventory.java | 67 ++++++++ .../recipe/input/RecipeInputOrInventory.java | 80 +++++++++ .../input/TypedRecipeInputOrInventory.java | 56 +++++++ .../mcpitanlib/midohra/server/MCServer.java | 89 ++++++++++ .../midohra/server/PlayerManager.java | 152 +++++++++++++++++ .../midohra/util/math/BlockPos.java | 4 + .../midohra/util/math/ChunkPos.java | 154 +++++++++++++++++ .../mcpitanlib/midohra/world/ServerWorld.java | 63 +++++++ .../mcpitanlib/midohra/world/World.java | 42 +++++ .../midohra/world/chunk/ChunkManager.java | 41 +++++ .../midohra/world/chunk/ChunkTicketType.java | 58 +++++++ .../world/chunk/ServerChunkManager.java | 45 +++++ info.properties | 4 +- 33 files changed, 1827 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/Fluids.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Ingredient.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeManager.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/CraftingRecipeInputOrInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/TypedRecipeInputOrInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/server/PlayerManager.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkManager.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ServerChunkManager.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 2345c15b3..135341c9d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -346,4 +346,8 @@ public static void removeBlockEntity(World world, net.pitan76.mcpitanlib.midohra public static boolean removeBlock(World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, boolean move) { return removeBlock(world, pos.toMinecraft(), move); } + + public static void playSound(net.pitan76.mcpitanlib.midohra.world.World world, @Nullable Player player, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch) { + playSound(world.getRaw(), player, pos.toMinecraft(), sound, category, volume, pitch); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java index 3e2f4a341..cf2c0fc8a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java @@ -7,8 +7,10 @@ import net.pitan76.mcpitanlib.api.gui.inventory.IInventory; import net.pitan76.mcpitanlib.api.util.ItemStackUtil; import org.apache.commons.lang3.Validate; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -70,4 +72,135 @@ public static ItemStackList of(DefaultedList defaultedList) { return stacks; } + + public static ItemStackList of(ItemStack stack) { + return ItemStackList.ofSize(1, stack); + } + + // Midohra + public List toMidohra() { + List stacks = new ArrayList<>(); + for (ItemStack stack : this) { + stacks.add(net.pitan76.mcpitanlib.midohra.item.ItemStack.of(stack)); + } + + return stacks; + } + + public @NotNull net.pitan76.mcpitanlib.midohra.item.ItemStack getAsMidohra(int index) { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(get(index)); + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getFirstAsMidohra() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getFirst()); + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getLastAsMidohra() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getLast()); + } + + public boolean add(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return add(stack.toMinecraft()); + } + + public boolean addAll(List stacks) { + boolean changed = false; + for (net.pitan76.mcpitanlib.midohra.item.ItemStack stack : stacks) { + changed |= add(stack); + } + + return changed; + } + + public boolean addAll(net.pitan76.mcpitanlib.midohra.item.ItemStack... stacks) { + return addAll(Arrays.asList(stacks)); + } + + public boolean remove(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return remove(stack.toMinecraft()); + } + + public boolean removeAll(List stacks) { + boolean changed = false; + for (net.pitan76.mcpitanlib.midohra.item.ItemStack stack : stacks) { + changed |= remove(stack); + } + + return changed; + } + + public boolean removeAll(net.pitan76.mcpitanlib.midohra.item.ItemStack... stacks) { + return removeAll(Arrays.asList(stacks)); + } + + public boolean contains(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return contains(stack.toMinecraft()); + } + + public boolean containsAll(List stacks) { + for (net.pitan76.mcpitanlib.midohra.item.ItemStack stack : stacks) { + if (!contains(stack)) { + return false; + } + } + + return true; + } + + public boolean containsAll(net.pitan76.mcpitanlib.midohra.item.ItemStack... stacks) { + return containsAll(Arrays.asList(stacks)); + } + + public boolean containsAny(List stacks) { + for (net.pitan76.mcpitanlib.midohra.item.ItemStack stack : stacks) { + if (contains(stack)) { + return true; + } + } + + return false; + } + + public boolean containsAny(net.pitan76.mcpitanlib.midohra.item.ItemStack... stacks) { + return containsAny(Arrays.asList(stacks)); + } + + public boolean equals(List stacks) { + if (size() != stacks.size()) { + return false; + } + + for (int i = 0; i < size(); i++) { + if (!get(i).equals(stacks.get(i).toMinecraft())) { + return false; + } + } + + return true; + } + + public boolean equals(net.pitan76.mcpitanlib.midohra.item.ItemStack... stacks) { + return equals(Arrays.asList(stacks)); + } + + public static ItemStackList of(List stacks) { + ItemStackList list = ItemStackList.ofSize(stacks.size()); + for (int i = 0; i < stacks.size(); i++) { + list.set(i, stacks.get(i).toMinecraft()); + } + + return list; + } + + public static ItemStackList of(net.pitan76.mcpitanlib.midohra.item.ItemStack... stacks) { + return ItemStackList.of(Arrays.asList(stacks)); + } + + public static ItemStackList of(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + return of(stack, 1); + } + + public static ItemStackList of(net.pitan76.mcpitanlib.midohra.item.ItemStack stack, int size) { + return ItemStackList.ofSize(size, stack.toMinecraft()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java index 06df6ce68..b75bc3ad4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java @@ -86,4 +86,8 @@ public ItemWrapper asItem() { public BlockState getDefaultState() { return BlockState.of(get()); } + + public boolean rawEquals(BlockWrapper block) { + return get() == block.get(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java index fdd6bae88..387ecd2f5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java @@ -80,4 +80,8 @@ public FluidState getDefaultState() { public ItemWrapper getBucketItem() { return ItemWrapper.of(FluidUtil.getBucketItem(get())); } + + public boolean rawEquals(FluidWrapper fluid) { + return get() == fluid.get(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/Fluids.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/Fluids.java new file mode 100644 index 000000000..15a200faa --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/Fluids.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.midohra.fluid; + +public class Fluids { + public static final FluidWrapper EMPTY = FluidWrapper.of(net.minecraft.fluid.Fluids.EMPTY); + public static final FluidWrapper WATER = FluidWrapper.of(net.minecraft.fluid.Fluids.WATER); + public static final FluidWrapper LAVA = FluidWrapper.of(net.minecraft.fluid.Fluids.LAVA); + public static final FluidWrapper FLOWING_WATER = FluidWrapper.of(net.minecraft.fluid.Fluids.FLOWING_WATER); + public static final FluidWrapper FLOWING_LAVA = FluidWrapper.of(net.minecraft.fluid.Fluids.FLOWING_LAVA); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java index fe6a0f5b8..8bab1ef4c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java @@ -50,4 +50,8 @@ public ItemStack getIcon() { if (isEmpty()) return ItemStack.EMPTY; return ItemStack.of(itemGroup.getIcon()); } + + public boolean rawEquals(ItemGroupWrapper other) { + return itemGroup == other.itemGroup; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java index fcdbd2ce6..578ff2a38 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java @@ -11,14 +11,14 @@ public class ItemStack { private final net.minecraft.item.ItemStack stack; - public static final ItemStack EMPTY = of(ItemStackUtil.empty()); + public static final ItemStack EMPTY = new ItemStack(ItemStackUtil.empty()); protected ItemStack(net.minecraft.item.ItemStack stack) { this.stack = stack; } public static ItemStack of(net.minecraft.item.ItemStack stack) { - if (stack == null) + if (stack == null || stack.isEmpty()) return EMPTY; return new ItemStack(stack); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java index 69fe742c2..7b648b1ea 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java @@ -104,4 +104,8 @@ public BlockWrapper asBlock() { return BlockWrapper.of(((net.minecraft.item.BlockItem) get()).getBlock()); } + + public boolean rawEquals(ItemWrapper item) { + return get() == item.get(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java new file mode 100644 index 000000000..4c60082d4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java @@ -0,0 +1,54 @@ +package net.pitan76.mcpitanlib.midohra.recipe; + +import net.minecraft.recipe.book.CraftingRecipeCategory; +import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; +import net.pitan76.mcpitanlib.midohra.item.ItemStack; +import net.pitan76.mcpitanlib.midohra.recipe.input.CraftingRecipeInputOrInventory; +import net.pitan76.mcpitanlib.midohra.world.World; + +public class CraftingRecipe extends Recipe { + private final net.minecraft.recipe.CraftingRecipe recipe; + + protected CraftingRecipe(net.minecraft.recipe.CraftingRecipe recipe) { + super(null); + this.recipe = recipe; + } + + public static CraftingRecipe of(net.minecraft.recipe.CraftingRecipe recipe) { + return new CraftingRecipe(recipe); + } + + public net.minecraft.recipe.CraftingRecipe getRaw() { + return recipe; + } + + public net.minecraft.recipe.CraftingRecipe toMinecraft() { + return getRaw(); + } + + public CraftingRecipeCategory getRawCategory() { + return getRaw().getCategory(); + } + + public boolean matches(CraftingRecipeInputOrInventory input, World world) { + return getRaw().matches(input.getRaw(), world.getRaw()); + } + + public net.minecraft.item.ItemStack craft(CraftingRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { + return getRaw().craft(input.getRaw(), registryLookup.getRegistryLookup()); + } + + public ItemStack craftMidohra(CraftingRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { + return ItemStack.of(craft(input, registryLookup)); + } + + public DefaultedList getRecipeRemaindersDefaultedList(CraftingRecipeInputOrInventory input) { + return getRaw().getRecipeRemainders(input.getRaw()); + } + + public ItemStackList getRecipeRemainders(CraftingRecipeInputOrInventory input) { + return ItemStackList.of(getRecipeRemaindersDefaultedList(input)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Ingredient.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Ingredient.java new file mode 100644 index 000000000..9b72bb7f5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Ingredient.java @@ -0,0 +1,95 @@ +package net.pitan76.mcpitanlib.midohra.recipe; + +import net.minecraft.item.Item; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.IngredientUtil; +import net.pitan76.mcpitanlib.midohra.item.ItemStack; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; + +import java.util.ArrayList; +import java.util.List; + +public class Ingredient { + private final net.minecraft.recipe.Ingredient ingredient; + + protected Ingredient(net.minecraft.recipe.Ingredient ingredient) { + this.ingredient = ingredient; + } + + public static Ingredient of(net.minecraft.recipe.Ingredient ingredient) { + return new Ingredient(ingredient); + } + + public static Ingredient ofItems(Item... items) { + return of(net.minecraft.recipe.Ingredient.ofItems(items)); + } + + public static Ingredient ofItem(Item items) { + return of(net.minecraft.recipe.Ingredient.ofItem(items)); + } + + public static Ingredient fromTagById(CompatIdentifier id) { + return of(IngredientUtil.fromTagByIdentifier(id)); + } + + public static Ingredient fromTagByString(String id) { + return of(IngredientUtil.fromTagByString(id)); + } + + public net.minecraft.recipe.Ingredient getRaw() { + return ingredient; + } + + public net.minecraft.recipe.Ingredient toMinecraft() { + return getRaw(); + } + + public boolean test(net.minecraft.item.ItemStack stack) { + return ingredient.test(stack); + } + + public boolean equals(Ingredient other) { + return ingredient.equals(other.getRaw()); + } + + public List getMatchingItems() { + return IngredientUtil.getItems(ingredient); + } + + public it.unimi.dsi.fastutil.ints.IntList getMatchingStacksIds() { + return IngredientUtil.getMatchingStacksIds(ingredient); + } + + public List getMatchingStacksAsList() { + return IngredientUtil.getMatchingStacksAsList(ingredient); + } + + public net.minecraft.item.ItemStack[] getMatchingStacks() { + return IngredientUtil.getMatchingStacks(ingredient); + } + + public List getMatchingItemWrappers() { + List wrappers = new ArrayList<>(); + + for (Item item : getMatchingItems()) { + wrappers.add(ItemWrapper.of(item)); + } + + return wrappers; + } + + public List getMatchingStacksAsMidohraList() { + List stacks = new ArrayList<>(); + + for (net.minecraft.item.ItemStack stack : getMatchingStacksAsList()) { + stacks.add(ItemStack.of(stack)); + } + + return stacks; + } + + public ItemStack[] getMatchingStacksAsMidohra() { + List stacks = getMatchingStacksAsMidohraList(); + return stacks.toArray(new ItemStack[0]); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java new file mode 100644 index 000000000..acb8fc4fd --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java @@ -0,0 +1,92 @@ +package net.pitan76.mcpitanlib.midohra.recipe; + +import net.minecraft.recipe.Ingredient; +import net.minecraft.recipe.RecipeSerializer; +import net.minecraft.recipe.input.RecipeInput; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.midohra.item.ItemStack; +import net.pitan76.mcpitanlib.midohra.recipe.input.RecipeInputOrInventory; +import net.pitan76.mcpitanlib.midohra.recipe.input.TypedRecipeInputOrInventory; +import net.pitan76.mcpitanlib.midohra.world.World; + +import java.util.List; + +public class Recipe { + private final net.minecraft.recipe.Recipe recipe; + + protected Recipe(net.minecraft.recipe.Recipe recipe) { + this.recipe = recipe; + } + + public static Recipe of(net.minecraft.recipe.Recipe recipe) { + return new Recipe(recipe); + } + + public static CraftingRecipe of(net.minecraft.recipe.CraftingRecipe recipe) { + return new CraftingRecipe(recipe); + } + + public static ShapedRecipe of(net.minecraft.recipe.ShapedRecipe recipe) { + return new ShapedRecipe(recipe); + } + + public static ShapelessRecipe of(net.minecraft.recipe.ShapelessRecipe recipe) { + return new ShapelessRecipe(recipe); + } + + public net.minecraft.recipe.Recipe getRaw() { + return recipe; + } + + public net.minecraft.recipe.Recipe toMinecraft() { + return getRaw(); + } + + public RecipeSerializer getRawSerializer() { + return recipe.getSerializer(); + } + + public boolean matches(RecipeInputOrInventory input, World world) { + if (input instanceof TypedRecipeInputOrInventory) { + return matches((TypedRecipeInputOrInventory) input, world); + } + + return false; + } + + public net.minecraft.item.ItemStack craft(RecipeInputOrInventory input, CompatRegistryLookup registryLookup) { + if (input instanceof TypedRecipeInputOrInventory) { + return craft((TypedRecipeInputOrInventory) input, registryLookup); + } + + return net.minecraft.item.ItemStack.EMPTY; + } + + public ItemStack craftMidohra(RecipeInputOrInventory input, CompatRegistryLookup registryLookup) { + return ItemStack.of(craft(input, registryLookup)); + } + + public boolean matches(TypedRecipeInputOrInventory input, World world) { + return ((net.minecraft.recipe.Recipe)getRaw()).matches(input.getRecipeInput(), world.getRaw()); + } + + public net.minecraft.item.ItemStack craft(TypedRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { + return ((net.minecraft.recipe.Recipe)getRaw()).craft(input.getRecipeInput(), registryLookup.getRegistryLookup()); + } + + public ItemStack craftMidohra(TypedRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { + return ItemStack.of(craft(input, registryLookup)); + } + + public String getGroup() { + return getRaw().getGroup(); + } + + public RecipeType getType() { + return RecipeType.of(getRaw().getType()); + } + + public List getInputs() { + return getRaw().getIngredientPlacement().getIngredients(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeManager.java new file mode 100644 index 000000000..5b039fe10 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeManager.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.midohra.recipe; + +public class RecipeManager { + private final net.minecraft.recipe.RecipeManager recipeManager; + + protected RecipeManager(net.minecraft.recipe.RecipeManager recipeManager) { + this.recipeManager = recipeManager; + } + + public static RecipeManager of(net.minecraft.recipe.RecipeManager recipeManager) { + return new RecipeManager(recipeManager); + } + + public net.minecraft.recipe.RecipeManager getRaw() { + return recipeManager; + } + + public net.minecraft.recipe.RecipeManager toMinecraft() { + return getRaw(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java new file mode 100644 index 000000000..f8163934b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java @@ -0,0 +1,57 @@ +package net.pitan76.mcpitanlib.midohra.recipe; + +import net.minecraft.registry.Registries; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class RecipeType { + private final net.minecraft.recipe.RecipeType recipeType; + + public static RecipeType CRAFTING = new RecipeType(net.minecraft.recipe.RecipeType.CRAFTING); + public static RecipeType SMELTING = new RecipeType(net.minecraft.recipe.RecipeType.SMELTING); + public static RecipeType BLASTING = new RecipeType(net.minecraft.recipe.RecipeType.BLASTING); + public static RecipeType SMOKING = new RecipeType(net.minecraft.recipe.RecipeType.SMOKING); + public static RecipeType CAMPFIRE_COOKING = new RecipeType(net.minecraft.recipe.RecipeType.CAMPFIRE_COOKING); + public static RecipeType STONECUTTING = new RecipeType(net.minecraft.recipe.RecipeType.STONECUTTING); + public static RecipeType SMITHING = new RecipeType(net.minecraft.recipe.RecipeType.SMITHING); + + protected RecipeType(net.minecraft.recipe.RecipeType recipeType) { + this.recipeType = recipeType; + } + + public static RecipeType of(net.minecraft.recipe.RecipeType recipeType) { + if (recipeType == net.minecraft.recipe.RecipeType.CRAFTING) { + return CRAFTING; + } else if (recipeType == net.minecraft.recipe.RecipeType.SMELTING) { + return SMELTING; + } else if (recipeType == net.minecraft.recipe.RecipeType.BLASTING) { + return BLASTING; + } else if (recipeType == net.minecraft.recipe.RecipeType.SMOKING) { + return SMOKING; + } else if (recipeType == net.minecraft.recipe.RecipeType.CAMPFIRE_COOKING) { + return CAMPFIRE_COOKING; + } else if (recipeType == net.minecraft.recipe.RecipeType.STONECUTTING) { + return STONECUTTING; + } else if (recipeType == net.minecraft.recipe.RecipeType.SMITHING) { + return SMITHING; + } + + return new RecipeType(recipeType); + } + + public static RecipeType of(CompatIdentifier id) { + return of(Registries.RECIPE_TYPE.get(id.toMinecraft())); + } + + public net.minecraft.recipe.RecipeType getRaw() { + return recipeType; + } + + public net.minecraft.recipe.RecipeType toMinecraft() { + return getRaw(); + } + + public CompatIdentifier getId() { + return CompatIdentifier.fromMinecraft(Registries.RECIPE_TYPE.getId(recipeType)); + } + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java new file mode 100644 index 000000000..29ebedd43 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java @@ -0,0 +1,157 @@ +package net.pitan76.mcpitanlib.midohra.recipe; + +import net.pitan76.mcpitanlib.midohra.recipe.entry.CraftingRecipeEntry; +import net.pitan76.mcpitanlib.midohra.recipe.entry.RecipeEntry; +import net.pitan76.mcpitanlib.midohra.recipe.entry.ShapedRecipeEntry; +import net.pitan76.mcpitanlib.midohra.recipe.entry.ShapelessRecipeEntry; +import net.pitan76.mcpitanlib.midohra.world.ServerWorld; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class ServerRecipeManager extends RecipeManager { + private net.minecraft.recipe.ServerRecipeManager serverRecipeManager; + + protected ServerRecipeManager(net.minecraft.recipe.ServerRecipeManager serverRecipeManager) { + super(null); + this.serverRecipeManager = serverRecipeManager; + } + + public static ServerRecipeManager of(net.minecraft.recipe.ServerRecipeManager serverRecipeManager) { + return new ServerRecipeManager(serverRecipeManager); + } + + public static ServerRecipeManager of(net.minecraft.server.world.ServerWorld world) { + return of(world.getRecipeManager()); + } + + public static ServerRecipeManager of(ServerWorld world) { + return of(world.getRaw()); + } + + @Override + public net.minecraft.recipe.ServerRecipeManager getRaw() { + return serverRecipeManager; + } + + @Override + public net.minecraft.recipe.ServerRecipeManager toMinecraft() { + return getRaw(); + } + + @Deprecated + public Collection> getRawRecipes() { + return serverRecipeManager.values(); + } + + public Collection getRecipeEntries() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + recipes.add(RecipeEntry.of(recipe)); + } + + return recipes; + } + + public Collection getCraftingRecipeEntries() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + if (recipe.value() instanceof net.minecraft.recipe.CraftingRecipe) { + recipes.add(CraftingRecipeEntry.of(recipe)); + } + } + + return recipes; + } + + public Collection getShapelessRecipeEntries() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { + recipes.add(ShapelessRecipeEntry.of(recipe)); + } + } + + return recipes; + } + + public Collection getShapedRecipeEntries() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { + recipes.add(ShapedRecipeEntry.of(recipe)); + } + } + + return recipes; + } + + public Collection getNormalRecipeEntries() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { + recipes.add(ShapelessRecipeEntry.of(recipe)); + } else if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { + recipes.add(ShapedRecipeEntry.of(recipe)); + } + } + + return recipes; + } + + public Collection getRecipes() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + recipes.add(Recipe.of(recipe.value())); + } + + return recipes; + } + + public Collection getCraftingRecipes() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + if (recipe.value() instanceof net.minecraft.recipe.CraftingRecipe) { + recipes.add(CraftingRecipe.of((net.minecraft.recipe.CraftingRecipe) recipe.value())); + } + } + + return recipes; + } + + public Collection getShapelessRecipes() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { + recipes.add(ShapelessRecipe.of((net.minecraft.recipe.ShapelessRecipe) recipe.value())); + } + } + + return recipes; + } + + public Collection getShapedRecipes() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { + recipes.add(ShapedRecipe.of((net.minecraft.recipe.ShapedRecipe) recipe.value())); + } + } + + return recipes; + } + + public Collection getNormalRecipes() { + List recipes = new ArrayList<>(); + for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { + recipes.add(ShapelessRecipe.of((net.minecraft.recipe.ShapelessRecipe) recipe.value())); + } else if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { + recipes.add(ShapedRecipe.of((net.minecraft.recipe.ShapedRecipe) recipe.value())); + } + } + + return recipes; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java new file mode 100644 index 000000000..b2c9a2adf --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java @@ -0,0 +1,45 @@ +package net.pitan76.mcpitanlib.midohra.recipe; + +import net.pitan76.mcpitanlib.midohra.item.ItemStack; +import net.pitan76.mcpitanlib.midohra.recipe.input.CraftingRecipeInputOrInventory; + +public class ShapedRecipe extends CraftingRecipe { + private final net.minecraft.recipe.ShapedRecipe recipe; + + protected ShapedRecipe(net.minecraft.recipe.ShapedRecipe recipe) { + super(null); + this.recipe = recipe; + } + + public static ShapedRecipe of(net.minecraft.recipe.ShapedRecipe recipe) { + return new ShapedRecipe(recipe); + } + + public net.minecraft.recipe.ShapedRecipe getRaw() { + return recipe; + } + + public net.minecraft.recipe.ShapedRecipe toMinecraft() { + return getRaw(); + } + + public boolean matches(CraftingRecipeInputOrInventory input) { + return getRaw().matches(input.getRaw(), null); + } + + public net.minecraft.item.ItemStack craft() { + return getRaw().craft(null, null); + } + + public ItemStack craftMidohra() { + return ItemStack.of(craft()); + } + + public int getWidth() { + return getRaw().getWidth(); + } + + public int getHeight() { + return getRaw().getHeight(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java new file mode 100644 index 000000000..373faf623 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java @@ -0,0 +1,37 @@ +package net.pitan76.mcpitanlib.midohra.recipe; + +import net.pitan76.mcpitanlib.midohra.item.ItemStack; +import net.pitan76.mcpitanlib.midohra.recipe.input.CraftingRecipeInputOrInventory; + +public class ShapelessRecipe extends CraftingRecipe { + private final net.minecraft.recipe.ShapelessRecipe recipe; + + protected ShapelessRecipe(net.minecraft.recipe.ShapelessRecipe recipe) { + super(null); + this.recipe = recipe; + } + + public static ShapelessRecipe of(net.minecraft.recipe.ShapelessRecipe recipe) { + return new ShapelessRecipe(recipe); + } + + public net.minecraft.recipe.ShapelessRecipe getRaw() { + return recipe; + } + + public net.minecraft.recipe.ShapelessRecipe toMinecraft() { + return getRaw(); + } + + public boolean matches(CraftingRecipeInputOrInventory input) { + return getRaw().matches(input.getRaw(), null); + } + + public net.minecraft.item.ItemStack craft() { + return getRaw().craft(null, null); + } + + public ItemStack craftMidohra() { + return ItemStack.of(craft()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java new file mode 100644 index 000000000..6dff1c145 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java @@ -0,0 +1,55 @@ +package net.pitan76.mcpitanlib.midohra.recipe.entry; + +import net.minecraft.recipe.Recipe; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.recipe.CraftingRecipe; + +public class CraftingRecipeEntry extends RecipeEntry { + private final net.minecraft.recipe.RecipeEntry recipeEntry; + + protected CraftingRecipeEntry(net.minecraft.recipe.RecipeEntry recipeEntry) { + super(null); + this.recipeEntry = recipeEntry; + } + + public static CraftingRecipeEntry _of(net.minecraft.recipe.RecipeEntry recipeEntry) { + return new CraftingRecipeEntry(recipeEntry); + } + + public static CraftingRecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { + return _of((net.minecraft.recipe.RecipeEntry) recipeEntry); + } + + public static CraftingRecipeEntry of(net.minecraft.recipe.CraftingRecipe recipe, CompatIdentifier id) { + RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, id.toMinecraft()); + net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(key, recipe); + + return of(recipeEntry); + } + + public static CraftingRecipeEntry of(CraftingRecipe recipe, CompatIdentifier id) { + return of(recipe.toMinecraft(), id); + } + + @Override + public net.minecraft.recipe.RecipeEntry getRaw() { + return recipeEntry; + } + + @Override + public net.minecraft.recipe.RecipeEntry toMinecraft() { + return getRaw(); + } + + @Override + public CraftingRecipe getRecipe() { + return CraftingRecipe.of(getRawRecipe()); + } + + @Override + public net.minecraft.recipe.CraftingRecipe getRawRecipe() { + return getRaw().value(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java new file mode 100644 index 000000000..9e7814374 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java @@ -0,0 +1,87 @@ +package net.pitan76.mcpitanlib.midohra.recipe.entry; + +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeEntry; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.recipe.CraftingRecipe; +import net.pitan76.mcpitanlib.midohra.recipe.Recipe; +import net.pitan76.mcpitanlib.midohra.recipe.RecipeType; + +public class RecipeEntry { + private final net.minecraft.recipe.RecipeEntry recipeEntry; + + protected RecipeEntry(net.minecraft.recipe.RecipeEntry recipeEntry) { + this.recipeEntry = recipeEntry; + } + + public static RecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { + return new RecipeEntry(recipeEntry); + } + + public static RecipeEntry of(net.minecraft.recipe.Recipe recipe, CompatIdentifier id) { + RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, id.toMinecraft()); + net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(key, recipe); + return of(recipeEntry); + } + + public static RecipeEntry of(Recipe recipe, CompatIdentifier id) { + return of(recipe.toMinecraft(), id); + } + + public static CraftingRecipeEntry of(net.minecraft.recipe.CraftingRecipe recipe, CompatIdentifier id) { + return CraftingRecipeEntry.of(recipe, id); + } + + public static CraftingRecipeEntry of(CraftingRecipe recipe, CompatIdentifier id) { + return CraftingRecipeEntry.of(recipe, id); + } + + public static ShapedRecipeEntry of(net.minecraft.recipe.ShapedRecipe recipe, CompatIdentifier id) { + return ShapedRecipeEntry.of(recipe, id); + } + + public static ShapedRecipeEntry of(net.pitan76.mcpitanlib.midohra.recipe.ShapedRecipe recipe, CompatIdentifier id) { + return ShapedRecipeEntry.of(recipe, id); + } + + public static ShapelessRecipeEntry of(net.minecraft.recipe.ShapelessRecipe recipe, CompatIdentifier id) { + return ShapelessRecipeEntry.of(recipe, id); + } + + public static ShapelessRecipeEntry of(net.pitan76.mcpitanlib.midohra.recipe.ShapelessRecipe recipe, CompatIdentifier id) { + return ShapelessRecipeEntry.of(recipe, id); + } + + public net.minecraft.recipe.RecipeEntry getRaw() { + return recipeEntry; + } + + public net.minecraft.recipe.RecipeEntry toMinecraft() { + return getRaw(); + } + + public CompatIdentifier getId() { + return CompatIdentifier.fromMinecraft(getRaw().id().getValue()); + } + + public CompatRecipeEntry toCompatRecipeEntry() { + return new CompatRecipeEntry(getRaw()); + } + + public net.minecraft.recipe.Recipe getRawRecipe() { + return getRaw().value(); + } + + public Recipe getRecipe() { + return Recipe.of(getRaw().value()); + } + + public RecipeType getRecipeType() { + return RecipeType.of(getRawRecipeType()); + } + + public net.minecraft.recipe.RecipeType getRawRecipeType() { + return getRaw().value().getType(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java new file mode 100644 index 000000000..569564a95 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java @@ -0,0 +1,55 @@ +package net.pitan76.mcpitanlib.midohra.recipe.entry; + +import net.minecraft.recipe.Recipe; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.recipe.ShapedRecipe; + +public class ShapedRecipeEntry extends RecipeEntry { + private final net.minecraft.recipe.RecipeEntry recipeEntry; + + protected ShapedRecipeEntry(net.minecraft.recipe.RecipeEntry recipeEntry) { + super(null); + this.recipeEntry = recipeEntry; + } + + public static ShapedRecipeEntry _of(net.minecraft.recipe.RecipeEntry recipeEntry) { + return new ShapedRecipeEntry(recipeEntry); + } + + public static ShapedRecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { + return _of((net.minecraft.recipe.RecipeEntry) recipeEntry); + } + + public static ShapedRecipeEntry of(net.minecraft.recipe.ShapedRecipe recipe, CompatIdentifier id) { + RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, id.toMinecraft()); + net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(key, recipe); + + return of(recipeEntry); + } + + public static ShapedRecipeEntry of(ShapedRecipe recipe, CompatIdentifier id) { + return of(recipe.toMinecraft(), id); + } + + @Override + public net.minecraft.recipe.RecipeEntry getRaw() { + return recipeEntry; + } + + @Override + public net.minecraft.recipe.RecipeEntry toMinecraft() { + return getRaw(); + } + + @Override + public ShapedRecipe getRecipe() { + return ShapedRecipe.of(getRawRecipe()); + } + + @Override + public net.minecraft.recipe.ShapedRecipe getRawRecipe() { + return getRaw().value(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java new file mode 100644 index 000000000..2026084bd --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java @@ -0,0 +1,55 @@ +package net.pitan76.mcpitanlib.midohra.recipe.entry; + +import net.minecraft.recipe.Recipe; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.recipe.ShapelessRecipe; + +public class ShapelessRecipeEntry extends RecipeEntry { + private final net.minecraft.recipe.RecipeEntry recipeEntry; + + protected ShapelessRecipeEntry(net.minecraft.recipe.RecipeEntry recipeEntry) { + super(null); + this.recipeEntry = recipeEntry; + } + + public static ShapelessRecipeEntry _of(net.minecraft.recipe.RecipeEntry recipeEntry) { + return new ShapelessRecipeEntry(recipeEntry); + } + + public static ShapelessRecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { + return _of((net.minecraft.recipe.RecipeEntry) recipeEntry); + } + + public static ShapelessRecipeEntry of(net.minecraft.recipe.ShapelessRecipe recipe, CompatIdentifier id) { + RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, id.toMinecraft()); + net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(key, recipe); + + return of(recipeEntry); + } + + public static ShapelessRecipeEntry of(ShapelessRecipe recipe, CompatIdentifier id) { + return of(recipe.toMinecraft(), id); + } + + @Override + public net.minecraft.recipe.RecipeEntry getRaw() { + return recipeEntry; + } + + @Override + public net.minecraft.recipe.RecipeEntry toMinecraft() { + return getRaw(); + } + + @Override + public ShapelessRecipe getRecipe() { + return ShapelessRecipe.of(getRawRecipe()); + } + + @Override + public net.minecraft.recipe.ShapelessRecipe getRawRecipe() { + return getRaw().value(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/CraftingRecipeInputOrInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/CraftingRecipeInputOrInventory.java new file mode 100644 index 000000000..2b65cfda1 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/CraftingRecipeInputOrInventory.java @@ -0,0 +1,67 @@ +package net.pitan76.mcpitanlib.midohra.recipe.input; + +import net.minecraft.inventory.CraftingInventory; +import net.minecraft.inventory.Inventory; +import net.minecraft.recipe.input.CraftingRecipeInput; +import org.jetbrains.annotations.Nullable; + +public class CraftingRecipeInputOrInventory extends RecipeInputOrInventory { + private final CraftingRecipeInput recipeInput; + private CraftingInventory inventory = null; + + public static CraftingRecipeInputOrInventory EMPTY = new CraftingRecipeInputOrInventory(CraftingRecipeInput.EMPTY); + + protected CraftingRecipeInputOrInventory(CraftingRecipeInput recipeInput) { + super(null); + this.recipeInput = recipeInput; + } + + protected CraftingRecipeInputOrInventory(CraftingInventory inventory) { + super(null); + this.recipeInput = inventory.createRecipeInput(); + this.inventory = inventory; + } + + public static CraftingRecipeInputOrInventory of(CraftingRecipeInput recipeInput) { + return new CraftingRecipeInputOrInventory(recipeInput); + } + + public static CraftingRecipeInputOrInventory of(Inventory inventory) { + if (inventory instanceof CraftingRecipeInput) { + return of((CraftingRecipeInput) inventory); + } + + return EMPTY; + } + + public static CraftingRecipeInputOrInventory of(CraftingInventory inventory) { + return new CraftingRecipeInputOrInventory(inventory); + } + + @Nullable + @Override + public CraftingRecipeInput getRaw() { + return recipeInput; + } + + @Nullable + @Override + public CraftingRecipeInput toMinecraft() { + return getRaw(); + } + + @Nullable + @Override + public CraftingRecipeInput getRecipeInput() { + return getRaw(); + } + + @Nullable + @Override + public Inventory getInventory() { + if (inventory != null) + return inventory; + + return super.getInventory(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java new file mode 100644 index 000000000..71ff3d195 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java @@ -0,0 +1,80 @@ +package net.pitan76.mcpitanlib.midohra.recipe.input; + +import net.minecraft.inventory.Inventory; +import net.minecraft.recipe.input.RecipeInput; +import net.pitan76.mcpitanlib.midohra.item.ItemStack; +import org.jetbrains.annotations.Nullable; + +public class RecipeInputOrInventory { + private final RecipeInput recipeInput; + + public static RecipeInputOrInventory NONE = new RecipeInputOrInventory(null); + + protected RecipeInputOrInventory(RecipeInput recipeInput) { + this.recipeInput = recipeInput; + } + + public static RecipeInputOrInventory of(RecipeInput recipeInput) { + return new RecipeInputOrInventory(recipeInput); + } + + public static RecipeInputOrInventory of(Inventory inventory) { + if (inventory instanceof RecipeInput) { + return of((RecipeInput) inventory); + } + + return NONE; + } + + @Nullable + public RecipeInput getRaw() { + return recipeInput; + } + + @Nullable + public RecipeInput toMinecraft() { + return getRaw(); + } + + @Nullable + public RecipeInput getRecipeInput() { + return getRaw(); + } + + @Nullable + public Inventory getInventory() { + if (getRaw() instanceof Inventory) { + return (Inventory) getRaw(); + } + + return null; + } + + public boolean isNone() { + return getRaw() == null; + } + + public int size() { + if (isNone()) return 0; + + return getRaw().size(); + } + + public boolean isEmpty() { + if (isNone()) return true; + + return getRaw().isEmpty(); + } + + public net.minecraft.item.ItemStack getStack(int slot) { + if (isNone()) return net.minecraft.item.ItemStack.EMPTY; + + return getRaw().getStackInSlot(slot); + } + + public ItemStack getMidohraStack(int slot) { + if (isNone()) return ItemStack.EMPTY; + + return ItemStack.of(getStack(slot)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/TypedRecipeInputOrInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/TypedRecipeInputOrInventory.java new file mode 100644 index 000000000..66f46d30d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/TypedRecipeInputOrInventory.java @@ -0,0 +1,56 @@ +package net.pitan76.mcpitanlib.midohra.recipe.input; + +import net.minecraft.inventory.Inventory; +import net.minecraft.recipe.input.RecipeInput; +import org.jetbrains.annotations.Nullable; + +public class TypedRecipeInputOrInventory extends RecipeInputOrInventory { + private final T recipeInput; + + public static TypedRecipeInputOrInventory NONE = new TypedRecipeInputOrInventory<>(null); + + protected TypedRecipeInputOrInventory(T recipeInput) { + super(null); + this.recipeInput = recipeInput; + } + + public static TypedRecipeInputOrInventory _of(T recipeInput) { + return new TypedRecipeInputOrInventory<>(recipeInput); + } + + public static TypedRecipeInputOrInventory of(Inventory inventory) { + if (inventory instanceof RecipeInput) { + return _of((RecipeInput) inventory); + } + + return NONE; + } + + @Nullable + @Override + public T getRaw() { + return recipeInput; + } + + @Nullable + @Override + public T getRecipeInput() { + return getRaw(); + } + + @Nullable + @Override + public T toMinecraft() { + return getRaw(); + } + + @Nullable + @Override + public Inventory getInventory() { + if (getRaw() instanceof Inventory) { + return (Inventory) getRaw(); + } + + return null; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java new file mode 100644 index 000000000..fbc5678ed --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java @@ -0,0 +1,89 @@ +package net.pitan76.mcpitanlib.midohra.server; + +import net.minecraft.server.MinecraftServer; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.ServerUtil; +import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.world.ServerWorld; + +public class MCServer { + private final MinecraftServer server; + + protected MCServer(MinecraftServer server) { + this.server = server; + } + + public static MCServer of(MinecraftServer server) { + return new MCServer(server); + } + + public MinecraftServer getRaw() { + return server; + } + + public MinecraftServer toMinecraft() { + return getRaw(); + } + + public String getIP() { + return ServerUtil.getIP(server); + } + + public int getPort() { + return ServerUtil.getPort(server); + } + + public String getMotd() { + return ServerUtil.getMotd(server); + } + + public String getServerModName() { + return ServerUtil.getServerModName(server); + } + + public int getMaxPlayerCount() { + return ServerUtil.getMaxPlayerCount(server); + } + + public int getCurrentPlayerCount() { + return ServerUtil.getCurrentPlayerCount(server); + } + + public boolean isOnlineMode() { + return ServerUtil.isOnlineMode(server); + } + + public boolean isServerRunning() { + return ServerUtil.isServerRunning(server); + } + + public boolean isServerDedicated() { + return ServerUtil.isServerDedicated(server); + } + + public boolean isSingleplayer() { + return ServerUtil.isSingleplayer(server); + } + + public PlayerManager getPlayerManager() { + return PlayerManager.of(ServerUtil.getPlayerManager(server)); + } + + public ServerWorld getWorld(CompatIdentifier id) { + return ServerWorld.of(WorldUtil.getWorld(server, id)); + } + + public ServerWorld getOverworld() { + return ServerWorld.of(WorldUtil.getOverworld(server)); + } + + public ServerWorld getNether() { + return ServerWorld.of(WorldUtil.getNether(server)); + } + + public ServerWorld getEnd() { + return ServerWorld.of(WorldUtil.getEnd(server)); + } + + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/PlayerManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/PlayerManager.java new file mode 100644 index 000000000..22dd9fcd3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/PlayerManager.java @@ -0,0 +1,152 @@ +package net.pitan76.mcpitanlib.midohra.server; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.BannedIpList; +import net.minecraft.server.BannedPlayerList; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.Whitelist; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.text.TextComponent; +import net.pitan76.mcpitanlib.api.util.TextUtil; +import net.pitan76.mcpitanlib.midohra.world.ServerWorld; +import net.pitan76.mcpitanlib.midohra.world.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class PlayerManager { + private final net.minecraft.server.PlayerManager playerManager; + + protected PlayerManager(net.minecraft.server.PlayerManager playerManager) { + this.playerManager = playerManager; + } + + public static PlayerManager of(net.minecraft.server.PlayerManager playerManager) { + return new PlayerManager(playerManager); + } + + public static PlayerManager of(MinecraftServer server) { + return of(server.getPlayerManager()); + } + + public static PlayerManager of(MCServer server) { + return of(server.getRaw()); + } + + public static PlayerManager of(ServerWorld world) { + return of(world.getServer()); + } + + public static PlayerManager of(World world) { + return of(world.getServer()); + } + + public net.minecraft.server.PlayerManager getRaw() { + return playerManager; + } + + public net.minecraft.server.PlayerManager toMinecraft() { + return getRaw(); + } + + public void broadcast(TextComponent message, boolean overlay) { + getRaw().broadcast(message.getText(), overlay); + } + + public void broadcast(TextComponent message) { + broadcast(message, false); + } + + public void broadcast(String message, boolean overlay) { + getRaw().broadcast(TextUtil.literal(message), overlay); + } + + public void broadcast(String message) { + broadcast(message, false); + } + + public void removePlayer(Player player) { + getRaw().remove(player.getServerPlayer().get()); + } + + public Player getPlayerByUUID(UUID uuid) { + return new Player(getRaw().getPlayer(uuid)); + } + + public Player getPlayerByName(String name) { + return new Player(getRaw().getPlayer(name)); + } + + public List getPlayersByIP(String ip) { + List players = new ArrayList<>(); + for (net.minecraft.entity.player.PlayerEntity p: getRaw().getPlayersByIp(ip)) { + players.add(new Player(p)); + } + return players; + } + + public List getPlayers() { + List players = new ArrayList<>(); + for (PlayerEntity p : getRaw().getPlayerList()) { + players.add(new Player(p)); + } + return players; + } + + public boolean isExistByUUID(UUID uuid) { + return getRaw().getPlayer(uuid) != null; + } + + public boolean isExistByName(String name) { + return getRaw().getPlayer(name) != null; + } + + public boolean isExistByIP(String ip) { + return !getRaw().getPlayersByIp(ip).isEmpty(); + } + + public boolean hasPlayerByUUID(UUID uuid) { + return getRaw().getPlayer(uuid) != null; + } + + public boolean hasPlayerByName(String name) { + return getRaw().getPlayer(name) != null; + } + + public boolean hasPlayerByIP(String ip) { + return !getRaw().getPlayersByIp(ip).isEmpty(); + } + + public int getCurrentPlayerCount() { + return getRaw().getCurrentPlayerCount(); + } + + public int getMaxPlayerCount() { + return getRaw().getMaxPlayerCount(); + } + + public boolean isWhitelistEnabled() { + return getRaw().isWhitelistEnabled(); + } + + public void setWhitelistEnabled(boolean enabled) { + getRaw().setWhitelistEnabled(enabled); + } + + public Whitelist getWhitelist() { + return getRaw().getWhitelist(); + } + + public void reloadWhitelist() { + getRaw().reloadWhitelist(); + } + + public BannedIpList getBannedIpList() { + return getRaw().getIpBanList(); + } + + public BannedPlayerList getBannedPlayerList() { + return getRaw().getUserBanList(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java index 613874f7f..ea83adead 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java @@ -80,4 +80,8 @@ public BlockPos offset(Direction direction, int amount) { public BlockPos offset(Direction direction) { return new BlockPos(blockPos.offset(direction.toMinecraft())); } + + public ChunkPos toChunkPos() { + return ChunkPos.of(this); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java new file mode 100644 index 000000000..da5a979e7 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java @@ -0,0 +1,154 @@ +package net.pitan76.mcpitanlib.midohra.util.math; + +import java.util.stream.Stream; + +public class ChunkPos { + private final net.minecraft.util.math.ChunkPos pos; + + protected ChunkPos(net.minecraft.util.math.ChunkPos pos) { + this.pos = pos; + } + + public static ChunkPos of(net.minecraft.util.math.ChunkPos pos) { + return new ChunkPos(pos); + } + + public static ChunkPos of(int x, int z) { + return of(new net.minecraft.util.math.ChunkPos(x, z)); + } + + public static ChunkPos of(BlockPos pos) { + return of(new net.minecraft.util.math.ChunkPos(pos.toMinecraft())); + } + + public static ChunkPos of(long pos) { + return of(new net.minecraft.util.math.ChunkPos(pos)); + } + + public static ChunkPos fromRegion(int x, int z) { + return of(net.minecraft.util.math.ChunkPos.fromRegion(x, z)); + } + + public static ChunkPos fromRegionCenter(int x, int z) { + return of(net.minecraft.util.math.ChunkPos.fromRegionCenter(x, z)); + } + + public net.minecraft.util.math.ChunkPos getRaw() { + return pos; + } + + public net.minecraft.util.math.ChunkPos toMinecraft() { + return getRaw(); + } + + public int getX() { + return getRaw().x; + } + + public int getZ() { + return getRaw().z; + } + + public int getOffsetX(int offsetX) { + return getRaw().getOffsetX(offsetX); + } + + public int getOffsetZ(int offsetZ) { + return getRaw().getOffsetZ(offsetZ); + } + + public int getStartX() { + return getRaw().getStartX(); + } + + public int getStartZ() { + return getRaw().getStartZ(); + } + + public int getEndX() { + return getRaw().getEndX(); + } + + public int getEndZ() { + return getRaw().getEndZ(); + } + + public int getCenterX() { + return getRaw().getCenterX(); + } + + public int getCenterZ() { + return getRaw().getCenterZ(); + } + + public int getRegionX() { + return getRaw().getRegionX(); + } + + public int getRegionZ() { + return getRaw().getRegionZ(); + } + + public int getRegionRelativeX() { + return getRaw().getRegionRelativeX(); + } + + public int getRegionRelativeZ() { + return getRaw().getRegionRelativeZ(); + } + + public BlockPos getStartPos() { + return BlockPos.of(getRaw().getStartPos()); + } + + public BlockPos getCenterAtY(int y) { + return BlockPos.of(getRaw().getCenterAtY(y)); + } + + public BlockPos getBlockPos(int offsetX, int y, int offsetZ) { + return BlockPos.of(getRaw().getBlockPos(offsetX, y, offsetZ)); + } + + public long toLong() { + return getRaw().toLong(); + } + + @Override + public String toString() { + return getRaw().toString(); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof ChunkPos && getRaw().equals(((ChunkPos) obj).getRaw()); + } + + @Override + public int hashCode() { + return getRaw().hashCode(); + } + + public int getChebyshevDistance(ChunkPos pos) { + return getRaw().getChebyshevDistance(pos.getRaw()); + } + + public int getChebyshevDistance(int x, int z) { + return getRaw().getChebyshevDistance(x, z); + } + + public int getSquaredDistance(ChunkPos pos) { + return getRaw().getSquaredDistance(pos.getRaw()); + } + + public int getSquaredDistance(long pos) { + return getRaw().getSquaredDistance(pos); + } + + public static Stream stream(ChunkPos center, int radius) { + return net.minecraft.util.math.ChunkPos.stream(center.getRaw(), radius).map(ChunkPos::of); + } + + public static Stream stream(final ChunkPos pos1, final ChunkPos pos2) { + return net.minecraft.util.math.ChunkPos.stream(pos1.getRaw(), pos2.getRaw()).map(ChunkPos::of); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java new file mode 100644 index 000000000..9ee497435 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java @@ -0,0 +1,63 @@ +package net.pitan76.mcpitanlib.midohra.world; + +import net.minecraft.server.MinecraftServer; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import net.pitan76.mcpitanlib.midohra.recipe.ServerRecipeManager; +import net.pitan76.mcpitanlib.midohra.server.MCServer; +import net.pitan76.mcpitanlib.midohra.server.PlayerManager; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.chunk.ServerChunkManager; + +public class ServerWorld extends World { + private final net.minecraft.server.world.ServerWorld world; + + protected ServerWorld(net.minecraft.server.world.ServerWorld world) { + super(null); + this.world = world; + } + + public static ServerWorld of(net.minecraft.server.world.ServerWorld world) { + return new ServerWorld(world); + } + + @Override + public net.minecraft.server.world.ServerWorld getRaw() { + return world; + } + + @Override + public net.minecraft.server.world.ServerWorld toMinecraft() { + return getRaw(); + } + + public void playSound(Player player, BlockPos pos, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch, long seed) { + getRaw().playSound(player.getEntity(), pos.getX(), pos.getY(), pos.getZ(), sound.getEntry(), category.get(), volume, pitch, seed); + } + + public void playSoundFromEntity(Player player, Player target, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch, long seed) { + getRaw().playSoundFromEntity(player.getEntity(), target.getEntity(), sound.getEntry(), category.get(), volume, pitch, seed); + } + + public MinecraftServer getServer() { + return getRaw().getServer(); + } + + public MCServer getMCServer() { + return MCServer.of(getServer()); + } + + public PlayerManager getPlayerManager() { + return PlayerManager.of(this); + } + + public ServerChunkManager getChunkManager() { + return ServerChunkManager.of(this); + } + + @Override + public ServerRecipeManager getRecipeManager() { + return ServerRecipeManager.of(this); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java index 2aa84bc27..f02010947 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java @@ -2,12 +2,18 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.FluidState; import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.WorldUtil; import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.recipe.RecipeManager; import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; import java.util.List; @@ -96,4 +102,40 @@ public void spawnEntity(Entity entity) { public void spawnStack(net.minecraft.item.ItemStack stack, BlockPos pos) { WorldUtil.spawnStack(getRaw(), pos.toMinecraft(), stack); } + + public RecipeManager getRecipeManager() { + return RecipeManager.of(getRaw().getRecipeManager()); + } + + @Deprecated + @Override + public void playSound(PlayerEntity playerEntity, net.minecraft.util.math.BlockPos pos, SoundEvent sound, SoundCategory category) { + getRaw().playSound(playerEntity, pos, sound, category); + } + + @Deprecated + @Override + public void playSound(PlayerEntity playerEntity, net.minecraft.util.math.BlockPos pos, SoundEvent sound, SoundCategory category, float volume, float pitch) { + getRaw().playSound(playerEntity, pos, sound, category, volume, pitch); + } + + @Override + public void playSound(Player player, BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { + WorldUtil.playSound(getRaw(), player, pos.toMinecraft(), soundEvent, category, volume, pitch); + } + + @Override + public void playSound(BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category) { + playSound(null, pos, soundEvent, category, 1f, 1f); + } + + @Override + public void playSound(Player player, BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category) { + playSound(player, pos, soundEvent, category, 1f, 1f); + } + + @Override + public void playSound(BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { + playSound(null, pos, soundEvent, category, volume, pitch); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkManager.java new file mode 100644 index 000000000..7f3084f67 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkManager.java @@ -0,0 +1,41 @@ +package net.pitan76.mcpitanlib.midohra.world.chunk; + +import net.pitan76.mcpitanlib.midohra.world.BlockView; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; +import net.pitan76.mcpitanlib.midohra.world.World; + +public class ChunkManager { + private final net.minecraft.world.chunk.ChunkManager chunkManager; + + protected ChunkManager(net.minecraft.world.chunk.ChunkManager chunkManager) { + this.chunkManager = chunkManager; + } + + public static ChunkManager of(net.minecraft.world.chunk.ChunkManager chunkManager) { + return new ChunkManager(chunkManager); + } + + public static ChunkManager of(net.minecraft.world.World world) { + return of(world.getChunkManager()); + } + + public static ChunkManager of(World world) { + return of(world.getRaw()); + } + + public net.minecraft.world.chunk.ChunkManager getRaw() { + return chunkManager; + } + + public net.minecraft.world.chunk.ChunkManager toMinecraft() { + return getRaw(); + } + + public IWorldView getWorld() { + return BlockView.of(getRaw().getWorld()); + } + + public boolean isChunkLoaded(int x, int z) { + return getRaw().isChunkLoaded(x, z); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java new file mode 100644 index 000000000..71d4e29d9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java @@ -0,0 +1,58 @@ +package net.pitan76.mcpitanlib.midohra.world.chunk; + +import net.minecraft.util.Unit; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; + +import java.util.Comparator; + +public class ChunkTicketType { + + public static final ChunkTicketType START = of(net.minecraft.server.world.ChunkTicketType.START); + public static final ChunkTicketType DRAGON = of(net.minecraft.server.world.ChunkTicketType.DRAGON); + public static final ChunkTicketType PLAYER = of(net.minecraft.server.world.ChunkTicketType.PLAYER); + public static final ChunkTicketType FORCED = of(net.minecraft.server.world.ChunkTicketType.FORCED); + public static final ChunkTicketType PORTAL = of(net.minecraft.server.world.ChunkTicketType.PORTAL); + public static final ChunkTicketType ENDER_PEARL = of(net.minecraft.server.world.ChunkTicketType.ENDER_PEARL); + public static final ChunkTicketType POST_TELEPORT = of(net.minecraft.server.world.ChunkTicketType.POST_TELEPORT); + public static final ChunkTicketType UNKNOWN = of(net.minecraft.server.world.ChunkTicketType.UNKNOWN); + + private final net.minecraft.server.world.ChunkTicketType ticketType; + + protected ChunkTicketType(net.minecraft.server.world.ChunkTicketType ticketType) { + this.ticketType = ticketType; + } + + public static ChunkTicketType of(net.minecraft.server.world.ChunkTicketType ticketType) { + return new ChunkTicketType<>(ticketType); + } + + public net.minecraft.server.world.ChunkTicketType getRaw() { + return ticketType; + } + + public net.minecraft.server.world.ChunkTicketType toMinecraft() { + return getRaw(); + } + + public static ChunkTicketType create(String name, Comparator argumentComparator) { + return of(net.minecraft.server.world.ChunkTicketType.create(name, argumentComparator)); + } + + public static ChunkTicketType create(String name, Comparator argumentComparator, int expiryTicks) { + return of(net.minecraft.server.world.ChunkTicketType.create(name, argumentComparator, expiryTicks)); + } + + public Comparator getArgumentComparator() { + return getRaw().getArgumentComparator(); + } + + public long getExpiryTicks() { + return getRaw().getExpiryTicks(); + } + + @Override + public String toString() { + return getRaw().toString(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ServerChunkManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ServerChunkManager.java new file mode 100644 index 000000000..f4d438620 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ServerChunkManager.java @@ -0,0 +1,45 @@ +package net.pitan76.mcpitanlib.midohra.world.chunk; + +import net.pitan76.mcpitanlib.midohra.util.math.ChunkPos; +import net.pitan76.mcpitanlib.midohra.world.ServerWorld; +import net.pitan76.mcpitanlib.midohra.world.World; + +public class ServerChunkManager extends ChunkManager { + private final net.minecraft.server.world.ServerChunkManager chunkManager; + + protected ServerChunkManager(net.minecraft.server.world.ServerChunkManager chunkManager) { + super(null); + this.chunkManager = chunkManager; + } + + public static ServerChunkManager of(net.minecraft.server.world.ServerChunkManager chunkManager) { + return new ServerChunkManager(chunkManager); + } + + public static ServerChunkManager of(ServerWorld world) { + return of(world.getRaw().getChunkManager()); + } + + @Override + public net.minecraft.server.world.ServerChunkManager getRaw() { + return chunkManager; + } + + @Override + public net.minecraft.server.world.ServerChunkManager toMinecraft() { + return getRaw(); + } + + @Override + public World getWorld() { + return World.of(getRaw().getWorld()); + } + + public void addTicket(ChunkTicketType ticketType, ChunkPos pos, int radius, T argument) { + getRaw().addTicket(ticketType.getRaw(), pos.getRaw(), radius, argument); + } + + public void removeTicket(ChunkTicketType ticketType, ChunkPos pos, int radius, T argument) { + getRaw().removeTicket(ticketType.getRaw(), pos.getRaw(), radius, argument); + } +} diff --git a/info.properties b/info.properties index 1222fc7ab..95235cd92 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.8 +mod_version=3.0.9 maven_group=net.pitan76 -changelog=Fix APIs \ No newline at end of file +changelog=Add APIs \ No newline at end of file From 581be993069042c4dfedc5c0e4dd2cc30d90cb34 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 23 Nov 2024 23:25:35 +0900 Subject: [PATCH 411/617] 1201--1 --- .../mcpitanlib/midohra/recipe/Recipe.java | 25 +++++++------ .../input/CraftingRecipeInputOrInventory.java | 35 ++++++------------- .../recipe/input/RecipeInputOrInventory.java | 29 +++++---------- .../input/TypedRecipeInputOrInventory.java | 19 ++-------- 4 files changed, 33 insertions(+), 75 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java index acb8fc4fd..c25531977 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java @@ -1,9 +1,8 @@ package net.pitan76.mcpitanlib.midohra.recipe; +import net.minecraft.inventory.Inventory; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.input.RecipeInput; -import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.midohra.item.ItemStack; import net.pitan76.mcpitanlib.midohra.recipe.input.RecipeInputOrInventory; import net.pitan76.mcpitanlib.midohra.recipe.input.TypedRecipeInputOrInventory; @@ -48,34 +47,34 @@ public RecipeSerializer getRawSerializer() { public boolean matches(RecipeInputOrInventory input, World world) { if (input instanceof TypedRecipeInputOrInventory) { - return matches((TypedRecipeInputOrInventory) input, world); + return matches(input, world); } return false; } - public net.minecraft.item.ItemStack craft(RecipeInputOrInventory input, CompatRegistryLookup registryLookup) { + public net.minecraft.item.ItemStack craft(RecipeInputOrInventory input, World world) { if (input instanceof TypedRecipeInputOrInventory) { - return craft((TypedRecipeInputOrInventory) input, registryLookup); + return craft(input, world); } return net.minecraft.item.ItemStack.EMPTY; } - public ItemStack craftMidohra(RecipeInputOrInventory input, CompatRegistryLookup registryLookup) { - return ItemStack.of(craft(input, registryLookup)); + public ItemStack craftMidohra(RecipeInputOrInventory input, World world) { + return ItemStack.of(craft(input, world)); } - public boolean matches(TypedRecipeInputOrInventory input, World world) { + public boolean matches(TypedRecipeInputOrInventory input, World world) { return ((net.minecraft.recipe.Recipe)getRaw()).matches(input.getRecipeInput(), world.getRaw()); } - public net.minecraft.item.ItemStack craft(TypedRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { - return ((net.minecraft.recipe.Recipe)getRaw()).craft(input.getRecipeInput(), registryLookup.getRegistryLookup()); + public net.minecraft.item.ItemStack craft(TypedRecipeInputOrInventory input, World world) { + return ((net.minecraft.recipe.Recipe)getRaw()).craft(input.getRecipeInput(), world.getRaw().getRegistryManager()); } - public ItemStack craftMidohra(TypedRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { - return ItemStack.of(craft(input, registryLookup)); + public ItemStack craftMidohra(TypedRecipeInputOrInventory input, World world) { + return ItemStack.of(craft(input, world)); } public String getGroup() { @@ -87,6 +86,6 @@ public RecipeType getType() { } public List getInputs() { - return getRaw().getIngredientPlacement().getIngredients(); + return getRaw().getIngredients(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/CraftingRecipeInputOrInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/CraftingRecipeInputOrInventory.java index 2b65cfda1..a1c113cf9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/CraftingRecipeInputOrInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/CraftingRecipeInputOrInventory.java @@ -2,33 +2,21 @@ import net.minecraft.inventory.CraftingInventory; import net.minecraft.inventory.Inventory; -import net.minecraft.recipe.input.CraftingRecipeInput; import org.jetbrains.annotations.Nullable; public class CraftingRecipeInputOrInventory extends RecipeInputOrInventory { - private final CraftingRecipeInput recipeInput; - private CraftingInventory inventory = null; + private final CraftingInventory inventory; - public static CraftingRecipeInputOrInventory EMPTY = new CraftingRecipeInputOrInventory(CraftingRecipeInput.EMPTY); + public static CraftingRecipeInputOrInventory EMPTY = new CraftingRecipeInputOrInventory(null); - protected CraftingRecipeInputOrInventory(CraftingRecipeInput recipeInput) { + protected CraftingRecipeInputOrInventory(@Nullable CraftingInventory inventory) { super(null); - this.recipeInput = recipeInput; - } - - protected CraftingRecipeInputOrInventory(CraftingInventory inventory) { - super(null); - this.recipeInput = inventory.createRecipeInput(); this.inventory = inventory; } - public static CraftingRecipeInputOrInventory of(CraftingRecipeInput recipeInput) { - return new CraftingRecipeInputOrInventory(recipeInput); - } - public static CraftingRecipeInputOrInventory of(Inventory inventory) { - if (inventory instanceof CraftingRecipeInput) { - return of((CraftingRecipeInput) inventory); + if (inventory instanceof CraftingInventory) { + return of((CraftingInventory) inventory); } return EMPTY; @@ -40,28 +28,25 @@ public static CraftingRecipeInputOrInventory of(CraftingInventory inventory) { @Nullable @Override - public CraftingRecipeInput getRaw() { - return recipeInput; + public CraftingInventory getRaw() { + return inventory; } @Nullable @Override - public CraftingRecipeInput toMinecraft() { + public CraftingInventory toMinecraft() { return getRaw(); } @Nullable @Override - public CraftingRecipeInput getRecipeInput() { + public CraftingInventory getRecipeInput() { return getRaw(); } @Nullable @Override public Inventory getInventory() { - if (inventory != null) - return inventory; - - return super.getInventory(); + return getRaw(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java index 71ff3d195..dac9944c4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java @@ -1,53 +1,40 @@ package net.pitan76.mcpitanlib.midohra.recipe.input; import net.minecraft.inventory.Inventory; -import net.minecraft.recipe.input.RecipeInput; import net.pitan76.mcpitanlib.midohra.item.ItemStack; import org.jetbrains.annotations.Nullable; public class RecipeInputOrInventory { - private final RecipeInput recipeInput; + private final Inventory recipeInput; public static RecipeInputOrInventory NONE = new RecipeInputOrInventory(null); - protected RecipeInputOrInventory(RecipeInput recipeInput) { + protected RecipeInputOrInventory(Inventory recipeInput) { this.recipeInput = recipeInput; } - public static RecipeInputOrInventory of(RecipeInput recipeInput) { + public static RecipeInputOrInventory of(Inventory recipeInput) { return new RecipeInputOrInventory(recipeInput); } - public static RecipeInputOrInventory of(Inventory inventory) { - if (inventory instanceof RecipeInput) { - return of((RecipeInput) inventory); - } - - return NONE; - } - @Nullable - public RecipeInput getRaw() { + public Inventory getRaw() { return recipeInput; } @Nullable - public RecipeInput toMinecraft() { + public Inventory toMinecraft() { return getRaw(); } @Nullable - public RecipeInput getRecipeInput() { + public Inventory getRecipeInput() { return getRaw(); } @Nullable public Inventory getInventory() { - if (getRaw() instanceof Inventory) { - return (Inventory) getRaw(); - } - - return null; + return getRaw(); } public boolean isNone() { @@ -69,7 +56,7 @@ public boolean isEmpty() { public net.minecraft.item.ItemStack getStack(int slot) { if (isNone()) return net.minecraft.item.ItemStack.EMPTY; - return getRaw().getStackInSlot(slot); + return getRaw().getStack(slot); } public ItemStack getMidohraStack(int slot) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/TypedRecipeInputOrInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/TypedRecipeInputOrInventory.java index 66f46d30d..e4e13ba06 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/TypedRecipeInputOrInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/TypedRecipeInputOrInventory.java @@ -1,10 +1,9 @@ package net.pitan76.mcpitanlib.midohra.recipe.input; import net.minecraft.inventory.Inventory; -import net.minecraft.recipe.input.RecipeInput; import org.jetbrains.annotations.Nullable; -public class TypedRecipeInputOrInventory extends RecipeInputOrInventory { +public class TypedRecipeInputOrInventory extends RecipeInputOrInventory { private final T recipeInput; public static TypedRecipeInputOrInventory NONE = new TypedRecipeInputOrInventory<>(null); @@ -14,18 +13,10 @@ protected TypedRecipeInputOrInventory(T recipeInput) { this.recipeInput = recipeInput; } - public static TypedRecipeInputOrInventory _of(T recipeInput) { + public static TypedRecipeInputOrInventory _of(T recipeInput) { return new TypedRecipeInputOrInventory<>(recipeInput); } - public static TypedRecipeInputOrInventory of(Inventory inventory) { - if (inventory instanceof RecipeInput) { - return _of((RecipeInput) inventory); - } - - return NONE; - } - @Nullable @Override public T getRaw() { @@ -47,10 +38,6 @@ public T toMinecraft() { @Nullable @Override public Inventory getInventory() { - if (getRaw() instanceof Inventory) { - return (Inventory) getRaw(); - } - - return null; + return getRaw(); } } From e3cde495768bfb1bf0ca7ff0b02694e7c848d443 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 23 Nov 2024 23:27:42 +0900 Subject: [PATCH 412/617] fix craft --- .../pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java index 4c60082d4..287d43220 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java @@ -36,12 +36,12 @@ public boolean matches(CraftingRecipeInputOrInventory input, World world) { return getRaw().matches(input.getRaw(), world.getRaw()); } - public net.minecraft.item.ItemStack craft(CraftingRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { - return getRaw().craft(input.getRaw(), registryLookup.getRegistryLookup()); + public net.minecraft.item.ItemStack craft(CraftingRecipeInputOrInventory input, World world) { + return getRaw().craft(input.getRaw(), world.getRaw().getRegistryManager()); } - public ItemStack craftMidohra(CraftingRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { - return ItemStack.of(craft(input, registryLookup)); + public ItemStack craftMidohra(CraftingRecipeInputOrInventory input, World world) { + return ItemStack.of(craft(input, world)); } public DefaultedList getRecipeRemaindersDefaultedList(CraftingRecipeInputOrInventory input) { From 52c41959ca10cf333f24e8d772b0316d77a27fac Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 23 Nov 2024 23:32:56 +0900 Subject: [PATCH 413/617] fix 1211 --- .../midohra/recipe/CraftingRecipe.java | 3 +- .../mcpitanlib/midohra/recipe/Ingredient.java | 2 +- .../midohra/recipe/ServerRecipeManager.java | 40 +++++++------------ .../recipe/entry/CraftingRecipeEntry.java | 6 +-- .../midohra/recipe/entry/RecipeEntry.java | 7 +--- .../recipe/entry/ShapedRecipeEntry.java | 6 +-- .../recipe/entry/ShapelessRecipeEntry.java | 6 +-- .../recipe/input/RecipeInputOrInventory.java | 2 +- .../midohra/world/chunk/ChunkTicketType.java | 2 +- 9 files changed, 23 insertions(+), 51 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java index 287d43220..19dc78b43 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java @@ -2,7 +2,6 @@ import net.minecraft.recipe.book.CraftingRecipeCategory; import net.minecraft.util.collection.DefaultedList; -import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; import net.pitan76.mcpitanlib.midohra.item.ItemStack; import net.pitan76.mcpitanlib.midohra.recipe.input.CraftingRecipeInputOrInventory; @@ -45,7 +44,7 @@ public ItemStack craftMidohra(CraftingRecipeInputOrInventory input, World world) } public DefaultedList getRecipeRemaindersDefaultedList(CraftingRecipeInputOrInventory input) { - return getRaw().getRecipeRemainders(input.getRaw()); + return getRaw().getRemainder(input.getRaw()); } public ItemStackList getRecipeRemainders(CraftingRecipeInputOrInventory input) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Ingredient.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Ingredient.java index 9b72bb7f5..496089b5f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Ingredient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Ingredient.java @@ -25,7 +25,7 @@ public static Ingredient ofItems(Item... items) { } public static Ingredient ofItem(Item items) { - return of(net.minecraft.recipe.Ingredient.ofItem(items)); + return of(net.minecraft.recipe.Ingredient.ofItems(items)); } public static Ingredient fromTagById(CompatIdentifier id) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java index 29ebedd43..0e9aa4ea3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java @@ -11,14 +11,12 @@ import java.util.List; public class ServerRecipeManager extends RecipeManager { - private net.minecraft.recipe.ServerRecipeManager serverRecipeManager; - protected ServerRecipeManager(net.minecraft.recipe.ServerRecipeManager serverRecipeManager) { - super(null); - this.serverRecipeManager = serverRecipeManager; + protected ServerRecipeManager(net.minecraft.recipe.RecipeManager recipeManager) { + super(recipeManager); } - public static ServerRecipeManager of(net.minecraft.recipe.ServerRecipeManager serverRecipeManager) { + public static ServerRecipeManager of(net.minecraft.recipe.RecipeManager serverRecipeManager) { return new ServerRecipeManager(serverRecipeManager); } @@ -30,24 +28,14 @@ public static ServerRecipeManager of(ServerWorld world) { return of(world.getRaw()); } - @Override - public net.minecraft.recipe.ServerRecipeManager getRaw() { - return serverRecipeManager; - } - - @Override - public net.minecraft.recipe.ServerRecipeManager toMinecraft() { - return getRaw(); - } - @Deprecated public Collection> getRawRecipes() { - return serverRecipeManager.values(); + return getRaw().values(); } public Collection getRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { recipes.add(RecipeEntry.of(recipe)); } @@ -56,7 +44,7 @@ public Collection getRecipeEntries() { public Collection getCraftingRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { if (recipe.value() instanceof net.minecraft.recipe.CraftingRecipe) { recipes.add(CraftingRecipeEntry.of(recipe)); } @@ -67,7 +55,7 @@ public Collection getCraftingRecipeEntries() { public Collection getShapelessRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { recipes.add(ShapelessRecipeEntry.of(recipe)); } @@ -78,7 +66,7 @@ public Collection getShapelessRecipeEntries() { public Collection getShapedRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { recipes.add(ShapedRecipeEntry.of(recipe)); } @@ -89,7 +77,7 @@ public Collection getShapedRecipeEntries() { public Collection getNormalRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { recipes.add(ShapelessRecipeEntry.of(recipe)); } else if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { @@ -102,7 +90,7 @@ public Collection getNormalRecipeEntries() { public Collection getRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { recipes.add(Recipe.of(recipe.value())); } @@ -111,7 +99,7 @@ public Collection getRecipes() { public Collection getCraftingRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { if (recipe.value() instanceof net.minecraft.recipe.CraftingRecipe) { recipes.add(CraftingRecipe.of((net.minecraft.recipe.CraftingRecipe) recipe.value())); } @@ -122,7 +110,7 @@ public Collection getCraftingRecipes() { public Collection getShapelessRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { recipes.add(ShapelessRecipe.of((net.minecraft.recipe.ShapelessRecipe) recipe.value())); } @@ -133,7 +121,7 @@ public Collection getShapelessRecipes() { public Collection getShapedRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { recipes.add(ShapedRecipe.of((net.minecraft.recipe.ShapedRecipe) recipe.value())); } @@ -144,7 +132,7 @@ public Collection getShapedRecipes() { public Collection getNormalRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : serverRecipeManager.values()) { + for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { recipes.add(ShapelessRecipe.of((net.minecraft.recipe.ShapelessRecipe) recipe.value())); } else if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java index 6dff1c145..879746910 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java @@ -1,8 +1,5 @@ package net.pitan76.mcpitanlib.midohra.recipe.entry; -import net.minecraft.recipe.Recipe; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.midohra.recipe.CraftingRecipe; @@ -23,8 +20,7 @@ public static CraftingRecipeEntry of(net.minecraft.recipe.RecipeEntry recipeE } public static CraftingRecipeEntry of(net.minecraft.recipe.CraftingRecipe recipe, CompatIdentifier id) { - RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, id.toMinecraft()); - net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(key, recipe); + net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(id.toMinecraft(), recipe); return of(recipeEntry); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java index 9e7814374..bd5658b7d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java @@ -1,7 +1,5 @@ package net.pitan76.mcpitanlib.midohra.recipe.entry; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeEntry; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.midohra.recipe.CraftingRecipe; @@ -20,8 +18,7 @@ public static RecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { } public static RecipeEntry of(net.minecraft.recipe.Recipe recipe, CompatIdentifier id) { - RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, id.toMinecraft()); - net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(key, recipe); + net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(id.toMinecraft(), recipe); return of(recipeEntry); } @@ -62,7 +59,7 @@ public net.minecraft.recipe.RecipeEntry toMinecraft() { } public CompatIdentifier getId() { - return CompatIdentifier.fromMinecraft(getRaw().id().getValue()); + return CompatIdentifier.fromMinecraft(getRaw().id()); } public CompatRecipeEntry toCompatRecipeEntry() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java index 569564a95..aeabb3868 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java @@ -1,8 +1,5 @@ package net.pitan76.mcpitanlib.midohra.recipe.entry; -import net.minecraft.recipe.Recipe; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.midohra.recipe.ShapedRecipe; @@ -23,8 +20,7 @@ public static ShapedRecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEnt } public static ShapedRecipeEntry of(net.minecraft.recipe.ShapedRecipe recipe, CompatIdentifier id) { - RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, id.toMinecraft()); - net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(key, recipe); + net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(id.toMinecraft(), recipe); return of(recipeEntry); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java index 2026084bd..e834796af 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java @@ -1,8 +1,5 @@ package net.pitan76.mcpitanlib.midohra.recipe.entry; -import net.minecraft.recipe.Recipe; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.midohra.recipe.ShapelessRecipe; @@ -23,8 +20,7 @@ public static ShapelessRecipeEntry of(net.minecraft.recipe.RecipeEntry recipe } public static ShapelessRecipeEntry of(net.minecraft.recipe.ShapelessRecipe recipe, CompatIdentifier id) { - RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, id.toMinecraft()); - net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(key, recipe); + net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(id.toMinecraft(), recipe); return of(recipeEntry); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java index dac9944c4..a602c1ff4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java @@ -44,7 +44,7 @@ public boolean isNone() { public int size() { if (isNone()) return 0; - return getRaw().size(); + return getRaw().getSize(); } public boolean isEmpty() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java index 71d4e29d9..b27752769 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java @@ -13,7 +13,7 @@ public class ChunkTicketType { public static final ChunkTicketType PLAYER = of(net.minecraft.server.world.ChunkTicketType.PLAYER); public static final ChunkTicketType FORCED = of(net.minecraft.server.world.ChunkTicketType.FORCED); public static final ChunkTicketType PORTAL = of(net.minecraft.server.world.ChunkTicketType.PORTAL); - public static final ChunkTicketType ENDER_PEARL = of(net.minecraft.server.world.ChunkTicketType.ENDER_PEARL); + public static final ChunkTicketType ENDER_PEARL = of(net.minecraft.server.world.ChunkTicketType.UNKNOWN); public static final ChunkTicketType POST_TELEPORT = of(net.minecraft.server.world.ChunkTicketType.POST_TELEPORT); public static final ChunkTicketType UNKNOWN = of(net.minecraft.server.world.ChunkTicketType.UNKNOWN); From 9d349d27e2b761efdb9c9d4182cd92633077e0cb Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sat, 16 Nov 2024 14:34:25 +0900 Subject: [PATCH 414/617] fix 1204 --- .../pitan76/mcpitanlib/api/util/collection/ItemStackList.java | 4 ++-- .../midohra/recipe/input/RecipeInputOrInventory.java | 2 +- .../net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java index cf2c0fc8a..bdf49d742 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java @@ -92,11 +92,11 @@ public List toMidohra() { } public net.pitan76.mcpitanlib.midohra.item.ItemStack getFirstAsMidohra() { - return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getFirst()); + return getAsMidohra(0); } public net.pitan76.mcpitanlib.midohra.item.ItemStack getLastAsMidohra() { - return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getLast()); + return getAsMidohra(size() - 1); } public boolean add(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java index a602c1ff4..dac9944c4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/input/RecipeInputOrInventory.java @@ -44,7 +44,7 @@ public boolean isNone() { public int size() { if (isNone()) return 0; - return getRaw().getSize(); + return getRaw().size(); } public boolean isEmpty() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java index da5a979e7..b8328d356 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java @@ -133,7 +133,7 @@ public int getChebyshevDistance(ChunkPos pos) { } public int getChebyshevDistance(int x, int z) { - return getRaw().getChebyshevDistance(x, z); + return getChebyshevDistance(of(x, z)); } public int getSquaredDistance(ChunkPos pos) { From f7a2f47daeac63a0be2961203af5d249f1d58edf Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 23 Nov 2024 23:54:43 +0900 Subject: [PATCH 415/617] fix 1201 --- .../midohra/recipe/ServerRecipeManager.java | 72 +++++++++---------- .../recipe/entry/CraftingRecipeEntry.java | 30 ++++---- .../midohra/recipe/entry/RecipeEntry.java | 34 +++++---- .../recipe/entry/ShapedRecipeEntry.java | 30 ++++---- .../recipe/entry/ShapelessRecipeEntry.java | 30 ++++---- .../midohra/util/math/ChunkPos.java | 6 +- 6 files changed, 93 insertions(+), 109 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java index 0e9aa4ea3..9c440109b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ServerRecipeManager.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.midohra.recipe; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.midohra.recipe.entry.CraftingRecipeEntry; import net.pitan76.mcpitanlib.midohra.recipe.entry.RecipeEntry; import net.pitan76.mcpitanlib.midohra.recipe.entry.ShapedRecipeEntry; @@ -27,16 +28,11 @@ public static ServerRecipeManager of(net.minecraft.server.world.ServerWorld worl public static ServerRecipeManager of(ServerWorld world) { return of(world.getRaw()); } - - @Deprecated - public Collection> getRawRecipes() { - return getRaw().values(); - } - + public Collection getRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - recipes.add(RecipeEntry.of(recipe)); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + recipes.add(RecipeEntry.of(recipe, CompatIdentifier.fromMinecraft(recipe.getId()))); } return recipes; @@ -44,9 +40,9 @@ public Collection getRecipeEntries() { public Collection getCraftingRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - if (recipe.value() instanceof net.minecraft.recipe.CraftingRecipe) { - recipes.add(CraftingRecipeEntry.of(recipe)); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + if (recipe instanceof net.minecraft.recipe.CraftingRecipe) { + recipes.add(CraftingRecipeEntry.of((net.minecraft.recipe.CraftingRecipe) recipe, CompatIdentifier.fromMinecraft(recipe.getId()))); } } @@ -55,9 +51,9 @@ public Collection getCraftingRecipeEntries() { public Collection getShapelessRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { - recipes.add(ShapelessRecipeEntry.of(recipe)); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + if (recipe instanceof net.minecraft.recipe.ShapelessRecipe) { + recipes.add(ShapelessRecipeEntry.of((net.minecraft.recipe.ShapelessRecipe) recipe, CompatIdentifier.fromMinecraft(recipe.getId()))); } } @@ -66,9 +62,9 @@ public Collection getShapelessRecipeEntries() { public Collection getShapedRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { - recipes.add(ShapedRecipeEntry.of(recipe)); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + if (recipe instanceof net.minecraft.recipe.ShapedRecipe) { + recipes.add(ShapedRecipeEntry.of((net.minecraft.recipe.ShapedRecipe) recipe, CompatIdentifier.fromMinecraft(recipe.getId()))); } } @@ -77,11 +73,11 @@ public Collection getShapedRecipeEntries() { public Collection getNormalRecipeEntries() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { - recipes.add(ShapelessRecipeEntry.of(recipe)); - } else if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { - recipes.add(ShapedRecipeEntry.of(recipe)); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + if (recipe instanceof net.minecraft.recipe.ShapelessRecipe) { + recipes.add(ShapelessRecipeEntry.of((net.minecraft.recipe.ShapelessRecipe) recipe, CompatIdentifier.fromMinecraft(recipe.getId()))); + } else if (recipe instanceof net.minecraft.recipe.ShapedRecipe) { + recipes.add(ShapedRecipeEntry.of((net.minecraft.recipe.ShapedRecipe) recipe, CompatIdentifier.fromMinecraft(recipe.getId()))); } } @@ -90,8 +86,8 @@ public Collection getNormalRecipeEntries() { public Collection getRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - recipes.add(Recipe.of(recipe.value())); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + recipes.add(Recipe.of(recipe)); } return recipes; @@ -99,9 +95,9 @@ public Collection getRecipes() { public Collection getCraftingRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - if (recipe.value() instanceof net.minecraft.recipe.CraftingRecipe) { - recipes.add(CraftingRecipe.of((net.minecraft.recipe.CraftingRecipe) recipe.value())); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + if (recipe instanceof net.minecraft.recipe.CraftingRecipe) { + recipes.add(CraftingRecipe.of((net.minecraft.recipe.CraftingRecipe) recipe)); } } @@ -110,9 +106,9 @@ public Collection getCraftingRecipes() { public Collection getShapelessRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { - recipes.add(ShapelessRecipe.of((net.minecraft.recipe.ShapelessRecipe) recipe.value())); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + if (recipe instanceof net.minecraft.recipe.ShapelessRecipe) { + recipes.add(ShapelessRecipe.of((net.minecraft.recipe.ShapelessRecipe) recipe)); } } @@ -121,9 +117,9 @@ public Collection getShapelessRecipes() { public Collection getShapedRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { - recipes.add(ShapedRecipe.of((net.minecraft.recipe.ShapedRecipe) recipe.value())); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + if (recipe instanceof net.minecraft.recipe.ShapedRecipe) { + recipes.add(ShapedRecipe.of((net.minecraft.recipe.ShapedRecipe) recipe)); } } @@ -132,11 +128,11 @@ public Collection getShapedRecipes() { public Collection getNormalRecipes() { List recipes = new ArrayList<>(); - for (net.minecraft.recipe.RecipeEntry recipe : getRaw().values()) { - if (recipe.value() instanceof net.minecraft.recipe.ShapelessRecipe) { - recipes.add(ShapelessRecipe.of((net.minecraft.recipe.ShapelessRecipe) recipe.value())); - } else if (recipe.value() instanceof net.minecraft.recipe.ShapedRecipe) { - recipes.add(ShapedRecipe.of((net.minecraft.recipe.ShapedRecipe) recipe.value())); + for (net.minecraft.recipe.Recipe recipe : getRaw().values()) { + if (recipe instanceof net.minecraft.recipe.ShapelessRecipe) { + recipes.add(ShapelessRecipe.of((net.minecraft.recipe.ShapelessRecipe) recipe)); + } else if (recipe instanceof net.minecraft.recipe.ShapedRecipe) { + recipes.add(ShapedRecipe.of((net.minecraft.recipe.ShapedRecipe) recipe)); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java index 879746910..773b32e04 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/CraftingRecipeEntry.java @@ -4,38 +4,32 @@ import net.pitan76.mcpitanlib.midohra.recipe.CraftingRecipe; public class CraftingRecipeEntry extends RecipeEntry { - private final net.minecraft.recipe.RecipeEntry recipeEntry; + private final CraftingRecipe recipe; - protected CraftingRecipeEntry(net.minecraft.recipe.RecipeEntry recipeEntry) { - super(null); - this.recipeEntry = recipeEntry; + protected CraftingRecipeEntry(CraftingRecipe recipe, CompatIdentifier id) { + super(null, id); + this.recipe = recipe; } - public static CraftingRecipeEntry _of(net.minecraft.recipe.RecipeEntry recipeEntry) { - return new CraftingRecipeEntry(recipeEntry); - } - - public static CraftingRecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { - return _of((net.minecraft.recipe.RecipeEntry) recipeEntry); + protected CraftingRecipeEntry(CraftingRecipe recipe) { + this(recipe, CompatIdentifier.fromMinecraft(recipe.getRaw().getId())); } public static CraftingRecipeEntry of(net.minecraft.recipe.CraftingRecipe recipe, CompatIdentifier id) { - net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(id.toMinecraft(), recipe); - - return of(recipeEntry); + return of(CraftingRecipe.of(recipe), id); } public static CraftingRecipeEntry of(CraftingRecipe recipe, CompatIdentifier id) { - return of(recipe.toMinecraft(), id); + return new CraftingRecipeEntry(recipe, id); } @Override - public net.minecraft.recipe.RecipeEntry getRaw() { - return recipeEntry; + public net.minecraft.recipe.CraftingRecipe getRaw() { + return recipe.getRaw(); } @Override - public net.minecraft.recipe.RecipeEntry toMinecraft() { + public net.minecraft.recipe.CraftingRecipe toMinecraft() { return getRaw(); } @@ -46,6 +40,6 @@ public CraftingRecipe getRecipe() { @Override public net.minecraft.recipe.CraftingRecipe getRawRecipe() { - return getRaw().value(); + return getRaw(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java index bd5658b7d..7480d6525 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/RecipeEntry.java @@ -7,23 +7,24 @@ import net.pitan76.mcpitanlib.midohra.recipe.RecipeType; public class RecipeEntry { - private final net.minecraft.recipe.RecipeEntry recipeEntry; + private final Recipe recipe; + private final CompatIdentifier id; - protected RecipeEntry(net.minecraft.recipe.RecipeEntry recipeEntry) { - this.recipeEntry = recipeEntry; + protected RecipeEntry(Recipe recipe, CompatIdentifier id) { + this.recipe = recipe; + this.id = id; } - public static RecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { - return new RecipeEntry(recipeEntry); + protected RecipeEntry(Recipe recipe) { + this(recipe, CompatIdentifier.fromMinecraft(recipe.getRaw().getId())); } public static RecipeEntry of(net.minecraft.recipe.Recipe recipe, CompatIdentifier id) { - net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(id.toMinecraft(), recipe); - return of(recipeEntry); + return of(Recipe.of(recipe), id); } public static RecipeEntry of(Recipe recipe, CompatIdentifier id) { - return of(recipe.toMinecraft(), id); + return new RecipeEntry(recipe, id); } public static CraftingRecipeEntry of(net.minecraft.recipe.CraftingRecipe recipe, CompatIdentifier id) { @@ -50,16 +51,19 @@ public static ShapelessRecipeEntry of(net.pitan76.mcpitanlib.midohra.recipe.Shap return ShapelessRecipeEntry.of(recipe, id); } - public net.minecraft.recipe.RecipeEntry getRaw() { - return recipeEntry; + public net.minecraft.recipe.Recipe getRaw() { + return recipe.getRaw(); } - public net.minecraft.recipe.RecipeEntry toMinecraft() { + public net.minecraft.recipe.Recipe toMinecraft() { return getRaw(); } public CompatIdentifier getId() { - return CompatIdentifier.fromMinecraft(getRaw().id()); + if (id == null) + return CompatIdentifier.fromMinecraft(getRaw().getId()); + + return id; } public CompatRecipeEntry toCompatRecipeEntry() { @@ -67,11 +71,11 @@ public CompatRecipeEntry toCompatRecipeEntry() { } public net.minecraft.recipe.Recipe getRawRecipe() { - return getRaw().value(); + return getRaw(); } public Recipe getRecipe() { - return Recipe.of(getRaw().value()); + return Recipe.of(getRaw()); } public RecipeType getRecipeType() { @@ -79,6 +83,6 @@ public RecipeType getRecipeType() { } public net.minecraft.recipe.RecipeType getRawRecipeType() { - return getRaw().value().getType(); + return getRaw().getType(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java index aeabb3868..6213dfe6c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapedRecipeEntry.java @@ -4,38 +4,32 @@ import net.pitan76.mcpitanlib.midohra.recipe.ShapedRecipe; public class ShapedRecipeEntry extends RecipeEntry { - private final net.minecraft.recipe.RecipeEntry recipeEntry; + private final ShapedRecipe recipe; - protected ShapedRecipeEntry(net.minecraft.recipe.RecipeEntry recipeEntry) { - super(null); - this.recipeEntry = recipeEntry; + protected ShapedRecipeEntry(ShapedRecipe recipe, CompatIdentifier id) { + super(null, id); + this.recipe = recipe; } - public static ShapedRecipeEntry _of(net.minecraft.recipe.RecipeEntry recipeEntry) { - return new ShapedRecipeEntry(recipeEntry); - } - - public static ShapedRecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { - return _of((net.minecraft.recipe.RecipeEntry) recipeEntry); + protected ShapedRecipeEntry(ShapedRecipe recipe) { + this(recipe, CompatIdentifier.fromMinecraft(recipe.getRaw().getId())); } public static ShapedRecipeEntry of(net.minecraft.recipe.ShapedRecipe recipe, CompatIdentifier id) { - net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(id.toMinecraft(), recipe); - - return of(recipeEntry); + return of(ShapedRecipe.of(recipe), id); } public static ShapedRecipeEntry of(ShapedRecipe recipe, CompatIdentifier id) { - return of(recipe.toMinecraft(), id); + return new ShapedRecipeEntry(recipe, id); } @Override - public net.minecraft.recipe.RecipeEntry getRaw() { - return recipeEntry; + public net.minecraft.recipe.ShapedRecipe getRaw() { + return recipe.getRaw(); } @Override - public net.minecraft.recipe.RecipeEntry toMinecraft() { + public net.minecraft.recipe.ShapedRecipe toMinecraft() { return getRaw(); } @@ -46,6 +40,6 @@ public ShapedRecipe getRecipe() { @Override public net.minecraft.recipe.ShapedRecipe getRawRecipe() { - return getRaw().value(); + return getRaw(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java index e834796af..c6465100b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/entry/ShapelessRecipeEntry.java @@ -4,38 +4,32 @@ import net.pitan76.mcpitanlib.midohra.recipe.ShapelessRecipe; public class ShapelessRecipeEntry extends RecipeEntry { - private final net.minecraft.recipe.RecipeEntry recipeEntry; + private final ShapelessRecipe recipe; - protected ShapelessRecipeEntry(net.minecraft.recipe.RecipeEntry recipeEntry) { - super(null); - this.recipeEntry = recipeEntry; + protected ShapelessRecipeEntry(ShapelessRecipe recipe, CompatIdentifier id) { + super(null, id); + this.recipe = recipe; } - public static ShapelessRecipeEntry _of(net.minecraft.recipe.RecipeEntry recipeEntry) { - return new ShapelessRecipeEntry(recipeEntry); - } - - public static ShapelessRecipeEntry of(net.minecraft.recipe.RecipeEntry recipeEntry) { - return _of((net.minecraft.recipe.RecipeEntry) recipeEntry); + protected ShapelessRecipeEntry(ShapelessRecipe recipe) { + this(recipe, CompatIdentifier.fromMinecraft(recipe.getRaw().getId())); } public static ShapelessRecipeEntry of(net.minecraft.recipe.ShapelessRecipe recipe, CompatIdentifier id) { - net.minecraft.recipe.RecipeEntry recipeEntry = new net.minecraft.recipe.RecipeEntry<>(id.toMinecraft(), recipe); - - return of(recipeEntry); + return of(ShapelessRecipe.of(recipe), id); } public static ShapelessRecipeEntry of(ShapelessRecipe recipe, CompatIdentifier id) { - return of(recipe.toMinecraft(), id); + return new ShapelessRecipeEntry(recipe, id); } @Override - public net.minecraft.recipe.RecipeEntry getRaw() { - return recipeEntry; + public net.minecraft.recipe.ShapelessRecipe getRaw() { + return recipe.getRaw(); } @Override - public net.minecraft.recipe.RecipeEntry toMinecraft() { + public net.minecraft.recipe.ShapelessRecipe toMinecraft() { return getRaw(); } @@ -46,6 +40,6 @@ public ShapelessRecipe getRecipe() { @Override public net.minecraft.recipe.ShapelessRecipe getRawRecipe() { - return getRaw().value(); + return getRaw(); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java index b8328d356..35a933490 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java @@ -137,11 +137,13 @@ public int getChebyshevDistance(int x, int z) { } public int getSquaredDistance(ChunkPos pos) { - return getRaw().getSquaredDistance(pos.getRaw()); + int dx = getX() - pos.getX(); + int dz = getZ() - pos.getZ(); + return dx * dx + dz * dz; } public int getSquaredDistance(long pos) { - return getRaw().getSquaredDistance(pos); + return getSquaredDistance(of(pos)); } public static Stream stream(ChunkPos center, int radius) { From 9d16cbb708b448a7e183d3a2b480ac84a35e271b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 24 Nov 2024 00:01:46 +0900 Subject: [PATCH 416/617] fix 1192 --- .../mcpitanlib/midohra/recipe/CraftingRecipe.java | 7 +------ .../net/pitan76/mcpitanlib/midohra/recipe/Recipe.java | 2 +- .../pitan76/mcpitanlib/midohra/recipe/RecipeType.java | 11 ++++++++--- .../mcpitanlib/midohra/recipe/ShapedRecipe.java | 2 +- .../mcpitanlib/midohra/recipe/ShapelessRecipe.java | 2 +- .../pitan76/mcpitanlib/midohra/world/ServerWorld.java | 4 ++-- .../net/pitan76/mcpitanlib/midohra/world/World.java | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java index 19dc78b43..86319a8b8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.midohra.recipe; -import net.minecraft.recipe.book.CraftingRecipeCategory; import net.minecraft.util.collection.DefaultedList; import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; import net.pitan76.mcpitanlib.midohra.item.ItemStack; @@ -27,16 +26,12 @@ public net.minecraft.recipe.CraftingRecipe toMinecraft() { return getRaw(); } - public CraftingRecipeCategory getRawCategory() { - return getRaw().getCategory(); - } - public boolean matches(CraftingRecipeInputOrInventory input, World world) { return getRaw().matches(input.getRaw(), world.getRaw()); } public net.minecraft.item.ItemStack craft(CraftingRecipeInputOrInventory input, World world) { - return getRaw().craft(input.getRaw(), world.getRaw().getRegistryManager()); + return getRaw().craft(input.getRaw()); } public ItemStack craftMidohra(CraftingRecipeInputOrInventory input, World world) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java index c25531977..2ff032965 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/Recipe.java @@ -70,7 +70,7 @@ public boolean matches(TypedRecipeInputOrInventory inpu } public net.minecraft.item.ItemStack craft(TypedRecipeInputOrInventory input, World world) { - return ((net.minecraft.recipe.Recipe)getRaw()).craft(input.getRecipeInput(), world.getRaw().getRegistryManager()); + return ((net.minecraft.recipe.Recipe)getRaw()).craft(input.getRecipeInput()); } public ItemStack craftMidohra(TypedRecipeInputOrInventory input, World world) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java index f8163934b..c51b514b3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.midohra.recipe; -import net.minecraft.registry.Registries; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; public class RecipeType { @@ -39,7 +40,7 @@ public static RecipeType of(net.minecraft.recipe.RecipeType recipeType) { } public static RecipeType of(CompatIdentifier id) { - return of(Registries.RECIPE_TYPE.get(id.toMinecraft())); + return of(Registry.RECIPE_TYPE.get(id.toMinecraft())); } public net.minecraft.recipe.RecipeType getRaw() { @@ -51,7 +52,11 @@ public net.minecraft.recipe.RecipeType toMinecraft() { } public CompatIdentifier getId() { - return CompatIdentifier.fromMinecraft(Registries.RECIPE_TYPE.getId(recipeType)); + Identifier id = Registry.RECIPE_TYPE.getId(recipeType); + if (id == null) + return CompatIdentifier.empty(); + + return CompatIdentifier.fromMinecraft(id); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java index b2c9a2adf..acd751e2a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java @@ -28,7 +28,7 @@ public boolean matches(CraftingRecipeInputOrInventory input) { } public net.minecraft.item.ItemStack craft() { - return getRaw().craft(null, null); + return getRaw().craft(null); } public ItemStack craftMidohra() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java index 373faf623..68776c79b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java @@ -28,7 +28,7 @@ public boolean matches(CraftingRecipeInputOrInventory input) { } public net.minecraft.item.ItemStack craft() { - return getRaw().craft(null, null); + return getRaw().craft(null); } public ItemStack craftMidohra() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java index 9ee497435..b0ae644d9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java @@ -33,11 +33,11 @@ public net.minecraft.server.world.ServerWorld toMinecraft() { } public void playSound(Player player, BlockPos pos, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch, long seed) { - getRaw().playSound(player.getEntity(), pos.getX(), pos.getY(), pos.getZ(), sound.getEntry(), category.get(), volume, pitch, seed); + getRaw().playSound(player.getEntity(), pos.getX(), pos.getY(), pos.getZ(), sound.get(), category.get(), volume, pitch, seed); } public void playSoundFromEntity(Player player, Player target, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch, long seed) { - getRaw().playSoundFromEntity(player.getEntity(), target.getEntity(), sound.getEntry(), category.get(), volume, pitch, seed); + getRaw().playSoundFromEntity(player.getEntity(), target.getEntity(), sound.get(), category.get(), volume, pitch, seed); } public MinecraftServer getServer() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java index f02010947..35b48bedb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java @@ -110,7 +110,7 @@ public RecipeManager getRecipeManager() { @Deprecated @Override public void playSound(PlayerEntity playerEntity, net.minecraft.util.math.BlockPos pos, SoundEvent sound, SoundCategory category) { - getRaw().playSound(playerEntity, pos, sound, category); + getRaw().playSound(playerEntity, pos, sound, category, 1f, 1f); } @Deprecated From 008b546301494acfd23702b105e6e0ac97a702c5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 24 Nov 2024 00:09:18 +0900 Subject: [PATCH 417/617] fix 1182 --- .../mcpitanlib/midohra/server/PlayerManager.java | 11 +++++++++-- .../mcpitanlib/midohra/util/math/ChunkPos.java | 4 ++-- .../pitan76/mcpitanlib/midohra/world/ServerWorld.java | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/PlayerManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/PlayerManager.java index 22dd9fcd3..d89cb98c2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/PlayerManager.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/PlayerManager.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.midohra.server; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.MessageType; import net.minecraft.server.BannedIpList; import net.minecraft.server.BannedPlayerList; import net.minecraft.server.MinecraftServer; @@ -51,7 +52,10 @@ public net.minecraft.server.PlayerManager toMinecraft() { } public void broadcast(TextComponent message, boolean overlay) { - getRaw().broadcast(message.getText(), overlay); + if (overlay) + getRaw().broadcast(message.getText(), MessageType.SYSTEM, UUID.randomUUID()); + else + getRaw().broadcast(message.getText(), MessageType.CHAT, UUID.randomUUID()); } public void broadcast(TextComponent message) { @@ -59,7 +63,10 @@ public void broadcast(TextComponent message) { } public void broadcast(String message, boolean overlay) { - getRaw().broadcast(TextUtil.literal(message), overlay); + if (overlay) + getRaw().broadcast(TextUtil.literal(message), MessageType.SYSTEM, UUID.randomUUID()); + else + getRaw().broadcast(TextUtil.literal(message), MessageType.CHAT, UUID.randomUUID()); } public void broadcast(String message) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java index 35a933490..b8a7f17a5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/ChunkPos.java @@ -26,11 +26,11 @@ public static ChunkPos of(long pos) { } public static ChunkPos fromRegion(int x, int z) { - return of(net.minecraft.util.math.ChunkPos.fromRegion(x, z)); + return of(x << 5, z << 5); } public static ChunkPos fromRegionCenter(int x, int z) { - return of(net.minecraft.util.math.ChunkPos.fromRegionCenter(x, z)); + return of(x - 16, z - 16); } public net.minecraft.util.math.ChunkPos getRaw() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java index b0ae644d9..f53b06368 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/ServerWorld.java @@ -33,11 +33,11 @@ public net.minecraft.server.world.ServerWorld toMinecraft() { } public void playSound(Player player, BlockPos pos, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch, long seed) { - getRaw().playSound(player.getEntity(), pos.getX(), pos.getY(), pos.getZ(), sound.get(), category.get(), volume, pitch, seed); + getRaw().playSound(player.getEntity(), pos.getX(), pos.getY(), pos.getZ(), sound.get(), category.get(), volume, pitch); } public void playSoundFromEntity(Player player, Player target, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch, long seed) { - getRaw().playSoundFromEntity(player.getEntity(), target.getEntity(), sound.get(), category.get(), volume, pitch, seed); + getRaw().playSoundFromEntity(player.getEntity(), target.getEntity(), sound.get(), category.get(), volume, pitch); } public MinecraftServer getServer() { From 2ef862c98b3bad2e4b7d368d1ca2f3c3f66c3072 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Tue, 26 Nov 2024 18:32:00 +0900 Subject: [PATCH 418/617] add APIs --- .../api/block/v2/CompatBlockProvider.java | 78 +++++++++++++++ .../api/block/v2/CompatStairsBlock.java | 13 +++ .../midohra/easybuilder/BlockBuilder.java | 68 +++++++++++++- .../midohra/easybuilder/BuiltBlock.java | 74 ++++++++++++++- .../midohra/easybuilder/BuiltItem.java | 34 +++++-- .../midohra/easybuilder/ItemBuilder.java | 17 +++- .../AbstractBlock4CompatProviderMixin.java | 94 +++++++++++++++++++ .../mcpitanlib/mixin/AbstractBlockMixin.java | 5 +- .../mixin/Block4CompatProviderMixin.java | 28 ++++++ .../mcpitanlib/mixin/BlockInvoker.java | 12 +++ .../pitan76/mcpitanlib/mixin/ItemMixin.java | 19 ++-- .../resources/mcpitanlib-common.mixins.json | 3 + info.properties | 4 +- 13 files changed, 416 insertions(+), 33 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlock4CompatProviderMixin.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/mixin/Block4CompatProviderMixin.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java index 5a5d7fe80..c6e9f1050 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java @@ -1,8 +1,19 @@ package net.pitan76.mcpitanlib.api.block.v2; import net.minecraft.block.Block; +import net.minecraft.util.shape.VoxelShape; +import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider; +import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; +import net.pitan76.mcpitanlib.api.block.args.RotateArgs; +import net.pitan76.mcpitanlib.api.block.args.SideInvisibleArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.CollisionShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; +import net.pitan76.mcpitanlib.midohra.block.BlockState; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.mixin.BlockInvoker; public interface CompatBlockProvider extends ExtendBlockProvider { CompatibleBlockSettings getCompatSettings(); @@ -10,4 +21,71 @@ public interface CompatBlockProvider extends ExtendBlockProvider { default BlockWrapper getWrapper() { return this instanceof Block ? BlockWrapper.of((Block) this) : BlockWrapper.of(); } + + default CompatBlockRenderType getRenderType(RenderTypeArgs args, Options options) { + options.cancel = false; + return null; + } + + default BlockState rotate(RotateArgs args, Options options) { + options.cancel = false; + return null; + } + + default Boolean isSideInvisible(SideInvisibleArgs args, Options options) { + options.cancel = false; + return null; + } + + default BlockState getDefaultMidohraState() { + if (this instanceof Block) { + return BlockState.of(((Block) this).getDefaultState()); + } + + return null; + } + + default void setDefaultState(BlockState state) { + if (this instanceof Block) { + ((BlockInvoker) this).setDefaultState(state.toMinecraft()); + } + } + + @Override + @Deprecated + default net.minecraft.block.BlockState getPlacementState(net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs args, Options options) { + return ExtendBlockProvider.super.getPlacementState(args, options); + } + + default BlockState getPlacementState(PlacementStateArgs args, Options options) { + options.cancel = false; + return null; + } + + default BlockState getStateForNeighborUpdate(StateForNeighborUpdateArgs args, Options options) { + options.cancel = false; + return null; + } + + @Override + @Deprecated + default VoxelShape getOutlineShape(net.pitan76.mcpitanlib.api.event.block.OutlineShapeEvent event, Options options) { + return ExtendBlockProvider.super.getOutlineShape(event, options); + } + + default VoxelShape getOutlineShape(OutlineShapeEvent event, Options options) { + options.cancel = false; + return null; + } + + @Deprecated + @Override + default VoxelShape getCollisionShape(net.pitan76.mcpitanlib.api.event.block.CollisionShapeEvent event, Options options) { + return ExtendBlockProvider.super.getCollisionShape(event, options); + } + + default VoxelShape getCollisionShape(CollisionShapeEvent event, Options options) { + options.cancel = false; + return null; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java new file mode 100644 index 000000000..479bb5d56 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java @@ -0,0 +1,13 @@ +package net.pitan76.mcpitanlib.api.block.v2; + +import net.pitan76.mcpitanlib.midohra.block.BlockState; + +public class CompatStairsBlock extends net.pitan76.mcpitanlib.api.block.CompatStairsBlock { + public CompatStairsBlock(net.minecraft.block.BlockState baseBlockState, CompatibleBlockSettings settings) { + super(baseBlockState, settings); + } + + public CompatStairsBlock(BlockState baseBlockState, CompatibleBlockSettings settings) { + this(baseBlockState.toMinecraft(), settings); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java index cd1b5e9fe..4ac919323 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -1,8 +1,15 @@ package net.pitan76.mcpitanlib.midohra.easybuilder; import net.minecraft.item.Item; +import net.minecraft.util.shape.VoxelShape; +import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; import net.pitan76.mcpitanlib.api.block.ExtendBlock; +import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.CollisionShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; import net.pitan76.mcpitanlib.api.block.v2.BlockSettingsBuilder; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; @@ -19,13 +26,12 @@ import net.pitan76.mcpitanlib.api.util.item.ItemUtil; import net.pitan76.mcpitanlib.core.datafixer.Pair; import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; +import org.jetbrains.annotations.Nullable; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Supplier; -import java.util.function.ToIntFunction; +import java.util.function.*; public class BlockBuilder { @@ -34,6 +40,13 @@ public class BlockBuilder { public Consumer onStateReplaced; public Consumer onAppendTooltip; public Consumer onAppendProperties; + public BlockState defaultState; + public BiConsumer onInit; + public Function onOutlineShape; + public Function onCollisionShape; + public Function onRenderType; + public Function onPlacementState; + public Function onStateForNeighborUpdate; public BlockBuilder(BlockSettingsBuilder settingsBuilder) { this.settingsBuilder = settingsBuilder; @@ -151,4 +164,51 @@ public BlockBuilder onAppendProperties(Consumer onAppendPr this.onAppendProperties = onAppendProperties; return this; } + + public BlockBuilder onOutlineShape(Function onOutlineShape) { + this.onOutlineShape = onOutlineShape; + return this; + } + + public BlockBuilder onCollisionShape(Function onCollisionShape) { + this.onCollisionShape = onCollisionShape; + return this; + } + + public BlockBuilder onRenderType(Function onRenderType) { + this.onRenderType = onRenderType; + return this; + } + + public BlockBuilder onPlacementState(Function onPlacementState) { + this.onPlacementState = onPlacementState; + return this; + } + + public BlockBuilder onStateForNeighborUpdate(Function onStateForNeighborUpdate) { + this.onStateForNeighborUpdate = onStateForNeighborUpdate; + return this; + } + + public BlockBuilder setOutlineShape(VoxelShape shape) { + return onOutlineShape(e -> shape); + } + + public BlockBuilder setCollisionShape(VoxelShape shape) { + return onCollisionShape(e -> shape); + } + + public BlockBuilder setRenderType(CompatBlockRenderType renderType) { + return onRenderType(e -> renderType); + } + + public BlockBuilder onInit(BiConsumer onInit) { + this.onInit = onInit; + return this; + } + + public BlockBuilder setDefaultState(BlockState defaultState) { + this.defaultState = defaultState; + return this; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java index 837d1c5ac..ea68267c5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java @@ -1,5 +1,12 @@ package net.pitan76.mcpitanlib.midohra.easybuilder; +import net.minecraft.util.shape.VoxelShape; +import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; +import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.CollisionShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; import net.pitan76.mcpitanlib.api.block.v2.CompatBlock; import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; @@ -8,6 +15,8 @@ import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; import java.util.function.Function; @@ -18,6 +27,11 @@ public class BuiltBlock extends CompatBlock { protected Consumer onStateReplaced; protected Consumer onAppendTooltip; protected Consumer onAppendProperties; + protected Function onOutlineShape; + protected Function onCollisionShape; + protected Function onRenderType; + protected Function onPlacementState; + protected Function onStateForNeighborUpdate; public BuiltBlock(CompatibleBlockSettings settings) { super(settings); @@ -25,20 +39,30 @@ public BuiltBlock(CompatibleBlockSettings settings) { public BuiltBlock(BlockBuilder builder) { this(builder.settingsBuilder.build()); - - this.onRightClick = builder.onRightClick; - this.onStateReplaced = builder.onStateReplaced; - this.onAppendTooltip = builder.onAppendTooltip; - this.onAppendProperties = builder.onAppendProperties; + init(builder); } public BuiltBlock(BlockBuilder builder, CompatIdentifier id) { this(builder.settingsBuilder.build(id)); + init(builder); + } + protected void init(BlockBuilder builder) { this.onRightClick = builder.onRightClick; this.onStateReplaced = builder.onStateReplaced; this.onAppendTooltip = builder.onAppendTooltip; this.onAppendProperties = builder.onAppendProperties; + this.onOutlineShape = builder.onOutlineShape; + this.onCollisionShape = builder.onCollisionShape; + this.onRenderType = builder.onRenderType; + this.onPlacementState = builder.onPlacementState; + this.onStateForNeighborUpdate = builder.onStateForNeighborUpdate; + + if (builder.onInit != null) + builder.onInit.accept(this.getWrapper(), builder); + + if (builder.defaultState != null) + this.setDefaultState(builder.defaultState); } @Override @@ -66,4 +90,44 @@ public void appendProperties(AppendPropertiesArgs args) { if (onAppendProperties != null) onAppendProperties.accept(args); } + + @Override + public VoxelShape getOutlineShape(OutlineShapeEvent e) { + if (onOutlineShape != null) + return onOutlineShape.apply(e); + + return super.getOutlineShape(e); + } + + @Override + public VoxelShape getCollisionShape(CollisionShapeEvent e) { + if (onCollisionShape != null) + return onCollisionShape.apply(e); + + return super.getCollisionShape(e); + } + + @Override + public CompatBlockRenderType getRenderType(RenderTypeArgs args) { + if (onRenderType != null) + return onRenderType.apply(args); + + return super.getRenderType(args); + } + + @Override + public @Nullable BlockState getPlacementState(PlacementStateArgs args) { + if (onPlacementState != null) + return onPlacementState.apply(args); + + return super.getPlacementState(args); + } + + @Override + public BlockState getStateForNeighborUpdate(StateForNeighborUpdateArgs args) { + if (onStateForNeighborUpdate != null) + return onStateForNeighborUpdate.apply(args); + + return super.getStateForNeighborUpdate(args); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java index b52a3d32e..7e8dec9a9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java @@ -1,9 +1,6 @@ package net.pitan76.mcpitanlib.midohra.easybuilder; -import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; -import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; -import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; -import net.pitan76.mcpitanlib.api.event.item.ItemUseOnEntityEvent; +import net.pitan76.mcpitanlib.api.event.item.*; import net.pitan76.mcpitanlib.api.item.v2.CompatItem; import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.util.CompatActionResult; @@ -19,6 +16,8 @@ public class BuiltItem extends CompatItem { protected Function onRightClickOnBlock; protected Function onRightClickOnEntity; protected Consumer onAppendTooltip; + protected Function onItemBarColor; + protected Function onItemBarStep; protected BuiltItem(CompatibleItemSettings settings) { super(settings); @@ -26,18 +25,21 @@ protected BuiltItem(CompatibleItemSettings settings) { public BuiltItem(ItemBuilder builder) { this(builder.settingsBuilder.build()); - - this.onRightClick = builder.onRightClick; - this.onRightClickOnBlock = builder.onRightClickOnBlock; - this.onAppendTooltip = builder.onAppendTooltip; + init(builder); } public BuiltItem(ItemBuilder builder, CompatIdentifier id) { this(builder.settingsBuilder.build(id)); + init(builder); + } + protected void init(ItemBuilder builder) { this.onRightClick = builder.onRightClick; this.onRightClickOnBlock = builder.onRightClickOnBlock; + this.onRightClickOnEntity = builder.onRightClickOnEntity; this.onAppendTooltip = builder.onAppendTooltip; + this.onItemBarColor = builder.onItemBarColor; + this.onItemBarStep = builder.onItemBarStep; } @Override @@ -69,4 +71,20 @@ public void appendTooltip(ItemAppendTooltipEvent e) { if (onAppendTooltip != null) onAppendTooltip.accept(e); } + + @Override + public int getItemBarColor(ItemBarColorArgs args) { + if (onItemBarColor != null) + return onItemBarColor.apply(args); + + return super.getItemBarColor(args); + } + + @Override + public int getItemBarStep(ItemBarStepArgs args) { + if (onItemBarStep != null) + return onItemBarStep.apply(args); + + return super.getItemBarStep(args); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java index 9598cf0fc..d503dc624 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java @@ -1,9 +1,6 @@ package net.pitan76.mcpitanlib.midohra.easybuilder; -import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; -import net.pitan76.mcpitanlib.api.event.item.ItemUseEvent; -import net.pitan76.mcpitanlib.api.event.item.ItemUseOnBlockEvent; -import net.pitan76.mcpitanlib.api.event.item.ItemUseOnEntityEvent; +import net.pitan76.mcpitanlib.api.event.item.*; import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; import net.pitan76.mcpitanlib.api.item.ExtendItem; @@ -29,6 +26,8 @@ public class ItemBuilder { public Function onRightClickOnBlock; public Function onRightClickOnEntity; public Consumer onAppendTooltip; + public Function onItemBarColor; + public Function onItemBarStep; public ItemBuilder(ItemSettingsBuilder settingsBuilder) { this.settingsBuilder = settingsBuilder; @@ -135,4 +134,14 @@ public ItemBuilder onAppendTooltip(Consumer onAppendTool this.onAppendTooltip = onAppendTooltip; return this; } + + public ItemBuilder onItemBarColor(Function onItemBarColor) { + this.onItemBarColor = onItemBarColor; + return this; + } + + public ItemBuilder onItemBarStep(Function onItemBarStep) { + this.onItemBarStep = onItemBarStep; + return this; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlock4CompatProviderMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlock4CompatProviderMixin.java new file mode 100644 index 000000000..54fa33ca7 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlock4CompatProviderMixin.java @@ -0,0 +1,94 @@ +package net.pitan76.mcpitanlib.mixin; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.minecraft.world.WorldAccess; +import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; +import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider.Options; +import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; +import net.pitan76.mcpitanlib.api.block.args.RotateArgs; +import net.pitan76.mcpitanlib.api.block.args.SideInvisibleArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.CollisionShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlockProvider; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(AbstractBlock.class) +public class AbstractBlock4CompatProviderMixin { + @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inject_getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + if (this instanceof CompatBlockProvider) { + CompatBlockProvider provider = (CompatBlockProvider) this; + Options options = new Options(); + VoxelShape returnValue = provider.getCollisionShape(new CollisionShapeEvent(state, world, pos, context), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inject_getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + if (this instanceof CompatBlockProvider) { + CompatBlockProvider provider = (CompatBlockProvider) this; + Options options = new Options(); + VoxelShape returnValue = provider.getOutlineShape(new OutlineShapeEvent(state, world, pos, context), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } + + @Inject(method = "getStateForNeighborUpdate", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inject_getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos, CallbackInfoReturnable cir) { + if (this instanceof CompatBlockProvider) { + CompatBlockProvider provider = (CompatBlockProvider) this; + Options options = new Options(); + net.pitan76.mcpitanlib.midohra.block.BlockState returnValue = provider.getStateForNeighborUpdate(new StateForNeighborUpdateArgs(state, direction, neighborState, world, pos, neighborPos), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue.toMinecraft()); + } + } + + @Inject(method = "getRenderType", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inject_getRenderType(BlockState state, CallbackInfoReturnable cir) { + if (this instanceof CompatBlockProvider) { + CompatBlockProvider provider = (CompatBlockProvider) this; + Options options = new Options(); + CompatBlockRenderType returnValue = provider.getRenderType(new RenderTypeArgs(state), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue.toMinecraft()); + } + } + + @Inject(method = "rotate", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inject_rotate(BlockState state, BlockRotation rotation, CallbackInfoReturnable cir) { + if (this instanceof CompatBlockProvider) { + CompatBlockProvider provider = (CompatBlockProvider) this; + Options options = new Options(); + net.pitan76.mcpitanlib.midohra.block.BlockState returnValue = provider.rotate(new RotateArgs(state, rotation), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue.toMinecraft()); + } + } + + @Inject(method = "isSideInvisible", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inject_isSideInvisible(BlockState state, BlockState stateFrom, Direction direction, CallbackInfoReturnable cir) { + if (this instanceof CompatBlockProvider) { + CompatBlockProvider provider = (CompatBlockProvider) this; + Options options = new Options(); + Boolean returnValue = provider.isSideInvisible(new SideInvisibleArgs(state, stateFrom, direction), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue); + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java index 248f0d47f..283238575 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/AbstractBlockMixin.java @@ -20,6 +20,7 @@ import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider; import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider.Options; import net.pitan76.mcpitanlib.api.event.block.*; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -70,9 +71,9 @@ public class AbstractBlockMixin { if (this instanceof ExtendBlockProvider) { ExtendBlockProvider provider = (ExtendBlockProvider) this; Options options = new Options(); - ActionResult returnValue = provider.onRightClick(new BlockUseEvent(state, world, pos, player, hand, hit), options).toActionResult(); + CompatActionResult returnValue = provider.onRightClick(new BlockUseEvent(state, world, pos, player, hand, hit), options); if (options.cancel && returnValue != null) - cir.setReturnValue(returnValue); + cir.setReturnValue(returnValue.toActionResult()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/Block4CompatProviderMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/Block4CompatProviderMixin.java new file mode 100644 index 000000000..79e84aa7c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/Block4CompatProviderMixin.java @@ -0,0 +1,28 @@ +package net.pitan76.mcpitanlib.mixin; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemPlacementContext; +import net.pitan76.mcpitanlib.api.block.ExtendBlockProvider.Options; +import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; +import net.pitan76.mcpitanlib.api.block.v2.CompatBlockProvider; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Block.class) +public class Block4CompatProviderMixin { + + @Inject(method = "getPlacementState", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$getPlacementState(ItemPlacementContext ctx, CallbackInfoReturnable cir) { + // ExtendBlockProviderを実装している場合 + if (this instanceof CompatBlockProvider) { + CompatBlockProvider provider = (CompatBlockProvider) this; + Options options = new Options(); + net.pitan76.mcpitanlib.midohra.block.BlockState returnValue = provider.getPlacementState(new PlacementStateArgs(ctx), options); + if (options.cancel && returnValue != null) + cir.setReturnValue(returnValue.toMinecraft()); + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java new file mode 100644 index 000000000..919805dc5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java @@ -0,0 +1,12 @@ +package net.pitan76.mcpitanlib.mixin; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(Block.class) +public interface BlockInvoker { + @Invoker("setDefaultState") + void setDefaultState(BlockState state); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 907470dc1..39ea788b0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -18,7 +18,10 @@ import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider.Options; import net.pitan76.mcpitanlib.api.item.args.UseActionArgs; +import net.pitan76.mcpitanlib.api.item.consume.CompatUseAction; import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.StackActionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -34,9 +37,9 @@ public class ItemMixin { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); - TypedActionResult returnValue = provider.onRightClick(new ItemUseEvent(world, user, hand), options).toTypedActionResult(); + StackActionResult returnValue = provider.onRightClick(new ItemUseEvent(world, user, hand), options); if (options.cancel && returnValue != null) - cir.setReturnValue(returnValue); + cir.setReturnValue(returnValue.toTypedActionResult()); } } @@ -46,9 +49,9 @@ public class ItemMixin { ExtendItemProvider provider = (ExtendItemProvider) this; ItemUsageContextMixin contextAccessor = (ItemUsageContextMixin) context; Options options = new Options(); - ActionResult returnValue = provider.onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit()), options).toActionResult(); + CompatActionResult returnValue = provider.onRightClickOnBlock(new ItemUseOnBlockEvent(context.getPlayer(), context.getHand(), contextAccessor.getHit()), options); if (options.cancel && returnValue != null) - cir.setReturnValue(returnValue); + cir.setReturnValue(returnValue.toActionResult()); } } @@ -57,9 +60,9 @@ public class ItemMixin { if (this instanceof ExtendItemProvider) { ExtendItemProvider provider = (ExtendItemProvider) this; Options options = new Options(); - ActionResult returnValue = provider.onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand), options).toActionResult(); + CompatActionResult returnValue = provider.onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand), options); if (options.cancel && returnValue != null) - cir.setReturnValue(returnValue); + cir.setReturnValue(returnValue.toActionResult()); } } @@ -188,9 +191,9 @@ public class ItemMixin { if (this instanceof CompatItemProvider) { CompatItemProvider provider = (CompatItemProvider) this; Options options = new Options(); - UseAction returnValue = provider.getUseAction(new UseActionArgs(stack), options).getUseAction(); + CompatUseAction returnValue = provider.getUseAction(new UseActionArgs(stack), options); if (options.cancel) - cir.setReturnValue(returnValue); + cir.setReturnValue(returnValue.getUseAction()); } } } diff --git a/common/src/main/resources/mcpitanlib-common.mixins.json b/common/src/main/resources/mcpitanlib-common.mixins.json index 6dad93704..f158fe6ba 100644 --- a/common/src/main/resources/mcpitanlib-common.mixins.json +++ b/common/src/main/resources/mcpitanlib-common.mixins.json @@ -4,7 +4,10 @@ "package": "net.pitan76.mcpitanlib.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ + "AbstractBlock4CompatProviderMixin", "AbstractBlockMixin", + "Block4CompatProviderMixin", + "BlockInvoker", "BlockMixin", "ItemMixin", "ItemStackMixin", diff --git a/info.properties b/info.properties index 95235cd92..68c5b8737 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.0.9 +mod_version=3.1.0 maven_group=net.pitan76 -changelog=Add APIs \ No newline at end of file +changelog=add APIs \ No newline at end of file From 7d640691e8d66ce8534968d22830c16c15acdb72 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 29 Nov 2024 17:41:06 +0900 Subject: [PATCH 419/617] add APIs --- .../api/block/CompatPillarBlock.java | 5 +- .../mcpitanlib/api/block/CompatSlabBlock.java | 9 +- .../api/block/v2/CompatStairsBlock.java | 56 +++++ .../pitan76/mcpitanlib/api/entity/Player.java | 4 + .../api/event/tile/TileTickEvent.java | 56 ++++- .../api/offlineplayer/OfflinePlayer.java | 37 +++ .../offlineplayer/OfflinePlayerManager.java | 229 ++++++++++++++++++ .../api/state/property/CompatProperties.java | 92 ++++++- .../api/state/property/UnknownProperty.java | 21 ++ .../mcpitanlib/api/util/InventoryUtil.java | 32 +++ .../api/util/inventory/CompatInventory.java | 51 ++++ .../midohra/world/RedstoneView.java | 41 ++++ .../mcpitanlib/midohra/world/WorldView.java | 10 +- info.properties | 2 +- 14 files changed, 634 insertions(+), 11 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/offlineplayer/OfflinePlayer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/offlineplayer/OfflinePlayerManager.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/state/property/UnknownProperty.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/world/RedstoneView.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java index b286eb914..efdf94cc8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatPillarBlock.java @@ -5,17 +5,18 @@ import net.minecraft.block.PillarBlock; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; -import net.minecraft.state.property.EnumProperty; import net.minecraft.util.math.Direction; import net.pitan76.mcpitanlib.api.block.v2.CompatBlockProvider; import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; +import net.pitan76.mcpitanlib.api.state.property.CompatProperties; +import net.pitan76.mcpitanlib.api.state.property.EnumProperty; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; public class CompatPillarBlock extends PillarBlock implements CompatBlockProvider { - public static final EnumProperty AXIS = PillarBlock.AXIS; + public static final EnumProperty AXIS = CompatProperties.of(PillarBlock.AXIS); public CompatibleBlockSettings settings; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java index a9d46b845..fe389fd03 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatSlabBlock.java @@ -7,8 +7,6 @@ import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.item.ItemPlacementContext; import net.minecraft.state.StateManager; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.state.property.EnumProperty; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockView; import net.pitan76.mcpitanlib.api.block.v2.CompatBlockProvider; @@ -16,12 +14,15 @@ import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.CanPathfindThroughArgs; import net.pitan76.mcpitanlib.api.event.block.PlacementStateArgs; +import net.pitan76.mcpitanlib.api.state.property.BooleanProperty; +import net.pitan76.mcpitanlib.api.state.property.CompatProperties; +import net.pitan76.mcpitanlib.api.state.property.EnumProperty; import net.pitan76.mcpitanlib.core.serialization.CompatMapCodec; public class CompatSlabBlock extends SlabBlock implements CompatBlockProvider { - public static final EnumProperty TYPE = SlabBlock.TYPE; - public static final BooleanProperty WATERLOGGED = SlabBlock.WATERLOGGED; + public static final EnumProperty TYPE = CompatProperties.of(SlabBlock.TYPE); + public static final BooleanProperty WATERLOGGED = CompatProperties.of(SlabBlock.WATERLOGGED); public CompatibleBlockSettings settings; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java index 479bb5d56..27d05c53c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java @@ -1,8 +1,27 @@ package net.pitan76.mcpitanlib.api.block.v2; +import net.minecraft.block.ShapeContext; +import net.minecraft.block.StairsBlock; +import net.minecraft.block.enums.BlockHalf; +import net.minecraft.block.enums.StairShape; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.pitan76.mcpitanlib.api.block.args.v2.CollisionShapeEvent; +import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; +import net.pitan76.mcpitanlib.api.state.property.BooleanProperty; +import net.pitan76.mcpitanlib.api.state.property.CompatProperties; +import net.pitan76.mcpitanlib.api.state.property.DirectionProperty; +import net.pitan76.mcpitanlib.api.state.property.EnumProperty; import net.pitan76.mcpitanlib.midohra.block.BlockState; public class CompatStairsBlock extends net.pitan76.mcpitanlib.api.block.CompatStairsBlock { + + public static final DirectionProperty FACING = CompatProperties.of(StairsBlock.FACING); + public static final EnumProperty HALF = CompatProperties.of(StairsBlock.HALF); + public static final EnumProperty SHAPE = CompatProperties.of(StairsBlock.SHAPE); + public static final BooleanProperty WATERLOGGED = CompatProperties.of(StairsBlock.WATERLOGGED); + public CompatStairsBlock(net.minecraft.block.BlockState baseBlockState, CompatibleBlockSettings settings) { super(baseBlockState, settings); } @@ -10,4 +29,41 @@ public CompatStairsBlock(net.minecraft.block.BlockState baseBlockState, Compatib public CompatStairsBlock(BlockState baseBlockState, CompatibleBlockSettings settings) { this(baseBlockState.toMinecraft(), settings); } + + public VoxelShape getOutlineShape(OutlineShapeEvent e) { + return super.getOutlineShape(e.state.toMinecraft(), e.world.getRaw(), e.pos.toMinecraft(), e.context); + } + + public VoxelShape getCollisionShape(CollisionShapeEvent e) { + return super.getCollisionShape(e.state.toMinecraft(), e.world.getRaw(), e.pos.toMinecraft(), e.context); + } + + @Deprecated + @Override + public VoxelShape getOutlineShape(net.pitan76.mcpitanlib.api.event.block.OutlineShapeEvent e) { + return getOutlineShape(new OutlineShapeEvent(e.state, e.world, e.pos, e.context)); + } + + @Deprecated + @Override + public VoxelShape getOutlineShape(net.minecraft.block.BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return getOutlineShape(new OutlineShapeEvent(state, world, pos, context)); + } + + @Deprecated + @Override + public VoxelShape getOutlineShape(OutlineShapeEvent e, Options options) { + return super.getOutlineShape(e, options); + } + + @Override + public VoxelShape getCollisionShape(net.minecraft.block.BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return getCollisionShape(new CollisionShapeEvent(state, world, pos, context)); + } + + @Deprecated + @Override + public VoxelShape getCollisionShape(CollisionShapeEvent event, Options options) { + return super.getCollisionShape(event, options); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index f7c57b481..49486ab01 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -488,4 +488,8 @@ public void setStackInHand(Hand hand, net.pitan76.mcpitanlib.midohra.item.ItemSt public net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStackInHand(Hand hand) { return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getStackInHand(hand)); } + + public Hand getActiveHand() { + return getEntity().getActiveHand(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java index 8f767a49a..8a0797af5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java @@ -4,8 +4,11 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; +import net.pitan76.mcpitanlib.midohra.world.IWorldView; -public class TileTickEvent { +public class TileTickEvent implements BlockStatePropertyHolder { public World world; public BlockPos pos; public BlockState state; @@ -25,4 +28,55 @@ public boolean isClient() { public boolean isServer() { return !isClient(); } + + public boolean hasWorld() { + return world != null; + } + + public World getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public BlockState getState() { + if (state == null) + state = getWorldView().getBlockState(getPos()); + + return state; + } + + public T getBlockEntity() { + return blockEntity; + } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(getWorld()); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getPos()); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + if (state == null) + return getWorldView().getBlockState(getMidohraPos()); + + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getState()); + } + + public BlockEntityWrapper getBlockEntityWrapper() { + return BlockEntityWrapper.of(getBlockEntity()); + } + + public IWorldView getWorldView() { + return getMidohraWorld(); + } + + @Override + public net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState() { + return getMidohraState(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/offlineplayer/OfflinePlayer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/offlineplayer/OfflinePlayer.java new file mode 100644 index 000000000..1bb470b52 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/offlineplayer/OfflinePlayer.java @@ -0,0 +1,37 @@ +package net.pitan76.mcpitanlib.api.offlineplayer; + +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.midohra.server.PlayerManager; + +import java.util.Optional; +import java.util.UUID; + +public class OfflinePlayer { + public String uuid; + public String name; + + public OfflinePlayer(String uuid, String name) { + this.uuid = uuid; + this.name = name; + } + + public String getUUIDasString() { + return uuid; + } + + public String getName() { + return name; + } + + public UUID getUUID() { + return UUID.fromString(uuid); + } + + public Optional getOnlinePlayer(PlayerManager playerManager) { + return OfflinePlayerManager.getOnlinePlayer(this, playerManager); + } + + public boolean isOnline(PlayerManager playerManager) { + return playerManager.hasPlayerByUUID(getUUID()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/offlineplayer/OfflinePlayerManager.java b/common/src/main/java/net/pitan76/mcpitanlib/api/offlineplayer/OfflinePlayerManager.java new file mode 100644 index 000000000..7eecbaf2c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/offlineplayer/OfflinePlayerManager.java @@ -0,0 +1,229 @@ +package net.pitan76.mcpitanlib.api.offlineplayer; + +import net.pitan76.easyapi.FileControl; +import net.pitan76.easyapi.config.JsonConfig; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.util.PlatformUtil; +import net.pitan76.mcpitanlib.midohra.server.PlayerManager; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public class OfflinePlayerManager { + public static OfflinePlayerManager INSTANCE = new OfflinePlayerManager(); + public static final File DEFAULT_FILE = new File(PlatformUtil.getConfigFolderAsFile(), "mcpitanlib/offlineplayer.json"); + + private final List offlinePlayers = new ArrayList<>(); + + protected OfflinePlayerManager() { + if (INSTANCE == null) + INSTANCE = this; + load(); + } + + public File getFile() { + return DEFAULT_FILE; + } + + public void load() { + if (FileControl.fileExists(getFile())) { + JsonConfig config = new JsonConfig(getFile()); + config.configMap.forEach((key, value) -> offlinePlayers.add(new OfflinePlayer(key, (String) value))); + } + } + + public void save() { + if (!FileControl.fileExists(getFile().getParentFile())) { + getFile().getParentFile().mkdirs(); + } + JsonConfig config = new JsonConfig(); + offlinePlayers.forEach(offlinePlayer -> config.set(offlinePlayer.uuid, offlinePlayer.name)); + config.save(getFile(), true); + } + + public OfflinePlayer getPlayer(String uuid) { + for (OfflinePlayer offlinePlayer : offlinePlayers) { + if (offlinePlayer.uuid.equals(uuid)) { + return offlinePlayer; + } + } + return null; + } + + public OfflinePlayer getPlayerByName(String name) { + for (OfflinePlayer offlinePlayer : offlinePlayers) { + if (offlinePlayer.name.equals(name)) { + return offlinePlayer; + } + } + return null; + } + + public void addPlayer(OfflinePlayer offlinePlayer) { + offlinePlayers.add(offlinePlayer); + } + + public void removePlayer(OfflinePlayer offlinePlayer) { + offlinePlayers.remove(offlinePlayer); + } + + public void addPlayer(String uuid, String name) { + if (containsPlayerByUUID(uuid)) + return; + addPlayer(new OfflinePlayer(uuid, name)); + } + + public void removePlayer(String uuid) { + removePlayer(getPlayer(uuid)); + } + + public boolean containsPlayerByUUID(String uuid) { + return getPlayer(uuid) != null; + } + + public boolean containsPlayerByName(String name) { + return getPlayerByName(name) != null; + } + + public boolean containsPlayer(OfflinePlayer offlinePlayer) { + return offlinePlayers.contains(offlinePlayer); + } + + public boolean containsPlayer(UUID uuid) { + return containsPlayerByUUID(uuid.toString()); + } + + public static Optional getOnlinePlayer(UUID uuid, PlayerManager playerManager) { + if (playerManager.hasPlayerByUUID(uuid)) + return Optional.of(playerManager.getPlayerByUUID(uuid)); + + return Optional.empty(); + } + + public static Optional getOnlinePlayerByName(String name, PlayerManager playerManager) { + if (playerManager.hasPlayerByName(name)) + return Optional.of(playerManager.getPlayerByName(name)); + + return Optional.empty(); + } + + public static Optional getOnlinePlayerByUUID(String uuid, PlayerManager playerManager) { + return getOnlinePlayer(UUID.fromString(uuid), playerManager); + } + + public static Optional getOnlinePlayer(OfflinePlayer offlinePlayer, PlayerManager playerManager) { + return getOnlinePlayer(UUID.fromString(offlinePlayer.uuid), playerManager); + } + + public UUID getUUID(String name) { + return UUID.fromString(getUUIDasString(name)); + } + + public String getName(UUID uuid) { + for (OfflinePlayer offlinePlayer : offlinePlayers) { + if (offlinePlayer.uuid.equals(uuid.toString())) { + return offlinePlayer.name; + } + } + return null; + } + + public String getUUIDasString(String name) { + for (OfflinePlayer offlinePlayer : offlinePlayers) { + if (offlinePlayer.name.equals(name)) { + return offlinePlayer.uuid; + } + } + return null; + } + + public List getOfflinePlayers() { + return offlinePlayers; + } + + public void clear() { + offlinePlayers.clear(); + } + + public void reload() { + clear(); + load(); + } + + public void saveAndReload() { + save(); + reload(); + } + + public void saveAndReloadAsync() { + new Thread(() -> { + save(); + reload(); + }).start(); + } + + public void saveAsync() { + new Thread(this::save).start(); + } + + public void reloadAsync() { + new Thread(this::reload).start(); + } + + public void clearAsync() { + new Thread(this::clear).start(); + } + + public void saveAndReloadAsync(Runnable runnable) { + new Thread(() -> { + save(); + reload(); + runnable.run(); + }).start(); + } + + public void saveAsync(Runnable runnable) { + new Thread(() -> { + save(); + runnable.run(); + }).start(); + } + + public void reloadAsync(Runnable runnable) { + new Thread(() -> { + reload(); + runnable.run(); + }).start(); + } + + public void clearAsync(Runnable runnable) { + new Thread(() -> { + clear(); + runnable.run(); + }).start(); + } + + public void saveAndReload(Runnable runnable) { + save(); + reload(); + runnable.run(); + } + + public void save(Runnable runnable) { + save(); + runnable.run(); + } + + public void reload(Runnable runnable) { + reload(); + runnable.run(); + } + + public void clear(Runnable runnable) { + clear(); + runnable.run(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java index e443066b8..106cdfd8d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java @@ -1,13 +1,16 @@ package net.pitan76.mcpitanlib.api.state.property; -import net.minecraft.block.enums.BlockHalf; -import net.minecraft.block.enums.StairShape; +import net.minecraft.block.enums.*; import net.minecraft.state.property.Properties; +import net.minecraft.state.property.Property; +import net.minecraft.util.StringIdentifiable; +import net.minecraft.util.math.Direction; public class CompatProperties { public static final DirectionProperty FACING = new DirectionProperty(Properties.FACING); public static final DirectionProperty HORIZONTAL_FACING = new DirectionProperty(Properties.HORIZONTAL_FACING); public static final DirectionProperty HOPPER_FACING = new DirectionProperty(Properties.HOPPER_FACING); + public static final DirectionProperty VERTICAL_DIRECTION = new DirectionProperty(Properties.VERTICAL_DIRECTION); public static final BooleanProperty POWERED = new BooleanProperty(Properties.POWERED); public static final BooleanProperty ENABLED = new BooleanProperty(Properties.ENABLED); @@ -19,11 +22,96 @@ public class CompatProperties { public static final BooleanProperty BOTTOM = new BooleanProperty(Properties.BOTTOM); public static final BooleanProperty OPEN = new BooleanProperty(Properties.OPEN); public static final BooleanProperty UNSTABLE = new BooleanProperty(Properties.UNSTABLE); + public static final BooleanProperty UP = new BooleanProperty(Properties.UP); + public static final BooleanProperty DOWN = new BooleanProperty(Properties.DOWN); + public static final BooleanProperty NORTH = new BooleanProperty(Properties.NORTH); + public static final BooleanProperty EAST = new BooleanProperty(Properties.EAST); + public static final BooleanProperty SOUTH = new BooleanProperty(Properties.SOUTH); + public static final BooleanProperty WEST = new BooleanProperty(Properties.WEST); public static final IntProperty POWER = new IntProperty(Properties.POWER); public static final IntProperty LAYERS = new IntProperty(Properties.LAYERS); public static final IntProperty NOTE = new IntProperty(Properties.NOTE); + public static final IntProperty ROTATION = new IntProperty(Properties.ROTATION); + public static final IntProperty EGGS = new IntProperty(Properties.EGGS); + public static final IntProperty DELAY = new IntProperty(Properties.DELAY); public static final EnumProperty BLOCK_HALF = new EnumProperty<>(Properties.BLOCK_HALF); public static final EnumProperty STAIR_SHAPE = new EnumProperty<>(Properties.STAIR_SHAPE); + public static final EnumProperty SLAB_TYPE = new EnumProperty<>(Properties.SLAB_TYPE); + public static final EnumProperty CHEST_TYPE = new EnumProperty<>(Properties.CHEST_TYPE); + public static final EnumProperty PISTON_TYPE = new EnumProperty<>(Properties.PISTON_TYPE); + public static final EnumProperty AXIS = new EnumProperty<>(Properties.AXIS); + public static final EnumProperty HORIZONTAL_AXIS = new EnumProperty<>(Properties.HORIZONTAL_AXIS); + public static final EnumProperty COMPARATOR_MODE = new EnumProperty<>(Properties.COMPARATOR_MODE); + + public static IProperty of(Property property) { + if (property instanceof net.minecraft.state.property.IntProperty) { + return of((net.minecraft.state.property.IntProperty) property); + } + if (property instanceof net.minecraft.state.property.BooleanProperty) { + return of((net.minecraft.state.property.BooleanProperty) property); + } + if (property instanceof net.minecraft.state.property.EnumProperty) { + return of((net.minecraft.state.property.EnumProperty) property); + } + if (property instanceof net.minecraft.state.property.DirectionProperty) { + return of((net.minecraft.state.property.DirectionProperty) property); + } + return UnknownProperty.of(property); + } + + public static IntProperty of(net.minecraft.state.property.IntProperty property) { + if (property == Properties.POWER) return POWER; + if (property == Properties.LAYERS) return LAYERS; + if (property == Properties.NOTE) return NOTE; + if (property == Properties.ROTATION) return ROTATION; + if (property == Properties.EGGS) return EGGS; + if (property == Properties.DELAY) return DELAY; + + return new IntProperty(property); + } + + public static BooleanProperty of(net.minecraft.state.property.BooleanProperty property) { + if (property == Properties.POWERED) return POWERED; + if (property == Properties.ENABLED) return ENABLED; + if (property == Properties.WATERLOGGED) return WATERLOGGED; + if (property == Properties.LIT) return LIT; + if (property == Properties.OCCUPIED) return OCCUPIED; + if (property == Properties.ATTACHED) return ATTACHED; + if (property == Properties.HANGING) return HANGING; + if (property == Properties.BOTTOM) return BOTTOM; + if (property == Properties.OPEN) return OPEN; + if (property == Properties.UNSTABLE) return UNSTABLE; + if (property == Properties.UP) return UP; + if (property == Properties.DOWN) return DOWN; + if (property == Properties.NORTH) return NORTH; + if (property == Properties.EAST) return EAST; + if (property == Properties.SOUTH) return SOUTH; + if (property == Properties.WEST) return WEST; + + return new BooleanProperty(property); + } + + public static & StringIdentifiable> EnumProperty of(net.minecraft.state.property.EnumProperty property) { + if (property == Properties.BLOCK_HALF) return (EnumProperty) BLOCK_HALF; + if (property == Properties.STAIR_SHAPE) return (EnumProperty) STAIR_SHAPE; + if (property == Properties.SLAB_TYPE) return (EnumProperty) SLAB_TYPE; + if (property == Properties.CHEST_TYPE) return (EnumProperty) CHEST_TYPE; + if (property == Properties.PISTON_TYPE) return (EnumProperty) PISTON_TYPE; + if (property == Properties.AXIS) return (EnumProperty) AXIS; + if (property == Properties.HORIZONTAL_AXIS) return (EnumProperty) HORIZONTAL_AXIS; + if (property == Properties.COMPARATOR_MODE) return (EnumProperty) COMPARATOR_MODE; + + return new EnumProperty<>(property); + } + + public static DirectionProperty of(net.minecraft.state.property.DirectionProperty property) { + if (property == Properties.FACING) return FACING; + if (property == Properties.HORIZONTAL_FACING) return HORIZONTAL_FACING; + if (property == Properties.HOPPER_FACING) return HOPPER_FACING; + if (property == Properties.VERTICAL_DIRECTION) return VERTICAL_DIRECTION; + + return new DirectionProperty(property); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/UnknownProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/UnknownProperty.java new file mode 100644 index 000000000..e59d0cad5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/UnknownProperty.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.state.property; + +import net.minecraft.state.property.Property; + +public class UnknownProperty implements IProperty { + + private final net.minecraft.state.property.Property property; + + public UnknownProperty(net.minecraft.state.property.Property property) { + this.property = property; + } + + public static UnknownProperty of(net.minecraft.state.property.Property property) { + return new UnknownProperty(property); + } + + @Override + public Property getProperty() { + return property; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java index 25decf70c..184295cfd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/InventoryUtil.java @@ -120,4 +120,36 @@ public static void copyToList(Inventory from, DefaultedList to) { to.set(i, from.getStack(i)); } } + + public static int getSize(Inventory inventory) { + return inventory.size(); + } + + public static ItemStack getStack(Inventory inventory, int slot) { + return inventory.getStack(slot); + } + + public static void setStack(Inventory inventory, int slot, ItemStack stack) { + inventory.setStack(slot, stack); + } + + public static boolean isEmpty(Inventory inventory) { + return inventory.isEmpty(); + } + + public static ItemStack removeStack(Inventory inventory, int slot) { + return inventory.removeStack(slot); + } + + public static ItemStack removeStack(Inventory inventory, int slot, int amount) { + return inventory.removeStack(slot, amount); + } + + public static void clear(Inventory inventory) { + inventory.clear(); + } + + public static void markDirty(Inventory inventory) { + inventory.markDirty(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java index 5a40affff..671bbf4fc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.util.inventory; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.Inventory; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -144,4 +145,54 @@ public ItemStack getStack(int slot) { public ItemStack callGetStack(int slot) { return super.getStack(slot); } + + @Deprecated + @Override + public int size() { + return getSize(); + } + + public int getSize() { + return super.size(); + } + + @Deprecated + @Override + public boolean isEmpty() { + return callIsEmpty(); + } + + public boolean callIsEmpty() { + return super.isEmpty(); + } + + @Deprecated + @Override + public boolean canTransferTo(Inventory hopperInventory, int slot, ItemStack stack) { + return callCanTransferTo(hopperInventory, slot, stack); + } + + public boolean callCanTransferTo(Inventory hopperInventory, int slot, ItemStack stack) { + return super.canTransferTo(hopperInventory, slot, stack); + } + + @Deprecated + @Override + public ItemStack addStack(ItemStack stack) { + return callAddStack(stack); + } + + public ItemStack callAddStack(ItemStack stack) { + return super.addStack(stack); + } + + @Deprecated + @Override + public int getMaxCountPerStack() { + return callGetMaxCountPerStack(); + } + + public int callGetMaxCountPerStack() { + return super.getMaxCountPerStack(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/RedstoneView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/RedstoneView.java new file mode 100644 index 000000000..4d8bc2f0e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/RedstoneView.java @@ -0,0 +1,41 @@ +package net.pitan76.mcpitanlib.midohra.world; + +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.util.math.Direction; + +public interface RedstoneView { + + net.minecraft.world.RedstoneView getRedstoneView(); + + default boolean isReceivingRedstonePower(BlockPos pos) { + return getRedstoneView().isReceivingRedstonePower(pos.toMinecraft()); + } + + default int getEmittedRedstonePower(BlockPos pos, Direction direction) { + return getRedstoneView().getEmittedRedstonePower(pos.toMinecraft(), direction.toMinecraft()); + } + + default int getEmittedRedstonePower(BlockPos pos, Direction direction, boolean onlyFromGate) { + return getRedstoneView().getEmittedRedstonePower(pos.toMinecraft(), direction.toMinecraft(), onlyFromGate); + } + + default boolean isEmittingRedstonePower(BlockPos pos, Direction direction) { + return getRedstoneView().isEmittingRedstonePower(pos.toMinecraft(), direction.toMinecraft()); + } + + default int getStrongRedstonePower(BlockPos pos, Direction direction) { + return getRedstoneView().getStrongRedstonePower(pos.toMinecraft(), direction.toMinecraft()); + } + + default int getReceivedStrongRedstonePower(BlockPos pos) { + return getRedstoneView().getReceivedStrongRedstonePower(pos.toMinecraft()); + } + + static RedstoneView of(net.minecraft.world.RedstoneView redstoneView) { + return () -> redstoneView; + } + + static RedstoneView of(net.minecraft.world.WorldView world) { + return WorldView.of(world); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java index 2488905b3..bd78fec9e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java @@ -3,13 +3,15 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.fluid.FluidState; +import net.pitan76.mcpitanlib.api.util.WorldUtil; import net.pitan76.mcpitanlib.api.util.world.WorldAccessUtil; import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.util.math.Direction; import java.util.Optional; -public class WorldView implements IWorldView { +public class WorldView implements IWorldView, RedstoneView { private final net.minecraft.world.WorldView world; protected WorldView(net.minecraft.world.WorldView world) { @@ -63,4 +65,10 @@ public net.minecraft.block.BlockState getBlockState(net.minecraft.util.math.Bloc public FluidState getFluidState(net.minecraft.util.math.BlockPos pos) { return getRaw().getFluidState(pos); } + + @Override + @Deprecated + public net.minecraft.world.RedstoneView getRedstoneView() { + return getRaw(); + } } diff --git a/info.properties b/info.properties index 68c5b8737..115ffe57d 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.0 +mod_version=3.1.1 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 93d22f9e5a46bc27a157f058413977e2f8951bd4 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 29 Nov 2024 18:01:47 +0900 Subject: [PATCH 420/617] 1204 --- .../api/state/property/CompatProperties.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java index 106cdfd8d..0634dc425 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java @@ -94,14 +94,14 @@ public static BooleanProperty of(net.minecraft.state.property.BooleanProperty pr } public static & StringIdentifiable> EnumProperty of(net.minecraft.state.property.EnumProperty property) { - if (property == Properties.BLOCK_HALF) return (EnumProperty) BLOCK_HALF; - if (property == Properties.STAIR_SHAPE) return (EnumProperty) STAIR_SHAPE; - if (property == Properties.SLAB_TYPE) return (EnumProperty) SLAB_TYPE; - if (property == Properties.CHEST_TYPE) return (EnumProperty) CHEST_TYPE; - if (property == Properties.PISTON_TYPE) return (EnumProperty) PISTON_TYPE; - if (property == Properties.AXIS) return (EnumProperty) AXIS; - if (property == Properties.HORIZONTAL_AXIS) return (EnumProperty) HORIZONTAL_AXIS; - if (property == Properties.COMPARATOR_MODE) return (EnumProperty) COMPARATOR_MODE; + if (property.equals(Properties.BLOCK_HALF)) return (EnumProperty) BLOCK_HALF; + if (property.equals(Properties.STAIR_SHAPE)) return (EnumProperty) STAIR_SHAPE; + if (property.equals(Properties.SLAB_TYPE)) return (EnumProperty) SLAB_TYPE; + if (property.equals(Properties.CHEST_TYPE)) return (EnumProperty) CHEST_TYPE; + if (property.equals(Properties.PISTON_TYPE)) return (EnumProperty) PISTON_TYPE; + if (property.equals(Properties.AXIS)) return (EnumProperty) AXIS; + if (property.equals(Properties.HORIZONTAL_AXIS)) return (EnumProperty) HORIZONTAL_AXIS; + if (property.equals(Properties.COMPARATOR_MODE)) return (EnumProperty) COMPARATOR_MODE; return new EnumProperty<>(property); } From cbe97a7df97c3dad1b5c8cd98b7032b0fe6b0abf Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 29 Nov 2024 18:26:48 +0900 Subject: [PATCH 421/617] ofDir --- .../pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java | 2 +- .../mcpitanlib/api/state/property/CompatProperties.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java index 27d05c53c..f92115a8a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatStairsBlock.java @@ -17,7 +17,7 @@ public class CompatStairsBlock extends net.pitan76.mcpitanlib.api.block.CompatStairsBlock { - public static final DirectionProperty FACING = CompatProperties.of(StairsBlock.FACING); + public static final DirectionProperty FACING = CompatProperties.ofDir(StairsBlock.FACING); public static final EnumProperty HALF = CompatProperties.of(StairsBlock.HALF); public static final EnumProperty SHAPE = CompatProperties.of(StairsBlock.SHAPE); public static final BooleanProperty WATERLOGGED = CompatProperties.of(StairsBlock.WATERLOGGED); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java index 0634dc425..c6da2b2cb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/CompatProperties.java @@ -56,7 +56,7 @@ public static IProperty of(Property property) { return of((net.minecraft.state.property.EnumProperty) property); } if (property instanceof net.minecraft.state.property.DirectionProperty) { - return of((net.minecraft.state.property.DirectionProperty) property); + return ofDir((net.minecraft.state.property.DirectionProperty) property); } return UnknownProperty.of(property); } @@ -106,7 +106,7 @@ public static & StringIdentifiable> EnumProperty of(net.mi return new EnumProperty<>(property); } - public static DirectionProperty of(net.minecraft.state.property.DirectionProperty property) { + public static DirectionProperty ofDir(net.minecraft.state.property.DirectionProperty property) { if (property == Properties.FACING) return FACING; if (property == Properties.HORIZONTAL_FACING) return HORIZONTAL_FACING; if (property == Properties.HOPPER_FACING) return HOPPER_FACING; From 45fa7e915db657a379c6d59df9b1cbe0c63e31a6 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 29 Nov 2024 18:39:19 +0900 Subject: [PATCH 422/617] 1192 --- .../midohra/world/RedstoneView.java | 32 +++++++++++++------ .../mcpitanlib/midohra/world/WorldView.java | 2 +- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/RedstoneView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/RedstoneView.java index 4d8bc2f0e..9f7f14677 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/RedstoneView.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/RedstoneView.java @@ -1,26 +1,39 @@ package net.pitan76.mcpitanlib.midohra.world; +import net.minecraft.world.World; import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; import net.pitan76.mcpitanlib.midohra.util.math.Direction; public interface RedstoneView { - net.minecraft.world.RedstoneView getRedstoneView(); + net.minecraft.world.WorldView getRedstoneView(); default boolean isReceivingRedstonePower(BlockPos pos) { - return getRedstoneView().isReceivingRedstonePower(pos.toMinecraft()); + if (getRedstoneView() instanceof World) { + return ((World) getRedstoneView()).isReceivingRedstonePower(pos.toMinecraft()); + } + return false; } default int getEmittedRedstonePower(BlockPos pos, Direction direction) { - return getRedstoneView().getEmittedRedstonePower(pos.toMinecraft(), direction.toMinecraft()); + if (getRedstoneView() instanceof World) { + return ((World) getRedstoneView()).getEmittedRedstonePower(pos.toMinecraft(), direction.toMinecraft()); + } + return 0; } default int getEmittedRedstonePower(BlockPos pos, Direction direction, boolean onlyFromGate) { - return getRedstoneView().getEmittedRedstonePower(pos.toMinecraft(), direction.toMinecraft(), onlyFromGate); + if (getRedstoneView() instanceof World) { + return ((World) getRedstoneView()).getEmittedRedstonePower(pos.toMinecraft(), direction.toMinecraft()); + } + return 0; } default boolean isEmittingRedstonePower(BlockPos pos, Direction direction) { - return getRedstoneView().isEmittingRedstonePower(pos.toMinecraft(), direction.toMinecraft()); + if (getRedstoneView() instanceof World) { + return ((World) getRedstoneView()).isEmittingRedstonePower(pos.toMinecraft(), direction.toMinecraft()); + } + return false; } default int getStrongRedstonePower(BlockPos pos, Direction direction) { @@ -28,11 +41,10 @@ default int getStrongRedstonePower(BlockPos pos, Direction direction) { } default int getReceivedStrongRedstonePower(BlockPos pos) { - return getRedstoneView().getReceivedStrongRedstonePower(pos.toMinecraft()); - } - - static RedstoneView of(net.minecraft.world.RedstoneView redstoneView) { - return () -> redstoneView; + if (getRedstoneView() instanceof World) { + return ((World) getRedstoneView()).getReceivedStrongRedstonePower(pos.toMinecraft()); + } + return 0; } static RedstoneView of(net.minecraft.world.WorldView world) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java index bd78fec9e..2a1495dd5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java @@ -68,7 +68,7 @@ public FluidState getFluidState(net.minecraft.util.math.BlockPos pos) { @Override @Deprecated - public net.minecraft.world.RedstoneView getRedstoneView() { + public WorldView getRedstoneView() { return getRaw(); } } From 000c32ca88291801a6335d5ca877b11fb31516ed Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 29 Nov 2024 18:39:40 +0900 Subject: [PATCH 423/617] 1192-1 --- .../java/net/pitan76/mcpitanlib/midohra/world/WorldView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java index 2a1495dd5..fa5f7a011 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java @@ -68,7 +68,7 @@ public FluidState getFluidState(net.minecraft.util.math.BlockPos pos) { @Override @Deprecated - public WorldView getRedstoneView() { + public net.minecraft.world.WorldView getRedstoneView() { return getRaw(); } } From 7eddf283faa00835ae05efcb554306e713664c89 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 30 Nov 2024 10:21:00 +0900 Subject: [PATCH 424/617] fix --- .../mcpitanlib/api/util/inventory/CompatInventory.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java index 671bbf4fc..39340c49b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java @@ -166,14 +166,8 @@ public boolean callIsEmpty() { return super.isEmpty(); } - @Deprecated - @Override - public boolean canTransferTo(Inventory hopperInventory, int slot, ItemStack stack) { - return callCanTransferTo(hopperInventory, slot, stack); - } - public boolean callCanTransferTo(Inventory hopperInventory, int slot, ItemStack stack) { - return super.canTransferTo(hopperInventory, slot, stack); + return hopperInventory.isValid(slot, stack); } @Deprecated From 88e93a2dc3dfff58cf30e7252e2f71afeba55f9b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:00:43 +0900 Subject: [PATCH 425/617] add APIs --- .../api/registry/CompatRegistryLookup.java | 10 ++ .../api/tile/CompatBlockEntity.java | 10 ++ .../transfer/fluid/v1/FluidStorageUtil.java | 16 +++ .../api/transfer/fluid/v1/IFluidStorage.java | 99 +++++++++++++++++ .../api/transfer/fluid/v1/IFluidVariant.java | 29 +++++ .../api/util/entity/ServerPlayerUtil.java | 102 ++++++++++++++++++ .../mcpitanlib/midohra/world/World.java | 15 ++- .../extra/transfer/util/FluidStorageUtil.java | 9 ++ .../fluid/v1/fabric/FabricFluidStorage.java | 78 ++++++++++++++ .../fluid/v1/fabric/FabricFluidVariant.java | 33 ++++++ .../fluid/v1/fabric/FluidStorageUtilImpl.java | 17 +++ info.properties | 2 +- .../v1/neoforge/FluidStorageUtilImpl.java | 17 +++ .../v1/neoforge/NeoForgeFluidStorage.java | 72 +++++++++++++ .../v1/neoforge/NeoForgeFluidVariant.java | 33 ++++++ 15 files changed, 539 insertions(+), 3 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/FluidStorageUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidVariant.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidVariant.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FluidStorageUtilImpl.java create mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/FluidStorageUtilImpl.java create mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java create mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidVariant.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java index 964575d3a..a331c92d3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java @@ -2,6 +2,8 @@ import net.minecraft.nbt.NbtCompound; import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; public class CompatRegistryLookup { @@ -12,4 +14,12 @@ public CompatRegistryLookup() { public NbtRWArgs getNbtRWArgs(NbtCompound nbt) { return new NbtRWArgs(nbt); } + + public WriteNbtArgs createWriteNbtArgs(NbtCompound nbt) { + return new WriteNbtArgs(nbt, registryLookup); + } + + public ReadNbtArgs createReadNbtArgs(NbtCompound nbt) { + return new ReadNbtArgs(nbt, registryLookup); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java index 73c69bee5..bc485afd6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java @@ -12,6 +12,7 @@ import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.api.util.WorldUtil; import org.jetbrains.annotations.Nullable; @@ -47,6 +48,15 @@ public void readNbt(ReadNbtArgs args) { } + public NbtCompound toInitialChunkDataNbt(CompatRegistryLookup registryLookup) { + return super.toInitialChunkDataNbt(registryLookup.getRegistryLookup()); + } + + @Deprecated + @Override + public NbtCompound toInitialChunkDataNbt(RegistryWrapper.WrapperLookup registries) { + return toInitialChunkDataNbt(new CompatRegistryLookup(registries)); + } // deprecated diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/FluidStorageUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/FluidStorageUtil.java new file mode 100644 index 000000000..0576fca2f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/FluidStorageUtil.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1; + +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.minecraft.fluid.Fluid; + +public class FluidStorageUtil { + @ExpectPlatform + public static IFluidStorage withFixedCapacity(long capacity, Runnable onChange) { + throw new AssertionError(); + } + + @ExpectPlatform + public static IFluidVariant getVariant(Fluid fluid) { + throw new AssertionError(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java b/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java new file mode 100644 index 000000000..be5e27766 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java @@ -0,0 +1,99 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1; + +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.midohra.fluid.FluidWrapper; + +public interface IFluidStorage { + long getAmount(); + + long getCapacity(); + + IFluidVariant getResource(); + + void setResource(IFluidVariant variant); + + long insert(IFluidVariant variant, long maxAmount, boolean simulate); + + long extract(IFluidVariant variant, long maxAmount, boolean simulate); + + void writeNbt(WriteNbtArgs args); + + void readNbt(WriteNbtArgs args); + + default long insert(IFluidVariant variant, long maxAmount) { + return insert(variant, maxAmount, false); + } + + default long extract(IFluidVariant variant, long maxAmount) { + return extract(variant, maxAmount, false); + } + + default long insert(Fluid fluid, long maxAmount) { + return insert(FluidStorageUtil.getVariant(fluid), maxAmount); + } + + default long extract(Fluid fluid, long maxAmount) { + return extract(FluidStorageUtil.getVariant(fluid), maxAmount); + } + + default long insert(FluidWrapper wrapper, long maxAmount) { + return insert(wrapper.get(), maxAmount); + } + + default long extract(FluidWrapper wrapper, long maxAmount) { + return extract(wrapper.get(), maxAmount); + } + + default boolean isResourceBlank() { + return getResource() == null || getAmount() <= 0; + } + + default boolean isResource(IFluidVariant variant) { + return getResource() == variant; + } + + default boolean isEmpty() { + return getAmount() <= 0; + } + + default boolean isFull() { + return getAmount() >= getCapacity(); + } + + default boolean canInsert(IFluidVariant variant, long amount) { + return insert(variant, amount, true) == amount; + } + + default boolean canExtract(IFluidVariant variant, long amount) { + return extract(variant, amount, true) == amount; + } + + default boolean canInsert(Fluid fluid, long amount) { + return canInsert(FluidStorageUtil.getVariant(fluid), amount); + } + + default boolean canExtract(Fluid fluid, long amount) { + return canExtract(FluidStorageUtil.getVariant(fluid), amount); + } + + default boolean canInsert(FluidWrapper wrapper, long amount) { + return canInsert(wrapper.get(), amount); + } + + default boolean canExtract(FluidWrapper wrapper, long amount) { + return canExtract(wrapper.get(), amount); + } + + default void writeNbt(NbtCompound nbt, CompatRegistryLookup registryLookup) { + writeNbt(new WriteNbtArgs(nbt, registryLookup)); + } + + default void readNbt(NbtCompound nbt, CompatRegistryLookup registryLookup) { + readNbt(new WriteNbtArgs(nbt, registryLookup)); + } + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidVariant.java b/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidVariant.java new file mode 100644 index 000000000..cc78339a4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidVariant.java @@ -0,0 +1,29 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1; + +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.pitan76.mcpitanlib.midohra.fluid.FluidWrapper; + +public interface IFluidVariant { + Fluid getFluid(); + + default FluidWrapper getWrapper() { + return FluidWrapper.of(getFluid()); + } + + default boolean isSame(IFluidVariant variant) { + return getFluid() == variant.getFluid(); + } + + default boolean isSame(Fluid fluid) { + return getFluid() == fluid; + } + + default boolean isBlank() { + return getFluid() == null || getFluid() == Fluids.EMPTY; + } + + static IFluidVariant of(Fluid fluid) { + return FluidStorageUtil.getVariant(fluid); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java new file mode 100644 index 000000000..0ffe8696b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java @@ -0,0 +1,102 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.network.packet.s2c.play.PositionFlag; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; + +import java.util.Optional; + +public class ServerPlayerUtil { + public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch, boolean resetCamera) { + return serverPlayerEntity.teleport(serverWorld, x, y, z, PositionFlag.VALUES, yaw, pitch, resetCamera); + } + + public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch) { + return teleport(serverPlayerEntity, serverWorld, x, y, z, yaw, pitch, false); + } + + public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z) { + return teleport(serverPlayerEntity, serverWorld, x, y, z, serverPlayerEntity.getYaw(), serverPlayerEntity.getPitch()); + } + public static boolean teleport(ServerPlayerEntity serverPlayerEntity, net.pitan76.mcpitanlib.midohra.world.ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch, boolean resetCamera) { + return teleport(serverPlayerEntity, serverWorld.getRaw(), x, y, z, yaw, pitch, resetCamera); + } + + public static boolean teleport(ServerPlayerEntity serverPlayerEntity, net.pitan76.mcpitanlib.midohra.world.ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch) { + return teleport(serverPlayerEntity, serverWorld, x, y, z, yaw, pitch, false); + } + + public static boolean teleport(ServerPlayerEntity serverPlayerEntity, net.pitan76.mcpitanlib.midohra.world.ServerWorld serverWorld, double x, double y, double z) { + return teleport(serverPlayerEntity, serverWorld, x, y, z, serverPlayerEntity.getYaw(), serverPlayerEntity.getPitch()); + } + + public static boolean teleport(Player player, net.pitan76.mcpitanlib.midohra.world.ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch, boolean resetCamera) { + Optional optionalServerPlayer = player.getServerPlayer(); + if (!optionalServerPlayer.isPresent()) return false; + + return teleport(optionalServerPlayer.get(), serverWorld, x, y, z, yaw, pitch, resetCamera); + } + + public static boolean teleport(Player player, net.pitan76.mcpitanlib.midohra.world.ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch) { + return teleport(player, serverWorld, x, y, z, yaw, pitch, false); + } + + public static boolean teleport(Player player, net.pitan76.mcpitanlib.midohra.world.ServerWorld serverWorld, double x, double y, double z) { + return teleport(player, serverWorld, x, y, z, player.getYaw(), player.getPitch()); + } + + public static boolean teleport(ServerPlayerEntity serverPlayerEntity, double x, double y, double z, boolean particleEffects) { + return serverPlayerEntity.teleport(x, y, z, particleEffects); + } + + public static boolean teleport(ServerPlayerEntity serverPlayerEntity, double x, double y, double z) { + return teleport(serverPlayerEntity, x, y, z, false); + } + + public static boolean teleport(Player player, double x, double y, double z, boolean particleEffects) { + Optional optionalServerPlayer = player.getServerPlayer(); + if (!optionalServerPlayer.isPresent()) return false; + + return teleport(optionalServerPlayer.get(), x, y, z, particleEffects); + } + + public static boolean teleport(Player player, double x, double y, double z) { + return teleport(player, x, y, z, false); + } + + public static void playSound(ServerPlayerEntity serverPlayerEntity, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { + serverPlayerEntity.playSoundToPlayer(soundEvent.get(), category.get(), volume, pitch); + } + + public static void playSound(ServerPlayerEntity serverPlayerEntity, CompatSoundEvent soundEvent, float volume, float pitch) { + serverPlayerEntity.playSound(soundEvent.get(), volume, pitch); + } + + public static void playSound(ServerPlayerEntity serverPlayerEntity, CompatSoundEvent soundEvent) { + serverPlayerEntity.playSound(soundEvent.get()); + } + + public static void playSound(Player player, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { + Optional optionalServerPlayer = player.getServerPlayer(); + if (!optionalServerPlayer.isPresent()) return; + + playSound(optionalServerPlayer.get(), soundEvent, category, volume, pitch); + } + + public static void playSound(Player player, CompatSoundEvent soundEvent, float volume, float pitch) { + Optional optionalServerPlayer = player.getServerPlayer(); + if (!optionalServerPlayer.isPresent()) return; + + playSound(optionalServerPlayer.get(), soundEvent, volume, pitch); + } + + public static void playSound(Player player, CompatSoundEvent soundEvent) { + Optional optionalServerPlayer = player.getServerPlayer(); + if (!optionalServerPlayer.isPresent()) return; + + playSound(optionalServerPlayer.get(), soundEvent); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java index 35b48bedb..0e7b8d9d5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java @@ -4,7 +4,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.FluidState; -import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; import net.pitan76.mcpitanlib.api.entity.Player; @@ -91,10 +90,15 @@ public BlockPos getSpawnPos() { } public Optional getWorld(CompatIdentifier id) { - Optional optional = WorldUtil.getWorld(getRaw(), id); + Optional optional = WorldUtil.getWorld(getRaw(), id); return optional.map(World::of); } + public Optional getServerWorld(CompatIdentifier id) { + Optional optional = WorldUtil.getWorld(getRaw(), id); + return optional.map(ServerWorld::of); + } + public void spawnEntity(Entity entity) { WorldUtil.spawnEntity(getRaw(), entity); } @@ -138,4 +142,11 @@ public void playSound(Player player, BlockPos pos, CompatSoundEvent soundEvent, public void playSound(BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { playSound(null, pos, soundEvent, category, volume, pitch); } + + public Optional toServerWorld() { + if (getRaw() instanceof net.minecraft.server.world.ServerWorld) { + return Optional.of(ServerWorld.of((net.minecraft.server.world.ServerWorld) getRaw())); + } + return Optional.empty(); + } } diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java index 67a10fe2c..1339d9e0d 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -7,6 +7,7 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; @SuppressWarnings("removal") public class FluidStorageUtil { @@ -33,6 +34,14 @@ public static void writeNbt(SingleFluidStorage storage, NbtRWArgs args) { args.nbt.copyFrom(storage.fluidVariant.getNbt()); } + public static void readNbt(SingleFluidStorage storage, NbtCompound nbt, CompatRegistryLookup registryLookup) { + storage.readNbt(nbt, registryLookup.getRegistryLookup()); + } + + public static void writeNbt(SingleFluidStorage storage, NbtCompound nbt, CompatRegistryLookup registryLookup) { + storage.writeNbt(nbt, registryLookup.getRegistryLookup()); + } + /** * @deprecated Use {@link #readNbt(SingleFluidStorage, NbtRWArgs)} instead */ diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java new file mode 100644 index 000000000..d1db98157 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java @@ -0,0 +1,78 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.fabric; + +import net.fabricmc.fabric.api.transfer.v1.fluid.base.SingleFluidStorage; +import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class FabricFluidStorage implements IFluidStorage { + + public final SingleFluidStorage storage; + + public FabricFluidStorage(SingleFluidStorage storage) { + this.storage = storage; + } + + @Override + public long getAmount() { + return storage.getAmount(); + } + + @Override + public long getCapacity() { + return storage.getCapacity(); + } + + @Override + public IFluidVariant getResource() { + return new FabricFluidVariant(storage.getResource()); + } + + @Override + public void setResource(IFluidVariant variant) { + storage.variant = ((FabricFluidVariant) variant).raw; + } + + @Override + public boolean isResourceBlank() { + return storage.isResourceBlank(); + } + + @Override + public long insert(IFluidVariant variant, long maxAmount, boolean simulate) { + if (simulate) + return storage.insert(((FabricFluidVariant) variant).raw, maxAmount, Transaction.openOuter()); + + long inserted = 0; + try (Transaction transaction = Transaction.openOuter()) { + inserted += storage.insert(((FabricFluidVariant) variant).raw, maxAmount, transaction); + transaction.commit(); + } + return inserted; + } + + @Override + public long extract(IFluidVariant variant, long maxAmount, boolean simulate) { + if (simulate) + return storage.extract(((FabricFluidVariant) variant).raw, maxAmount, Transaction.openOuter()); + + long extracted = 0; + try (Transaction transaction = Transaction.openOuter()) { + extracted += storage.extract(((FabricFluidVariant) variant).raw, maxAmount, transaction); + transaction.commit(); + } + return extracted; + } + + @Override + public void writeNbt(WriteNbtArgs args) { + storage.writeNbt(args.nbt, args.getWrapperLookup()); + } + + @Override + public void readNbt(WriteNbtArgs args) { + storage.readNbt(args.nbt, args.getWrapperLookup()); + + } +} diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidVariant.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidVariant.java new file mode 100644 index 000000000..fe003ced9 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidVariant.java @@ -0,0 +1,33 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.fabric; + +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; +import net.minecraft.fluid.Fluid; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class FabricFluidVariant implements IFluidVariant { + + public final FluidVariant raw; + + public FabricFluidVariant() { + this.raw = FluidVariant.blank(); + } + + public FabricFluidVariant(FluidVariant variant) { + this.raw = variant; + } + + @Override + public Fluid getFluid() { + return raw.getFluid(); + } + + @Override + public boolean isBlank() { + return raw.isBlank(); + } + + @Override + public boolean isSame(Fluid fluid) { + return raw.isOf(fluid); + } +} diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FluidStorageUtilImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FluidStorageUtilImpl.java new file mode 100644 index 000000000..c5d494ab7 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FluidStorageUtilImpl.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.fabric; + +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; +import net.fabricmc.fabric.api.transfer.v1.fluid.base.SingleFluidStorage; +import net.minecraft.fluid.Fluid; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class FluidStorageUtilImpl { + public static IFluidStorage withFixedCapacity(long capacity, Runnable onChange) { + return new FabricFluidStorage(SingleFluidStorage.withFixedCapacity(capacity, onChange)); + } + + public static IFluidVariant getVariant(Fluid fluid) { + return new FabricFluidVariant(FluidVariant.of(fluid)); + } +} diff --git a/info.properties b/info.properties index 115ffe57d..fda23a10f 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.1 +mod_version=3.1.2 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/FluidStorageUtilImpl.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/FluidStorageUtilImpl.java new file mode 100644 index 000000000..26ee978ec --- /dev/null +++ b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/FluidStorageUtilImpl.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.neoforge; + +import net.minecraft.fluid.Fluid; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.fluids.capability.templates.FluidTank; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class FluidStorageUtilImpl { + public static IFluidStorage withFixedCapacity(long capacity, Runnable onChange) { + return new NeoForgeFluidStorage(new FluidTank((int) capacity), onChange); + } + + public static IFluidVariant getVariant(Fluid fluid) { + return new NeoForgeFluidVariant(new FluidStack(fluid, 1)); + } +} diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java new file mode 100644 index 000000000..8d0519c69 --- /dev/null +++ b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java @@ -0,0 +1,72 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.neoforge; + +import net.neoforged.neoforge.fluids.capability.IFluidHandler; +import net.neoforged.neoforge.fluids.capability.templates.FluidTank; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class NeoForgeFluidStorage implements IFluidStorage { + + public final FluidTank storage; + + public Runnable onChange; + + public NeoForgeFluidStorage(FluidTank storage, Runnable onChange) { + this.storage = storage; + this.onChange = onChange; + } + + @Override + public long getAmount() { + return storage.getFluidAmount(); + } + + @Override + public long getCapacity() { + return storage.getCapacity(); + } + + @Override + public IFluidVariant getResource() { + return new NeoForgeFluidVariant(storage.getFluid()); + } + + @Override + public void setResource(IFluidVariant variant) { + storage.setFluid(((NeoForgeFluidVariant) variant).raw); + } + + @Override + public boolean isResourceBlank() { + return storage.isEmpty(); + } + + @Override + public long insert(IFluidVariant variant, long maxAmount, boolean simulate) { + if (simulate) + return storage.fill(((NeoForgeFluidVariant) variant).raw.copyWithAmount((int) maxAmount), IFluidHandler.FluidAction.SIMULATE); + + onChange.run(); + return storage.fill(((NeoForgeFluidVariant) variant).raw.copyWithAmount((int) maxAmount), IFluidHandler.FluidAction.EXECUTE); + } + + @Override + public long extract(IFluidVariant variant, long maxAmount, boolean simulate) { + if (simulate) + return storage.drain(((NeoForgeFluidVariant) variant).raw.copyWithAmount((int) maxAmount), IFluidHandler.FluidAction.SIMULATE).getAmount(); + + onChange.run(); + return storage.drain(((NeoForgeFluidVariant) variant).raw.copyWithAmount((int) maxAmount), IFluidHandler.FluidAction.EXECUTE).getAmount(); + } + + @Override + public void writeNbt(WriteNbtArgs args) { + storage.writeToNBT(args.getWrapperLookup(), args.nbt); + } + + @Override + public void readNbt(WriteNbtArgs args) { + storage.readFromNBT(args.getWrapperLookup(), args.nbt); + } +} diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidVariant.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidVariant.java new file mode 100644 index 000000000..8c5e0a995 --- /dev/null +++ b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidVariant.java @@ -0,0 +1,33 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.neoforge; + +import net.minecraft.fluid.Fluid; +import net.neoforged.neoforge.fluids.FluidStack; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class NeoForgeFluidVariant implements IFluidVariant { + + public final FluidStack raw; + + public NeoForgeFluidVariant() { + this.raw = FluidStack.EMPTY; + } + + public NeoForgeFluidVariant(FluidStack stack) { + this.raw = stack; + } + + @Override + public Fluid getFluid() { + return raw.getFluid(); + } + + @Override + public boolean isBlank() { + return raw.isEmpty(); + } + + @Override + public boolean isSame(Fluid fluid) { + return raw.is(fluid); + } +} From 6863cd408376a819d08690124ade39edd075135b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:15:31 +0900 Subject: [PATCH 426/617] 1211 --- .../mcpitanlib/api/util/entity/ServerPlayerUtil.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java index 0ffe8696b..7ac2d7a4c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java @@ -11,7 +11,12 @@ public class ServerPlayerUtil { public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch, boolean resetCamera) { - return serverPlayerEntity.teleport(serverWorld, x, y, z, PositionFlag.VALUES, yaw, pitch, resetCamera); + if (resetCamera) { + serverPlayerEntity.stopRiding(); + serverPlayerEntity.setCameraEntity(serverPlayerEntity); + } + + return serverPlayerEntity.teleport(serverWorld, x, y, z, PositionFlag.VALUES, yaw, pitch); } public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch) { From e16c47ce3a7cc9ad0eea8742d490671347f9323d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:18:11 +0900 Subject: [PATCH 427/617] 1211-2 --- .../mcpitanlib/api/util/entity/ServerPlayerUtil.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java index 7ac2d7a4c..2ea786e13 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java @@ -1,12 +1,12 @@ package net.pitan76.mcpitanlib.api.util.entity; -import net.minecraft.network.packet.s2c.play.PositionFlag; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import java.util.Collections; import java.util.Optional; public class ServerPlayerUtil { @@ -16,11 +16,12 @@ public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorl serverPlayerEntity.setCameraEntity(serverPlayerEntity); } - return serverPlayerEntity.teleport(serverWorld, x, y, z, PositionFlag.VALUES, yaw, pitch); + return serverPlayerEntity.teleport(serverWorld, x, y, z, Collections.emptySet(), yaw, pitch); } public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch) { - return teleport(serverPlayerEntity, serverWorld, x, y, z, yaw, pitch, false); + serverPlayerEntity.teleport(serverWorld, x, y, z, yaw, pitch); + return true; } public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z) { From 1a61f9084f68a701c6df753d835f2956cc869f86 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:26:21 +0900 Subject: [PATCH 428/617] 1204 --- .../api/tile/CompatBlockEntity.java | 6 +- .../api/util/entity/ServerPlayerUtil.java | 4 +- .../extra/transfer/util/FluidStorageUtil.java | 4 +- .../fluid/v1/fabric/FabricFluidStorage.java | 4 +- .../fluid/v1/forge/FluidStorageUtilImpl.java | 17 ++++ .../fluid/v1/forge/ForgeFluidStorage.java | 79 +++++++++++++++++++ .../fluid/v1/forge/ForgeFluidVariant.java | 33 ++++++++ .../v1/neoforge/NeoForgeFluidStorage.java | 4 +- 8 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/FluidStorageUtilImpl.java create mode 100644 forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidStorage.java create mode 100644 forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidVariant.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java index bc485afd6..dcfbd5330 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java @@ -49,13 +49,13 @@ public void readNbt(ReadNbtArgs args) { } public NbtCompound toInitialChunkDataNbt(CompatRegistryLookup registryLookup) { - return super.toInitialChunkDataNbt(registryLookup.getRegistryLookup()); + return super.toInitialChunkDataNbt(); } @Deprecated @Override - public NbtCompound toInitialChunkDataNbt(RegistryWrapper.WrapperLookup registries) { - return toInitialChunkDataNbt(new CompatRegistryLookup(registries)); + public NbtCompound toInitialChunkDataNbt() { + return toInitialChunkDataNbt(new CompatRegistryLookup()); } // deprecated diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java index 2ea786e13..091e5d099 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java @@ -74,7 +74,7 @@ public static boolean teleport(Player player, double x, double y, double z) { } public static void playSound(ServerPlayerEntity serverPlayerEntity, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { - serverPlayerEntity.playSoundToPlayer(soundEvent.get(), category.get(), volume, pitch); + serverPlayerEntity.playSound(soundEvent.get(), category.get(), volume, pitch); } public static void playSound(ServerPlayerEntity serverPlayerEntity, CompatSoundEvent soundEvent, float volume, float pitch) { @@ -82,7 +82,7 @@ public static void playSound(ServerPlayerEntity serverPlayerEntity, CompatSoundE } public static void playSound(ServerPlayerEntity serverPlayerEntity, CompatSoundEvent soundEvent) { - serverPlayerEntity.playSound(soundEvent.get()); + serverPlayerEntity.playSound(soundEvent.get(), 1.0F, 1.0F); } public static void playSound(Player player, CompatSoundEvent soundEvent, CompatSoundCategory category, float volume, float pitch) { diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java index 1339d9e0d..1d6a23a68 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -35,11 +35,11 @@ public static void writeNbt(SingleFluidStorage storage, NbtRWArgs args) { } public static void readNbt(SingleFluidStorage storage, NbtCompound nbt, CompatRegistryLookup registryLookup) { - storage.readNbt(nbt, registryLookup.getRegistryLookup()); + storage.readNbt(nbt); } public static void writeNbt(SingleFluidStorage storage, NbtCompound nbt, CompatRegistryLookup registryLookup) { - storage.writeNbt(nbt, registryLookup.getRegistryLookup()); + storage.writeNbt(nbt); } /** diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java index d1db98157..098761b45 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java @@ -67,12 +67,12 @@ public long extract(IFluidVariant variant, long maxAmount, boolean simulate) { @Override public void writeNbt(WriteNbtArgs args) { - storage.writeNbt(args.nbt, args.getWrapperLookup()); + storage.writeNbt(args.nbt); } @Override public void readNbt(WriteNbtArgs args) { - storage.readNbt(args.nbt, args.getWrapperLookup()); + storage.readNbt(args.nbt); } } diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/FluidStorageUtilImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/FluidStorageUtilImpl.java new file mode 100644 index 000000000..de77a172f --- /dev/null +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/FluidStorageUtilImpl.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.forge; + +import net.minecraft.fluid.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class FluidStorageUtilImpl { + public static IFluidStorage withFixedCapacity(long capacity, Runnable onChange) { + return new ForgeFluidStorage(new FluidTank((int) capacity), onChange); + } + + public static IFluidVariant getVariant(Fluid fluid) { + return new ForgeFluidVariant(new FluidStack(fluid, 1)); + } +} diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidStorage.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidStorage.java new file mode 100644 index 000000000..fc53ff942 --- /dev/null +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidStorage.java @@ -0,0 +1,79 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.forge; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class ForgeFluidStorage implements IFluidStorage { + + public final FluidTank storage; + + public Runnable onChange; + + public ForgeFluidStorage(FluidTank storage, Runnable onChange) { + this.storage = storage; + this.onChange = onChange; + } + + @Override + public long getAmount() { + return storage.getFluidAmount(); + } + + @Override + public long getCapacity() { + return storage.getCapacity(); + } + + @Override + public IFluidVariant getResource() { + return new ForgeFluidVariant(storage.getFluid()); + } + + @Override + public void setResource(IFluidVariant variant) { + storage.setFluid(((ForgeFluidVariant) variant).raw); + } + + @Override + public boolean isResourceBlank() { + return storage.isEmpty(); + } + + @Override + public long insert(IFluidVariant variant, long maxAmount, boolean simulate) { + FluidStack stack = ((ForgeFluidVariant) variant).raw.copy(); + stack.setAmount((int) maxAmount); + if (simulate) { + return storage.fill(stack, IFluidHandler.FluidAction.SIMULATE); + } + + onChange.run(); + return storage.fill(stack, IFluidHandler.FluidAction.EXECUTE); + } + + @Override + public long extract(IFluidVariant variant, long maxAmount, boolean simulate) { + FluidStack stack = ((ForgeFluidVariant) variant).raw.copy(); + stack.setAmount((int) maxAmount); + if (simulate) { + return storage.drain(stack, IFluidHandler.FluidAction.SIMULATE).getAmount(); + } + + onChange.run(); + return storage.drain(stack, IFluidHandler.FluidAction.EXECUTE).getAmount(); + } + + @Override + public void writeNbt(WriteNbtArgs args) { + storage.writeToNBT(args.nbt); + } + + @Override + public void readNbt(WriteNbtArgs args) { + storage.readFromNBT(args.nbt); + } +} diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidVariant.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidVariant.java new file mode 100644 index 000000000..90b316c93 --- /dev/null +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidVariant.java @@ -0,0 +1,33 @@ +package net.pitan76.mcpitanlib.api.transfer.fluid.v1.forge; + +import net.minecraft.fluid.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; + +public class ForgeFluidVariant implements IFluidVariant { + + public final FluidStack raw; + + public ForgeFluidVariant() { + this.raw = FluidStack.EMPTY; + } + + public ForgeFluidVariant(FluidStack stack) { + this.raw = stack; + } + + @Override + public Fluid getFluid() { + return raw.getFluid(); + } + + @Override + public boolean isBlank() { + return raw.isEmpty(); + } + + @Override + public boolean isSame(Fluid fluid) { + return raw.getFluid().equals(fluid); + } +} diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java index 8d0519c69..4ea8bfcc9 100644 --- a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java +++ b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java @@ -62,11 +62,11 @@ public long extract(IFluidVariant variant, long maxAmount, boolean simulate) { @Override public void writeNbt(WriteNbtArgs args) { - storage.writeToNBT(args.getWrapperLookup(), args.nbt); + storage.writeToNBT(args.nbt); } @Override public void readNbt(WriteNbtArgs args) { - storage.readFromNBT(args.getWrapperLookup(), args.nbt); + storage.readFromNBT(args.nbt); } } From 78fe67ea5c6f05e04233eb1ea88c70f35ccc230e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:32:45 +0900 Subject: [PATCH 429/617] removeneo --- .../v1/neoforge/FluidStorageUtilImpl.java | 17 ----- .../v1/neoforge/NeoForgeFluidStorage.java | 72 ------------------- .../v1/neoforge/NeoForgeFluidVariant.java | 33 --------- 3 files changed, 122 deletions(-) delete mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/FluidStorageUtilImpl.java delete mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java delete mode 100644 neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidVariant.java diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/FluidStorageUtilImpl.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/FluidStorageUtilImpl.java deleted file mode 100644 index 26ee978ec..000000000 --- a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/FluidStorageUtilImpl.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.pitan76.mcpitanlib.api.transfer.fluid.v1.neoforge; - -import net.minecraft.fluid.Fluid; -import net.neoforged.neoforge.fluids.FluidStack; -import net.neoforged.neoforge.fluids.capability.templates.FluidTank; -import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; -import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; - -public class FluidStorageUtilImpl { - public static IFluidStorage withFixedCapacity(long capacity, Runnable onChange) { - return new NeoForgeFluidStorage(new FluidTank((int) capacity), onChange); - } - - public static IFluidVariant getVariant(Fluid fluid) { - return new NeoForgeFluidVariant(new FluidStack(fluid, 1)); - } -} diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java deleted file mode 100644 index 4ea8bfcc9..000000000 --- a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidStorage.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.pitan76.mcpitanlib.api.transfer.fluid.v1.neoforge; - -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.fluids.capability.templates.FluidTank; -import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; -import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; -import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; - -public class NeoForgeFluidStorage implements IFluidStorage { - - public final FluidTank storage; - - public Runnable onChange; - - public NeoForgeFluidStorage(FluidTank storage, Runnable onChange) { - this.storage = storage; - this.onChange = onChange; - } - - @Override - public long getAmount() { - return storage.getFluidAmount(); - } - - @Override - public long getCapacity() { - return storage.getCapacity(); - } - - @Override - public IFluidVariant getResource() { - return new NeoForgeFluidVariant(storage.getFluid()); - } - - @Override - public void setResource(IFluidVariant variant) { - storage.setFluid(((NeoForgeFluidVariant) variant).raw); - } - - @Override - public boolean isResourceBlank() { - return storage.isEmpty(); - } - - @Override - public long insert(IFluidVariant variant, long maxAmount, boolean simulate) { - if (simulate) - return storage.fill(((NeoForgeFluidVariant) variant).raw.copyWithAmount((int) maxAmount), IFluidHandler.FluidAction.SIMULATE); - - onChange.run(); - return storage.fill(((NeoForgeFluidVariant) variant).raw.copyWithAmount((int) maxAmount), IFluidHandler.FluidAction.EXECUTE); - } - - @Override - public long extract(IFluidVariant variant, long maxAmount, boolean simulate) { - if (simulate) - return storage.drain(((NeoForgeFluidVariant) variant).raw.copyWithAmount((int) maxAmount), IFluidHandler.FluidAction.SIMULATE).getAmount(); - - onChange.run(); - return storage.drain(((NeoForgeFluidVariant) variant).raw.copyWithAmount((int) maxAmount), IFluidHandler.FluidAction.EXECUTE).getAmount(); - } - - @Override - public void writeNbt(WriteNbtArgs args) { - storage.writeToNBT(args.nbt); - } - - @Override - public void readNbt(WriteNbtArgs args) { - storage.readFromNBT(args.nbt); - } -} diff --git a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidVariant.java b/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidVariant.java deleted file mode 100644 index 8c5e0a995..000000000 --- a/neoforge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/neoforge/NeoForgeFluidVariant.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.pitan76.mcpitanlib.api.transfer.fluid.v1.neoforge; - -import net.minecraft.fluid.Fluid; -import net.neoforged.neoforge.fluids.FluidStack; -import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; - -public class NeoForgeFluidVariant implements IFluidVariant { - - public final FluidStack raw; - - public NeoForgeFluidVariant() { - this.raw = FluidStack.EMPTY; - } - - public NeoForgeFluidVariant(FluidStack stack) { - this.raw = stack; - } - - @Override - public Fluid getFluid() { - return raw.getFluid(); - } - - @Override - public boolean isBlank() { - return raw.isEmpty(); - } - - @Override - public boolean isSame(Fluid fluid) { - return raw.is(fluid); - } -} From 11f94edaffefe69946580173418bc51d41c04ac0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:37:39 +0900 Subject: [PATCH 430/617] 1192 --- .../api/registry/CompatRegistryLookup.java | 4 ++-- .../mcpitanlib/api/util/entity/ServerPlayerUtil.java | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java index a331c92d3..be27293ae 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/CompatRegistryLookup.java @@ -16,10 +16,10 @@ public NbtRWArgs getNbtRWArgs(NbtCompound nbt) { } public WriteNbtArgs createWriteNbtArgs(NbtCompound nbt) { - return new WriteNbtArgs(nbt, registryLookup); + return new WriteNbtArgs(nbt); } public ReadNbtArgs createReadNbtArgs(NbtCompound nbt) { - return new ReadNbtArgs(nbt, registryLookup); + return new ReadNbtArgs(nbt); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java index 091e5d099..84b9f0f24 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ServerPlayerUtil.java @@ -1,22 +1,24 @@ package net.pitan76.mcpitanlib.api.util.entity; +import net.minecraft.entity.Entity; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; -import java.util.Collections; import java.util.Optional; public class ServerPlayerUtil { public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch, boolean resetCamera) { - if (resetCamera) { - serverPlayerEntity.stopRiding(); - serverPlayerEntity.setCameraEntity(serverPlayerEntity); + if (!resetCamera) { + Entity cameraEntity = serverPlayerEntity.getCameraEntity(); + teleport(serverPlayerEntity, serverWorld, x, y, z, yaw, pitch); + serverPlayerEntity.setCameraEntity(cameraEntity); } - return serverPlayerEntity.teleport(serverWorld, x, y, z, Collections.emptySet(), yaw, pitch); + teleport(serverPlayerEntity, serverWorld, x, y, z, yaw, pitch); + return true; } public static boolean teleport(ServerPlayerEntity serverPlayerEntity, ServerWorld serverWorld, double x, double y, double z, float yaw, float pitch) { From 69a22c73aaa3ad5040a93958f5e6b9f8a761d5cf Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:47:04 +0900 Subject: [PATCH 431/617] 1182 --- .../api/extra/transfer/util/FluidStorageUtil.java | 6 +++--- .../api/transfer/fluid/v1/fabric/FabricFluidStorage.java | 8 +++++--- .../transfer/fluid/v1/fabric/FluidStorageUtilImpl.java | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java index 1d6a23a68..104e799be 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/extra/transfer/util/FluidStorageUtil.java @@ -9,7 +9,7 @@ import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; -@SuppressWarnings("removal") +@SuppressWarnings({"removal", "UnstableApiUsage"}) public class FluidStorageUtil { public static SingleFluidStorage withFixedCapacity(long capacity, Runnable onChange) { return new SingleFluidStorage() { @@ -35,11 +35,11 @@ public static void writeNbt(SingleFluidStorage storage, NbtRWArgs args) { } public static void readNbt(SingleFluidStorage storage, NbtCompound nbt, CompatRegistryLookup registryLookup) { - storage.readNbt(nbt); + readNbt(storage, new NbtRWArgs(nbt, registryLookup)); } public static void writeNbt(SingleFluidStorage storage, NbtCompound nbt, CompatRegistryLookup registryLookup) { - storage.writeNbt(nbt); + writeNbt(storage, new NbtRWArgs(nbt, registryLookup)); } /** diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java index 098761b45..91cd250ed 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java @@ -3,9 +3,11 @@ import net.fabricmc.fabric.api.transfer.v1.fluid.base.SingleFluidStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.extra.transfer.util.FluidStorageUtil; import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; +@SuppressWarnings({"removal", "UnstableApiUsage"}) public class FabricFluidStorage implements IFluidStorage { public final SingleFluidStorage storage; @@ -31,7 +33,7 @@ public IFluidVariant getResource() { @Override public void setResource(IFluidVariant variant) { - storage.variant = ((FabricFluidVariant) variant).raw; + storage.fluidVariant = ((FabricFluidVariant) variant).raw; } @Override @@ -67,12 +69,12 @@ public long extract(IFluidVariant variant, long maxAmount, boolean simulate) { @Override public void writeNbt(WriteNbtArgs args) { - storage.writeNbt(args.nbt); + FluidStorageUtil.writeNbt(storage, args); } @Override public void readNbt(WriteNbtArgs args) { - storage.readNbt(args.nbt); + FluidStorageUtil.readNbt(storage, args); } } diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FluidStorageUtilImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FluidStorageUtilImpl.java index c5d494ab7..a50b0c7cc 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FluidStorageUtilImpl.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FluidStorageUtilImpl.java @@ -1,14 +1,14 @@ package net.pitan76.mcpitanlib.api.transfer.fluid.v1.fabric; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; -import net.fabricmc.fabric.api.transfer.v1.fluid.base.SingleFluidStorage; import net.minecraft.fluid.Fluid; +import net.pitan76.mcpitanlib.api.extra.transfer.util.FluidStorageUtil; import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; public class FluidStorageUtilImpl { public static IFluidStorage withFixedCapacity(long capacity, Runnable onChange) { - return new FabricFluidStorage(SingleFluidStorage.withFixedCapacity(capacity, onChange)); + return new FabricFluidStorage(FluidStorageUtil.withFixedCapacity(capacity, onChange)); } public static IFluidVariant getVariant(Fluid fluid) { From 01ff576e9b2c26d1a32f587ae07877ec38da8e98 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:55:28 +0900 Subject: [PATCH 432/617] ExtendSettings --- .../net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java index cba915da9..fb29e3ea5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatibleItemSettings.java @@ -74,7 +74,7 @@ public CompatibleItemSettings recipeRemainder(Item recipeRemainder) { return this; } - public Item.Settings build() { + public ExtendSettings build() { if (itemGroupId != null) { if (CreativeTabBuilder.itemGroupBuilderMap.containsKey(itemGroupId)) { CreativeTabBuilder itemGroupBuilder = CreativeTabBuilder.itemGroupBuilderMap.get(itemGroupId); From f58b13e6ed8f30d58271e3e15882ebffec423dda Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 8 Dec 2024 00:00:16 +0900 Subject: [PATCH 433/617] fix apis 1192 --- .../midohra/recipe/ShapelessRecipe.java | 15 +++++++++++++++ .../pitan76/mcpitanlib/midohra/world/World.java | 6 ++++++ info.properties | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java index 68776c79b..1286d0f33 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapelessRecipe.java @@ -1,5 +1,7 @@ package net.pitan76.mcpitanlib.midohra.recipe; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.midohra.item.ItemStack; import net.pitan76.mcpitanlib.midohra.recipe.input.CraftingRecipeInputOrInventory; @@ -27,10 +29,23 @@ public boolean matches(CraftingRecipeInputOrInventory input) { return getRaw().matches(input.getRaw(), null); } + @Deprecated public net.minecraft.item.ItemStack craft() { return getRaw().craft(null); } + public net.minecraft.item.ItemStack craft(CompatRegistryLookup registryLookup) { + return craft(); + } + + public net.minecraft.item.ItemStack craft(World world) { + return craft(); + } + + public net.minecraft.item.ItemStack craft(net.pitan76.mcpitanlib.midohra.world.World world) { + return craft(); + } + public ItemStack craftMidohra() { return ItemStack.of(craft()); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java index 0e7b8d9d5..7d5fe8800 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/World.java @@ -7,9 +7,11 @@ import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.RegistryLookupUtil; import net.pitan76.mcpitanlib.api.util.WorldUtil; import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; import net.pitan76.mcpitanlib.midohra.recipe.RecipeManager; @@ -149,4 +151,8 @@ public Optional toServerWorld() { } return Optional.empty(); } + + public CompatRegistryLookup getRegistryLookup() { + return RegistryLookupUtil.getRegistryLookup(getRaw()); + } } diff --git a/info.properties b/info.properties index fda23a10f..ed4391aa5 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.2 +mod_version=3.1.3 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From deb81751337a93dde26fdd70e05d578952f0eb73 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sun, 8 Dec 2024 00:03:14 +0900 Subject: [PATCH 434/617] 1211 --- .../net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java index 86319a8b8..4fd2c2cf6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.midohra.recipe; import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; import net.pitan76.mcpitanlib.midohra.item.ItemStack; import net.pitan76.mcpitanlib.midohra.recipe.input.CraftingRecipeInputOrInventory; From 94b8bac596325a115c24e4c81d41468fcef648eb Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Sun, 8 Dec 2024 00:11:11 +0900 Subject: [PATCH 435/617] 1192 --- .../mcpitanlib/midohra/recipe/CraftingRecipe.java | 8 ++++++++ .../mcpitanlib/midohra/recipe/ShapedRecipe.java | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java index 4fd2c2cf6..3b7c408e8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java @@ -39,6 +39,14 @@ public ItemStack craftMidohra(CraftingRecipeInputOrInventory input, World world) return ItemStack.of(craft(input, world)); } + public net.minecraft.item.ItemStack craft(CraftingRecipeInputOrInventory input, CompatRegistryLookup registryLookup) { + return getRaw().craft(input.getRaw()); + } + + public net.minecraft.item.ItemStack craft(CraftingRecipeInputOrInventory input, net.minecraft.world.World world) { + return getRaw().craft(input.getRaw()); + } + public DefaultedList getRecipeRemaindersDefaultedList(CraftingRecipeInputOrInventory input) { return getRaw().getRemainder(input.getRaw()); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java index acd751e2a..7e61ff923 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/ShapedRecipe.java @@ -1,5 +1,7 @@ package net.pitan76.mcpitanlib.midohra.recipe; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.midohra.item.ItemStack; import net.pitan76.mcpitanlib.midohra.recipe.input.CraftingRecipeInputOrInventory; @@ -27,10 +29,23 @@ public boolean matches(CraftingRecipeInputOrInventory input) { return getRaw().matches(input.getRaw(), null); } + @Deprecated public net.minecraft.item.ItemStack craft() { return getRaw().craft(null); } + public net.minecraft.item.ItemStack craft(CompatRegistryLookup registryLookup) { + return craft(); + } + + public net.minecraft.item.ItemStack craft(World world) { + return craft(); + } + + public net.minecraft.item.ItemStack craft(net.pitan76.mcpitanlib.midohra.world.World world) { + return craft(); + } + public ItemStack craftMidohra() { return ItemStack.of(craft()); } From a0a11412412c9f27dba6e07f2e54075512d625e5 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 27 Jan 2025 15:44:34 +0900 Subject: [PATCH 436/617] add apis --- .../api/recipe/CompatRecipeType.java | 5 ++ .../api/recipe/CompatibleRecipeEntry.java | 1 + .../mcpitanlib/api/recipe/MatchGetter.java | 1 + .../api/recipe/v2/CompatRecipeEntry.java | 1 + .../api/recipe/v2/CompatRecipeNonEntry.java | 1 + .../api/recipe/v3/CompatRecipe.java | 79 +++++++++++++++++ .../api/util/recipe/RecipeUtil.java | 85 +++++++++++++++++++ .../midohra/recipe/CraftingRecipe.java | 12 +++ .../mcpitanlib/midohra/recipe/RecipeType.java | 14 +-- info.properties | 2 +- 10 files changed, 193 insertions(+), 8 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v3/CompatRecipe.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatRecipeType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatRecipeType.java index 6c19bffd5..555d8a7ee 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatRecipeType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatRecipeType.java @@ -5,6 +5,7 @@ import net.minecraft.util.registry.Registry; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +@Deprecated public class CompatRecipeType> { public static final CompatRecipeType CRAFTING = new CompatRecipeType<>(RecipeType.CRAFTING); public static final CompatRecipeType SMELTING = new CompatRecipeType<>(RecipeType.SMELTING); @@ -49,4 +50,8 @@ public static > CompatRecipeType of(CompatIdentifier id, public static > CompatRecipeType of(RecipeType type) { return new CompatRecipeType<>(type); } + + public net.pitan76.mcpitanlib.midohra.recipe.RecipeType toMidohra() { + return net.pitan76.mcpitanlib.midohra.recipe.RecipeType.of(type); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java index 52217f072..c97b3fd54 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/CompatibleRecipeEntry.java @@ -9,6 +9,7 @@ import net.pitan76.mcpitanlib.api.util.RecipeUtil; import org.jetbrains.annotations.Nullable; +@Deprecated public class CompatibleRecipeEntry { private final Recipe recipe; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/MatchGetter.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/MatchGetter.java index 0da1547fc..ee31266f7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/MatchGetter.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/MatchGetter.java @@ -8,6 +8,7 @@ import java.util.Optional; +@Deprecated public interface MatchGetter> { Optional> getFirstMatch(CompatRecipeInput input, World world); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java index 09c471d8c..93a180369 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeEntry.java @@ -7,6 +7,7 @@ import net.pitan76.mcpitanlib.api.util.RecipeUtil; import org.jetbrains.annotations.Nullable; +@Deprecated public class CompatRecipeEntry { private final Recipe recipe; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java index b51c45b08..b678eef81 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v2/CompatRecipeNonEntry.java @@ -5,6 +5,7 @@ import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.RecipeUtil; +@Deprecated public class CompatRecipeNonEntry extends CompatRecipeEntry { public CompatRecipeNonEntry(Recipe recipe) { super(CompatIdentifier.EMPTY, "", RecipeUtil.CompatibilityCraftingRecipeCategory.MISC, recipe); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v3/CompatRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v3/CompatRecipe.java new file mode 100644 index 000000000..39743789c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/recipe/v3/CompatRecipe.java @@ -0,0 +1,79 @@ +package net.pitan76.mcpitanlib.api.recipe.v3; + +import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeType; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; +import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeEntry; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.recipe.entry.RecipeEntry; + +public class CompatRecipe { + public Recipe recipe; + public Identifier id; + + public CompatRecipe(Recipe recipe, Identifier id) { + this.recipe = recipe; + this.id = id; + } + + @Deprecated + public CompatRecipe(Recipe recipe) { + this.recipe = recipe; + this.id = recipe.getId(); + } + + public boolean isNull() { + return recipe == null; + } + + public Recipe getRecipe() { + return recipe; + } + + public Identifier getId() { + return id; + } + + public CompatIdentifier getCompatId() { + return CompatIdentifier.fromMinecraft(getId()); + } + + public RecipeType getType() { + Recipe recipe = getRecipe(); + if (recipe == null) return null; + + return recipe.getType(); + } + + @Deprecated + public CompatRecipeEntry getRecipeEntry() { + return new CompatRecipeEntry<>(getId(), "", null, getRecipe()); + } + + @Deprecated + public CompatibleRecipeEntry getCompatibleRecipeEntry() { + return new CompatibleRecipeEntry(getRecipe()); + } + + // MidohraAPI + public net.pitan76.mcpitanlib.midohra.recipe.Recipe getMidohraRecipe() { + if (getMidohraType() == net.pitan76.mcpitanlib.midohra.recipe.RecipeType.CRAFTING) { + return net.pitan76.mcpitanlib.midohra.recipe.CraftingRecipe.of((net.minecraft.recipe.CraftingRecipe) getRecipe()); + } + + return net.pitan76.mcpitanlib.midohra.recipe.Recipe.of(getRecipe()); + } + + public net.pitan76.mcpitanlib.midohra.recipe.entry.RecipeEntry getMidohraRecipeEntry() { + if (getMidohraType() == net.pitan76.mcpitanlib.midohra.recipe.RecipeType.CRAFTING) { + return net.pitan76.mcpitanlib.midohra.recipe.entry.CraftingRecipeEntry.of((net.minecraft.recipe.CraftingRecipe) getRecipe(), getCompatId()); + } + + return RecipeEntry.of(getRecipe(), getCompatId()); + } + + public net.pitan76.mcpitanlib.midohra.recipe.RecipeType getMidohraType() { + return net.pitan76.mcpitanlib.midohra.recipe.RecipeType.of(getType()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeUtil.java new file mode 100644 index 000000000..f92ad4596 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/recipe/RecipeUtil.java @@ -0,0 +1,85 @@ +package net.pitan76.mcpitanlib.api.util.recipe; + +import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeType; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.recipe.v3.CompatRecipe; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.recipe.CraftingRecipe; +import net.pitan76.mcpitanlib.midohra.recipe.entry.CraftingRecipeEntry; +import net.pitan76.mcpitanlib.midohra.recipe.entry.RecipeEntry; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class RecipeUtil { + public static Collection> getMCRecipes(World world) { + return world.getRecipeManager().values(); + } + + public static Collection getRecipes(World world) { + List recipes = new ArrayList<>(); + + for (Recipe recipe : getMCRecipes(world)) { + recipes.add(new CompatRecipe(recipe, recipe.getId())); + } + + return recipes; + } + + public static Collection getRecipesByType(World world, RecipeType type) { + List recipes = new ArrayList<>(); + + for (Recipe recipe : getMCRecipes(world)) { + if (recipe.getType() == type) { + recipes.add(new CompatRecipe(recipe, recipe.getId())); + } + } + + return recipes; + } + + // MidohraAPI + public static Collection getRecipes(net.pitan76.mcpitanlib.midohra.world.World world) { + return getRecipes(world.getRaw()); + } + + public static Collection getRecipesByType(net.pitan76.mcpitanlib.midohra.world.World world, net.pitan76.mcpitanlib.midohra.recipe.RecipeType type) { + return getRecipesByType(world.getRaw(), type.getRaw()); + } + + public static Collection getRecipeEntries(net.pitan76.mcpitanlib.midohra.world.World world) { + List entries = new ArrayList<>(); + + for (Recipe recipe : getMCRecipes(world.getRaw())) { + entries.add(RecipeEntry.of(recipe, CompatIdentifier.fromMinecraft(recipe.getId()))); + } + + return entries; + } + + public static Collection getCraftingRecipes(net.pitan76.mcpitanlib.midohra.world.World world) { + List recipes = new ArrayList<>(); + + for (CompatRecipe recipe : getRecipesByType(world, net.pitan76.mcpitanlib.midohra.recipe.RecipeType.CRAFTING)) { + if (recipe.getRecipe() instanceof net.minecraft.recipe.CraftingRecipe) { + recipes.add(CraftingRecipe.of((net.minecraft.recipe.CraftingRecipe) recipe.getRecipe())); + } + } + + return recipes; + } + + public static Collection getCraftingRecipeEntries(net.pitan76.mcpitanlib.midohra.world.World world) { + List entries = new ArrayList<>(); + + for (Recipe recipe : getMCRecipes(world.getRaw())) { + if (recipe instanceof net.minecraft.recipe.CraftingRecipe) { + entries.add(CraftingRecipeEntry.of((net.minecraft.recipe.CraftingRecipe) recipe, CompatIdentifier.fromMinecraft(recipe.getId()))); + } + } + + return entries; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java index 3b7c408e8..407a0a801 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/CraftingRecipe.java @@ -54,4 +54,16 @@ public DefaultedList getRecipeRemaindersDefaultedL public ItemStackList getRecipeRemainders(CraftingRecipeInputOrInventory input) { return ItemStackList.of(getRecipeRemaindersDefaultedList(input)); } + + public net.minecraft.item.ItemStack getOutput(CraftingRecipeInputOrInventory input, net.minecraft.world.World world) { + return getRaw().getOutput(); + } + + public net.minecraft.item.ItemStack getOutput(CraftingRecipeInputOrInventory input, World world) { + return getOutput(input, world.getRaw()); + } + + public ItemStack getOutputMidohra(CraftingRecipeInputOrInventory input, World world) { + return ItemStack.of(getOutput(input, world)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java index c51b514b3..83762661d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/recipe/RecipeType.java @@ -7,13 +7,13 @@ public class RecipeType { private final net.minecraft.recipe.RecipeType recipeType; - public static RecipeType CRAFTING = new RecipeType(net.minecraft.recipe.RecipeType.CRAFTING); - public static RecipeType SMELTING = new RecipeType(net.minecraft.recipe.RecipeType.SMELTING); - public static RecipeType BLASTING = new RecipeType(net.minecraft.recipe.RecipeType.BLASTING); - public static RecipeType SMOKING = new RecipeType(net.minecraft.recipe.RecipeType.SMOKING); - public static RecipeType CAMPFIRE_COOKING = new RecipeType(net.minecraft.recipe.RecipeType.CAMPFIRE_COOKING); - public static RecipeType STONECUTTING = new RecipeType(net.minecraft.recipe.RecipeType.STONECUTTING); - public static RecipeType SMITHING = new RecipeType(net.minecraft.recipe.RecipeType.SMITHING); + public static final RecipeType CRAFTING = new RecipeType(net.minecraft.recipe.RecipeType.CRAFTING); + public static final RecipeType SMELTING = new RecipeType(net.minecraft.recipe.RecipeType.SMELTING); + public static final RecipeType BLASTING = new RecipeType(net.minecraft.recipe.RecipeType.BLASTING); + public static final RecipeType SMOKING = new RecipeType(net.minecraft.recipe.RecipeType.SMOKING); + public static final RecipeType CAMPFIRE_COOKING = new RecipeType(net.minecraft.recipe.RecipeType.CAMPFIRE_COOKING); + public static final RecipeType STONECUTTING = new RecipeType(net.minecraft.recipe.RecipeType.STONECUTTING); + public static final RecipeType SMITHING = new RecipeType(net.minecraft.recipe.RecipeType.SMITHING); protected RecipeType(net.minecraft.recipe.RecipeType recipeType) { this.recipeType = recipeType; diff --git a/info.properties b/info.properties index ed4391aa5..e927acdea 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.3 +mod_version=3.1.4 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 8ea696682db3a958e5afce71a46bfe0bf8925520 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 5 Feb 2025 17:59:02 +0900 Subject: [PATCH 437/617] fix APIs --- .../pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java | 2 +- .../main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java | 2 +- info.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java index c6e9f1050..368be8ddc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlockProvider.java @@ -47,7 +47,7 @@ default BlockState getDefaultMidohraState() { default void setDefaultState(BlockState state) { if (this instanceof Block) { - ((BlockInvoker) this).setDefaultState(state.toMinecraft()); + ((BlockInvoker) this).setDefaultState_invoke(state.toMinecraft()); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java index 919805dc5..edf1d6c7b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/BlockInvoker.java @@ -8,5 +8,5 @@ @Mixin(Block.class) public interface BlockInvoker { @Invoker("setDefaultState") - void setDefaultState(BlockState state); + void setDefaultState_invoke(BlockState state); } diff --git a/info.properties b/info.properties index e927acdea..991fd11a1 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.4 +mod_version=3.1.5 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 0b39f287cd982615d808ba17f9b08510724b0da0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 12 Feb 2025 14:30:19 +0900 Subject: [PATCH 438/617] fix APIs --- .../pitan76/mcpitanlib/api/client/SimpleHandledScreen.java | 3 ++- .../net/pitan76/mcpitanlib/api/client/SimpleScreen.java | 3 ++- .../api/client/gui/screen/SimpleHandledScreen.java | 3 ++- .../net/pitan76/mcpitanlib/api/util/IdentifierUtil.java | 7 +++++++ info.properties | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index a78009ed7..25522babc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -20,6 +20,7 @@ import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.IdentifierUtil; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import net.pitan76.mcpitanlib.api.util.client.RenderUtil; @@ -253,7 +254,7 @@ public void removed() { } public Identifier getBackgroundTexture() { - return getCompatBackgroundTexture().toMinecraft(); + return IdentifierUtil.from(getCompatBackgroundTexture()); } public CompatIdentifier getCompatBackgroundTexture() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java index 58f1583cb..60b6df391 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleScreen.java @@ -20,6 +20,7 @@ import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.IdentifierUtil; import net.pitan76.mcpitanlib.api.util.client.RenderUtil; public abstract class SimpleScreen extends Screen { @@ -190,7 +191,7 @@ public void removed() { } public Identifier getBackgroundTexture() { - return getCompatBackgroundTexture().toMinecraft(); + return IdentifierUtil.from(getCompatBackgroundTexture()); } public CompatIdentifier getCompatBackgroundTexture() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index d7a42db49..2fdde3507 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -20,6 +20,7 @@ import net.pitan76.mcpitanlib.api.client.render.screen.RenderBackgroundTextureArgs; import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.IdentifierUtil; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import net.pitan76.mcpitanlib.api.util.client.RenderUtil; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; @@ -262,7 +263,7 @@ public void removed() { } public Identifier getBackgroundTexture() { - return getCompatBackgroundTexture().toMinecraft(); + return IdentifierUtil.from(getCompatBackgroundTexture()); } public CompatIdentifier getCompatBackgroundTexture() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java index 8aa652151..a90951d64 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IdentifierUtil.java @@ -22,4 +22,11 @@ public static String getNamespace(Identifier identifier) { public static String getPath(Identifier identifier) { return identifier.getPath(); } + + public static Identifier from(CompatIdentifier id) { + if (id == null) + return null; + + return id.toMinecraft(); + } } diff --git a/info.properties b/info.properties index 991fd11a1..6cbc1d8fc 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.5 +mod_version=3.1.6 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 922b7fd61bc3d744b4f10f6b6b1740552d0616f2 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 21 Mar 2025 17:01:26 +0900 Subject: [PATCH 439/617] turtle_scute -> scute (-1.20.4) --- .../data/mcpitanlib/tags/items/turtle_helmet_materials.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/resources/data/mcpitanlib/tags/items/turtle_helmet_materials.json b/common/src/main/resources/data/mcpitanlib/tags/items/turtle_helmet_materials.json index d1d4c27fb..7ecb830bd 100644 --- a/common/src/main/resources/data/mcpitanlib/tags/items/turtle_helmet_materials.json +++ b/common/src/main/resources/data/mcpitanlib/tags/items/turtle_helmet_materials.json @@ -1,5 +1,5 @@ { "values": [ - "minecraft:turtle_scute" + "minecraft:scute" ] } \ No newline at end of file From 31bc008a065f70c55e4fc07f111154079624afef Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 22 Mar 2025 13:31:26 +0900 Subject: [PATCH 440/617] 1204 --- .../api/command/CommandRegistry.java | 15 ++++ .../api/entity/CompatThrownItemEntity.java | 2 +- .../pitan76/mcpitanlib/api/entity/Player.java | 8 ++ .../mcpitanlib/api/event/CommandEvent.java | 4 + .../api/event/entity/InitDataTrackerArgs.java | 18 ++++- .../event/v0/AttackEntityEventRegistry.java | 1 + .../event/v1/AttackEntityEventRegistry.java | 26 ++++++ .../api/event/v1/event/AttackEntityEvent.java | 73 +++++++++++++++++ .../mcpitanlib/api/text/TextComponent.java | 18 +++++ .../mcpitanlib/api/text/TextConverter.java | 79 +++++++++++++++++++ .../mcpitanlib/api/util/BlockEntityUtil.java | 5 ++ .../mcpitanlib/api/util/ItemStackUtil.java | 9 +++ .../pitan76/mcpitanlib/api/util/TextUtil.java | 9 +++ .../mcpitanlib/api/util/WorldUtil.java | 4 + .../api/util/entity/LivingEntityUtil.java | 14 +++- info.properties | 4 +- 16 files changed, 284 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/AttackEntityEventRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/event/AttackEntityEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java index 849654105..31946a1c0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/command/CommandRegistry.java @@ -64,6 +64,18 @@ private static > void forArgsC if (command instanceof IntegerCommand) { event = new IntegerCommandEvent(); } + if (command instanceof DoubleCommand) { + event = new DoubleCommandEvent(); + } + if (command instanceof FloatCommand) { + event = new FloatCommandEvent(); + } + if (command instanceof LongCommand) { + event = new LongCommandEvent(); + } + if (command instanceof BooleanCommand) { + event = new BooleanCommandEvent(); + } if (command instanceof StringCommand) { event = new StringCommandEvent(); } @@ -82,6 +94,9 @@ private static > void forArgsC if (command instanceof ItemCommand) { event = new ItemCommandEvent(); } + if (command instanceof BlockCommand) { + event = new BlockCommandEvent(); + } event.setContext(context); event.setCommand(command); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java index 14748d500..1870405d7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatThrownItemEntity.java @@ -92,7 +92,7 @@ protected void onCollision(HitResult hitResult) { @Deprecated @Override public void initDataTracker() { - initDataTracker(new InitDataTrackerArgs()); + initDataTracker(new InitDataTrackerArgs(dataTracker)); } public void initDataTracker(InitDataTrackerArgs args) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 49486ab01..f0f3b8ca1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -492,4 +492,12 @@ public net.pitan76.mcpitanlib.midohra.item.ItemStack getMidohraStackInHand(Hand public Hand getActiveHand() { return getEntity().getActiveHand(); } + + public float getBlockBreakingSpeed(BlockState state) { + return getEntity().getBlockBreakingSpeed(state); + } + + public boolean canHarvest(BlockState state) { + return getEntity().canHarvest(state); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java index ce84a734d..bb9c678ac 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java @@ -31,4 +31,8 @@ public void setCommand(AbstractCommand command) { public AbstractCommand getCommand() { return command; } + + public V getArgument(String name, Class clazz) { + return context.getArgument(name, clazz); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java index 96f1c1777..a6594e6e5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/InitDataTrackerArgs.java @@ -1,7 +1,23 @@ package net.pitan76.mcpitanlib.api.event.entity; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.TrackedData; + public class InitDataTrackerArgs { - public InitDataTrackerArgs() { + public DataTracker tracker; + + public InitDataTrackerArgs(DataTracker tracker) { + this.tracker = tracker; + } + + public void set(TrackedData data, T value) { + tracker.set(data, value); + } + public void addTracking(TrackedData data, T value) { + if (tracker != null) { + set(data, value); + return; + } } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java index 9611269b6..466ac1f70 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/AttackEntityEventRegistry.java @@ -10,6 +10,7 @@ import net.pitan76.mcpitanlib.api.entity.Player; import org.jetbrains.annotations.Nullable; +@Deprecated public class AttackEntityEventRegistry { public static void register(AttackEntity attackEntity) { PlayerEvent.ATTACK_ENTITY.register(attackEntity::attack); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/AttackEntityEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/AttackEntityEventRegistry.java new file mode 100644 index 000000000..894a89cd8 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/AttackEntityEventRegistry.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.event.v1; + +import dev.architectury.event.EventResult; +import dev.architectury.event.events.common.PlayerEvent; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.v1.event.AttackEntityEvent; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import org.jetbrains.annotations.Nullable; + +public class AttackEntityEventRegistry { + public static void register(AttackEntity attackEntity) { + PlayerEvent.ATTACK_ENTITY.register(attackEntity::attack); + } + + public interface AttackEntity { + default EventResult attack(PlayerEntity player, World level, Entity target, Hand hand, @Nullable EntityHitResult result) { + return attack(new AttackEntityEvent(player, level, target, hand, result)).toEventResult().getResult(); + } + + CompatActionResult attack(AttackEntityEvent event); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/event/AttackEntityEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/event/AttackEntityEvent.java new file mode 100644 index 000000000..4748c9ca4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v1/event/AttackEntityEvent.java @@ -0,0 +1,73 @@ +package net.pitan76.mcpitanlib.api.event.v1.event; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; +import org.jetbrains.annotations.Nullable; + +public class AttackEntityEvent { + + public Player player; + public World world; + public Entity target; + public Hand hand; + public EntityHitResult result; + + public AttackEntityEvent(PlayerEntity player, World level, Entity target, Hand hand, @Nullable EntityHitResult result) { + this(new Player(player), level, target, hand, result); + } + + public AttackEntityEvent(Player player, World level, Entity target, Hand hand, @Nullable EntityHitResult result) { + this.player = player; + this.world = level; + this.target = target; + this.hand = hand; + this.result = result; + } + + public Player getPlayer() { + return player; + } + + public World getWorld() { + return world; + } + + public Entity getTarget() { + return target; + } + + public EntityHitResult getResult() { + return result; + } + + public Hand getHand() { + return hand; + } + + public ItemStack getStackInPlayer() { + return player.getStackInHand(hand); + } + + public Item getItemInPlayer() { + return getStackInPlayer().getItem(); + } + + public net.pitan76.mcpitanlib.midohra.world.World getWorldAsMidohra() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public net.pitan76.mcpitanlib.midohra.item.ItemStack getStackInPlayerAsMidohra() { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getStackInPlayer()); + } + + public ItemWrapper getItemWrapperInPlayer() { + return ItemWrapper.of(getItemInPlayer()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java index c0c91314b..758c55653 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java @@ -89,4 +89,22 @@ public TextComponent setStyle(Style style) { return this; } + + /** + * Convert string to TextComponent with formatting + * @param text String + * @return TextComponent + */ + public static TextComponent convert(String text) { + return new TextComponent(TextUtil.convert(text)); + } + + /** + * Convert string to TextComponent with translatable + * @param text String + * @return TextComponent + */ + public static TextComponent convertWithTranslatable(String text) { + return new TextComponent(TextUtil.convertWithTranslatable(text)); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java new file mode 100644 index 000000000..058b4f57c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java @@ -0,0 +1,79 @@ +package net.pitan76.mcpitanlib.api.text; + +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class TextConverter { + + public static MutableText convert(String string) { + return convert(string, false); + } + + /** + * Convert string to MutableText with formatting + * + * @param text String + * @param translatable boolean + * @return MutableText + */ + public static MutableText convert(String text, boolean translatable) { + String[] splits = split(text); + MutableText result = Text.literal(""); + Formatting[] currentFormatting = {}; + + for (String part : splits) { + // Section + if (part.startsWith("§")) { + char code = part.charAt(1); + // Reset + if (code == 'r') { + currentFormatting = new Formatting[]{}; + continue; + } + + // Bold, Italic, Underline, Strikethrough, Obfuscated + if (code >= 'k' && code <= 'o') { + ArrayList list = new ArrayList<>(Arrays.asList(currentFormatting)); + list.add(Formatting.byCode(code)); + currentFormatting = list.toArray(new Formatting[0]); + continue; + } + + // Color + currentFormatting = new Formatting[]{Formatting.byCode(code)}; + continue; + } + + // Translatable + if (translatable) { + Pattern pattern = Pattern.compile("\\{(.+?)\\}"); + Matcher matcher = pattern.matcher(part); + if (matcher.find()) { + String key = matcher.group(1); + result.append(Text.translatable(key).formatted(currentFormatting)); + continue; + } + } + + result.append(Text.literal(part).formatted(currentFormatting)); + } + + return result; + } + + public static String[] split(String text) { + Matcher matcher = Pattern.compile("((?i)§[0-9a-fk-or])|([^§]+)").matcher(text); + StringBuilder sb = new StringBuilder(); + + while (matcher.find()) + sb.append(matcher.group()).append("\0"); // 区切り文字としてヌル文字を使う + + return sb.toString().split("\0"); // ヌル文字で分割 + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index 14b9f62a8..a4f99d22d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -4,6 +4,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -80,4 +81,8 @@ public static void read(BlockEntity blockEntity, NbtCompound nbt, CompatRegistry public static NbtCompound createNbt(BlockEntity blockEntity, CompatRegistryLookup registryLookup) { return blockEntity.createNbt(); } + + public static void setStackNbt(BlockEntity blockEntity, ItemStack stack, CompatRegistryLookup registryLookup) { + blockEntity.setStackNbt(stack, registryLookup.getRegistryLookup()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 154b768d7..6b1e135d7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -8,10 +8,12 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; import java.util.Objects; +import java.util.Optional; public class ItemStackUtil { public static ItemStack copy(ItemStack stack) { @@ -122,6 +124,13 @@ public static void damage(ItemStack stack, int amount, ServerPlayerEntity entity stack.damage(amount, entity, (entity2) -> entity2.sendEquipmentBreakStatus(EquipmentSlot.MAINHAND)); } + public static void damage(ItemStack stack, int amount, Player entity) { + Optional player = entity.getServerPlayer(); + if (player.isEmpty()) return; + + damage(stack, amount, player.get()); + } + public static ItemStack empty() { return ItemStack.EMPTY; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java index 6b8c2d878..357fccce9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.text.*; +import net.pitan76.mcpitanlib.api.text.TextConverter; public class TextUtil { public static MutableText literal(String string) { @@ -59,4 +60,12 @@ public static MutableText append(MutableText text, String string) { public static MutableText of(String string) { return literal(string); } + + public static MutableText convert(String text) { + return TextConverter.convert(text, false); + } + + public static MutableText convertWithTranslatable(String text) { + return TextConverter.convert(text, true); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 135341c9d..2d76dff98 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -350,4 +350,8 @@ public static boolean removeBlock(World world, net.pitan76.mcpitanlib.midohra.ut public static void playSound(net.pitan76.mcpitanlib.midohra.world.World world, @Nullable Player player, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch) { playSound(world.getRaw(), player, pos.toMinecraft(), sound, category, volume, pitch); } + + public static void dropStackOnBlock(World world, BlockPos pos, ItemStack stack) { + Block.dropStack(world, pos, stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java index 58c13cd8a..5984995a2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java @@ -23,7 +23,7 @@ public static void removeStatusEffect(LivingEntity entity, CompatStatusEffect ef entity.removeStatusEffect(effect.getStatusEffect(world)); } - public List getStatusEffects(LivingEntity entity) { + public static List getStatusEffects(LivingEntity entity) { List compatEffects = new ArrayList<>(); for (StatusEffectInstance effect : entity.getStatusEffects()) { @@ -32,4 +32,16 @@ public List getStatusEffects(LivingEntity entity) { return compatEffects; } + + public static float getHealth(LivingEntity entity) { + return entity.getHealth(); + } + + public static void setHealth(LivingEntity entity, float health) { + entity.setHealth(health); + } + + public static float getMaxHealth(LivingEntity entity) { + return entity.getMaxHealth(); + } } diff --git a/info.properties b/info.properties index 6cbc1d8fc..48f064a8b 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.6 +mod_version=3.1.7 maven_group=net.pitan76 -changelog=add APIs \ No newline at end of file +changelog=fix APIs \ No newline at end of file From 61ebfc77db4615c6eee7065f98c1e3f07e9e3163 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 22 Mar 2025 16:15:14 +0900 Subject: [PATCH 441/617] 1201 --- .../java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java | 2 +- .../java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java index 4f5935398..638be922a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java @@ -18,7 +18,7 @@ public CompatEntity(EntityType type, World world) { @Deprecated @Override public void initDataTracker() { - initDataTracker(new InitDataTrackerArgs()); + initDataTracker(new InitDataTrackerArgs(dataTracker)); } public void initDataTracker(InitDataTrackerArgs args) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index a4f99d22d..b5013aa0b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -83,6 +83,6 @@ public static NbtCompound createNbt(BlockEntity blockEntity, CompatRegistryLooku } public static void setStackNbt(BlockEntity blockEntity, ItemStack stack, CompatRegistryLookup registryLookup) { - blockEntity.setStackNbt(stack, registryLookup.getRegistryLookup()); + blockEntity.setStackNbt(stack); } } From bfa416f135e40da98801c83d21d587b7b23aa1dd Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 22 Mar 2025 16:54:20 +0900 Subject: [PATCH 442/617] 1182 --- .../net/pitan76/mcpitanlib/api/text/TextConverter.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java index 058b4f57c..2e2a6420a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java @@ -1,7 +1,8 @@ package net.pitan76.mcpitanlib.api.text; +import net.minecraft.text.LiteralText; import net.minecraft.text.MutableText; -import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; import java.util.ArrayList; @@ -24,7 +25,7 @@ public static MutableText convert(String string) { */ public static MutableText convert(String text, boolean translatable) { String[] splits = split(text); - MutableText result = Text.literal(""); + MutableText result = new LiteralText(""); Formatting[] currentFormatting = {}; for (String part : splits) { @@ -56,12 +57,12 @@ public static MutableText convert(String text, boolean translatable) { Matcher matcher = pattern.matcher(part); if (matcher.find()) { String key = matcher.group(1); - result.append(Text.translatable(key).formatted(currentFormatting)); + result.append(new TranslatableText(key).formatted(currentFormatting)); continue; } } - result.append(Text.literal(part).formatted(currentFormatting)); + result.append(new LiteralText(part).formatted(currentFormatting)); } return result; From 782dbef1ea9424ded68a2f8df30f6bbfad5f7848 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 26 Mar 2025 22:27:05 +0900 Subject: [PATCH 443/617] add APIs --- .../args/v2/GetComparatorOutputArgs.java | 53 ++++++++++++++++++ .../args/v2/HasComparatorOutputArgs.java | 16 ++++++ .../mcpitanlib/api/block/v2/CompatBlock.java | 26 +++++++-- .../mcpitanlib/api/event/CommandEvent.java | 6 +- .../api/event/ServerCommandEvent.java | 56 +++++++++++++++---- .../mcpitanlib/api/text/TextConverter.java | 43 ++++++++++---- .../api/util/screen/ScreenHandlerUtil.java | 45 +++++++++++++++ info.properties | 2 +- 8 files changed, 217 insertions(+), 30 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/GetComparatorOutputArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/HasComparatorOutputArgs.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/screen/ScreenHandlerUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/GetComparatorOutputArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/GetComparatorOutputArgs.java new file mode 100644 index 000000000..2fc46d19f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/GetComparatorOutputArgs.java @@ -0,0 +1,53 @@ +package net.pitan76.mcpitanlib.api.block.args.v2; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.api.util.screen.ScreenHandlerUtil; + +public class GetComparatorOutputArgs extends BaseEvent { + public BlockState state; + public World world; + public BlockPos pos; + + public GetComparatorOutputArgs(BlockState state, World world, BlockPos pos) { + this.state = state; + this.world = world; + this.pos = pos; + } + + public BlockState getState() { + return state; + } + + public World getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public BlockEntity getBlockEntity() { + return WorldUtil.getBlockEntity(world, pos); + } + + public int calcComparatorOutputFromBlockEntity() { + return ScreenHandlerUtil.calcComparatorOutput(getBlockEntity()); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(pos); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/HasComparatorOutputArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/HasComparatorOutputArgs.java new file mode 100644 index 000000000..2fe77f18a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/HasComparatorOutputArgs.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.block.args.v2; + +import net.minecraft.block.BlockState; +import net.pitan76.mcpitanlib.api.event.BaseEvent; + +public class HasComparatorOutputArgs extends BaseEvent { + public BlockState state; + + public HasComparatorOutputArgs(BlockState state) { + this.state = state; + } + + public BlockState getState() { + return state; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index b9aa1e366..fd5a9f635 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -9,16 +9,14 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; +import net.minecraft.world.World; import net.minecraft.world.WorldAccess; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; import net.pitan76.mcpitanlib.api.block.args.RotateArgs; import net.pitan76.mcpitanlib.api.block.args.SideInvisibleArgs; -import net.pitan76.mcpitanlib.api.block.args.v2.CollisionShapeEvent; -import net.pitan76.mcpitanlib.api.block.args.v2.OutlineShapeEvent; -import net.pitan76.mcpitanlib.api.block.args.v2.PlacementStateArgs; -import net.pitan76.mcpitanlib.api.block.args.v2.StateForNeighborUpdateArgs; +import net.pitan76.mcpitanlib.api.block.args.v2.*; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import org.jetbrains.annotations.Nullable; @@ -145,4 +143,24 @@ public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos public VoxelShape getCollisionShape(net.pitan76.mcpitanlib.api.event.block.CollisionShapeEvent e) { return super.getCollisionShape(e); } + + @Deprecated + @Override + public boolean hasComparatorOutput(BlockState state) { + return hasComparatorOutput(new HasComparatorOutputArgs(state)); + } + + public boolean hasComparatorOutput(HasComparatorOutputArgs args) { + return super.hasComparatorOutput(args.state); + } + + @Deprecated + @Override + public int getComparatorOutput(BlockState state, World world, BlockPos pos) { + return getComparatorOutput(new GetComparatorOutputArgs(state, world, pos)); + } + + public int getComparatorOutput(GetComparatorOutputArgs args) { + return super.getComparatorOutput(args.state, args.world, args.pos); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java index bb9c678ac..7b000c562 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/CommandEvent.java @@ -17,11 +17,11 @@ public void setContext(CommandContext context) { } public String getInput() { - return context.getInput(); + return getContext().getInput(); } public StringRange getRange() { - return context.getRange(); + return getContext().getRange(); } public void setCommand(AbstractCommand command) { @@ -33,6 +33,6 @@ public AbstractCommand getCommand() { } public V getArgument(String name, Class clazz) { - return context.getArgument(name, clazz); + return getContext().getArgument(name, clazz); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java index a863d767f..87f65c080 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java @@ -23,8 +23,12 @@ public void setContext(CommandContext context) { this.context = context; } + public ServerCommandSource getSource() { + return getContext().getSource(); + } + public PlayerEntity getPlayerEntity() throws CommandSyntaxException { - return context.getSource().getPlayer(); + return getSource().getPlayer(); } public Player getPlayer() throws CommandSyntaxException { @@ -32,54 +36,82 @@ public Player getPlayer() throws CommandSyntaxException { } public World getWorld() { - return context.getSource().getWorld(); + return getSource().getWorld(); } public Entity getEntity() { - return context.getSource().getEntity(); + return getSource().getEntity(); } public String getInput() { - return context.getInput(); + return getContext().getInput(); } public Command getContextCommand() { - return context.getCommand(); + return getContext().getCommand(); } public CommandContext getChild() { - return context.getChild(); + return getContext().getChild(); } public CommandContext getLastChild() { - return context.getLastChild(); + return getContext().getLastChild(); } public StringRange getRange() { - return context.getRange(); + return getContext().getRange(); } + // Text public void sendSuccess(Text message, boolean broadcastToOps) { - context.getSource().sendFeedback(message, broadcastToOps); + getSource().sendFeedback(message, broadcastToOps); } public void sendFailure(Text message) { - context.getSource().sendError(message); + getSource().sendError(message); } public void sendSuccess(Text message) { sendSuccess(message, false); } + // String (Formatted) public void sendSuccess(String message, boolean broadcastToOps) { - sendSuccess(TextUtil.literal(message), broadcastToOps); + sendSuccess(TextUtil.convert(message), broadcastToOps); } public void sendSuccess(String message) { - sendSuccess(TextUtil.literal(message)); + sendSuccess(message, false); } public void sendFailure(String message) { + sendFailure(TextUtil.convert(message)); + } + + // Translatable + public void sendSuccessWithTranslatable(String message, boolean broadcastToOps) { + sendSuccess(TextUtil.convertWithTranslatable(message), broadcastToOps); + } + + public void sendSuccessWithTranslatable(String message) { + sendSuccessWithTranslatable(message, false); + } + + public void sendFailureWithTranslatable(String message) { + sendFailure(TextUtil.convertWithTranslatable(message)); + } + + // Raw + public void sendSuccessRaw(String message, boolean broadcastToOps) { + sendSuccess(TextUtil.literal(message), broadcastToOps); + } + + public void sendSuccessRaw(String message) { + sendSuccessRaw(message, false); + } + + public void sendFailureRaw(String message) { sendFailure(TextUtil.literal(message)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java index 2e2a6420a..a26f29f4d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextConverter.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -30,7 +31,7 @@ public static MutableText convert(String text, boolean translatable) { for (String part : splits) { // Section - if (part.startsWith("§")) { + if (part.startsWith("§") && part.length() == 2) { char code = part.charAt(1); // Reset if (code == 'r') { @@ -38,16 +39,20 @@ public static MutableText convert(String text, boolean translatable) { continue; } + Formatting format = Formatting.byCode(code); + if (format == null) + continue; + // Bold, Italic, Underline, Strikethrough, Obfuscated if (code >= 'k' && code <= 'o') { ArrayList list = new ArrayList<>(Arrays.asList(currentFormatting)); - list.add(Formatting.byCode(code)); + list.add(format); currentFormatting = list.toArray(new Formatting[0]); continue; } // Color - currentFormatting = new Formatting[]{Formatting.byCode(code)}; + currentFormatting = new Formatting[]{format}; continue; } @@ -55,11 +60,29 @@ public static MutableText convert(String text, boolean translatable) { if (translatable) { Pattern pattern = Pattern.compile("\\{(.+?)\\}"); Matcher matcher = pattern.matcher(part); - if (matcher.find()) { + MutableText tempText = new LiteralText(""); + int lastIndex = 0; + + while (matcher.find()) { + // {translatable key} より前の文字列を追加 + if (matcher.start() > lastIndex) { + tempText.append(new LiteralText(part.substring(lastIndex, matcher.start())).formatted(currentFormatting)); + } + + // {translatable key} を追加 String key = matcher.group(1); - result.append(new TranslatableText(key).formatted(currentFormatting)); - continue; + tempText.append(new TranslatableText(key).formatted(currentFormatting)); + + lastIndex = matcher.end(); + } + + // 最後の文字列を追加 + if (lastIndex < part.length()) { + tempText.append(new LiteralText(part.substring(lastIndex)).formatted(currentFormatting)); } + + result.append(tempText); + continue; } result.append(new LiteralText(part).formatted(currentFormatting)); @@ -69,12 +92,12 @@ public static MutableText convert(String text, boolean translatable) { } public static String[] split(String text) { - Matcher matcher = Pattern.compile("((?i)§[0-9a-fk-or])|([^§]+)").matcher(text); - StringBuilder sb = new StringBuilder(); + Matcher matcher = Pattern.compile("(?i)§[0-9a-fk-or]|[^§]+").matcher(text); + List parts = new ArrayList<>(); while (matcher.find()) - sb.append(matcher.group()).append("\0"); // 区切り文字としてヌル文字を使う + parts.add(matcher.group()); - return sb.toString().split("\0"); // ヌル文字で分割 + return parts.toArray(new String[0]); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/screen/ScreenHandlerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/screen/ScreenHandlerUtil.java new file mode 100644 index 000000000..c563fa16c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/screen/ScreenHandlerUtil.java @@ -0,0 +1,45 @@ +package net.pitan76.mcpitanlib.api.util.screen; + +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; +import net.minecraft.util.math.MathHelper; +import org.jetbrains.annotations.Nullable; + +import java.util.Set; + +public class ScreenHandlerUtil { + public static int calcComparatorOutput(@Nullable Inventory inventory) { + return ScreenHandler.calculateComparatorOutput(inventory); + } + + public static int calcComparatorOutput(@Nullable BlockEntity blockEntity) { + return ScreenHandler.calculateComparatorOutput(blockEntity); + } + + public static int calculateStackSize(Set slots, int mode, ItemStack stack) { + int stackSize; + + switch (mode) { + case 0: + stackSize = MathHelper.floor((float)stack.getCount() / (float)slots.size()); + break; + case 1: + stackSize = 1; + break; + case 2: + stackSize = stack.getMaxCount(); + break; + default: + stackSize = stack.getCount(); + } + + return stackSize; + } + + public static boolean canInsertItemIntoSlot(@Nullable Slot slot, ItemStack stack, boolean allowOverflow) { + return ScreenHandler.canInsertItemIntoSlot(slot, stack, allowOverflow); + } +} diff --git a/info.properties b/info.properties index 48f064a8b..2b34f8927 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.7 +mod_version=3.1.8 maven_group=net.pitan76 changelog=fix APIs \ No newline at end of file From c76e744a2e4e2827ebe933064c411283a5724404 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 31 Mar 2025 23:37:50 +0900 Subject: [PATCH 444/617] fix api --- .../mcpitanlib/api/entity/CompatEntity.java | 24 ++++++++++++ .../api/event/block/PickStackEvent.java | 15 +++++++ .../api/tile/CompatBlockEntity.java | 39 +++++++++++++++++++ .../mcpitanlib/api/util/BlockEntityUtil.java | 5 +++ .../util/inventory/PlayerInventoryUtil.java | 18 +++++++++ .../api/world/CompatiblePersistentState.java | 20 ++++++++++ info.properties | 2 +- 7 files changed, 122 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java index 638be922a..ee6f26d47 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java @@ -5,6 +5,9 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.network.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.entity.InitDataTrackerArgs; import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; @@ -70,8 +73,29 @@ public void readNbt(NbtCompound nbt) { readNbt(new ReadNbtArgs(nbt)); } + @Deprecated @Override public World getWorld() { + return callGetWorld(); + } + + public World callGetWorld() { return super.getWorld(); } + + public BlockPos callGetBlockPos() { + return getBlockPos(); + } + + public Vec3d callGetPos() { + return getPos(); + } + + public boolean hasServerWorld() { + return callGetWorld() instanceof ServerWorld; + } + + public ServerWorld getServerWorld() { + return (ServerWorld) getWorld(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java index 1eb8b355c..762907be8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/PickStackEvent.java @@ -18,11 +18,18 @@ public class PickStackEvent { public BlockPos pos; public BlockState state; + public boolean includeData = true; public PickStackEvent(WorldView world, BlockPos pos, BlockState state) { + this.worldView = world; + this.pos = pos; + this.state = state; } public PickStackEvent(BlockView world, BlockPos pos, BlockState state) { + this.blockView = world; + this.pos = pos; + this.state = state; } public BlockState getState() { @@ -75,4 +82,12 @@ public boolean isClient() { return false; } } + + public void setIncludeData(boolean includeData) { + this.includeData = includeData; + } + + public boolean isIncludeData() { + return includeData; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java index dcfbd5330..a0dc1a24f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java @@ -7,12 +7,15 @@ import net.minecraft.network.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; import net.pitan76.mcpitanlib.api.packet.UpdatePacketType; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.util.BlockEntityUtil; import net.pitan76.mcpitanlib.api.util.WorldUtil; import org.jetbrains.annotations.Nullable; @@ -105,4 +108,40 @@ public boolean isClient() { return WorldUtil.isClient(getWorld()); } + @Deprecated + @Override + public @Nullable World getWorld() { + return callGetWorld(); + } + + @Deprecated + @Override + public BlockPos getPos() { + return callGetPos(); + } + + public World callGetWorld() { + return super.getWorld(); + } + + public BlockPos callGetPos() { + return super.getPos(); + } + + public BlockState callGetBlockState() { + return BlockEntityUtil.getBlockState(this); + } + + public BlockState callGetCachedState() { + return BlockEntityUtil.getCachedState(this); + } + + public boolean hasServerWorld() { + return callGetWorld() instanceof ServerWorld; + } + + public ServerWorld getServerWorld() { + return BlockEntityUtil.getServerWorld(this); + } + } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index b5013aa0b..262f5351b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -6,6 +6,7 @@ import net.minecraft.block.entity.BlockEntityType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; @@ -85,4 +86,8 @@ public static NbtCompound createNbt(BlockEntity blockEntity, CompatRegistryLooku public static void setStackNbt(BlockEntity blockEntity, ItemStack stack, CompatRegistryLookup registryLookup) { blockEntity.setStackNbt(stack); } + + public static ServerWorld getServerWorld(BlockEntity blockEntity) { + return (ServerWorld) getWorld(blockEntity); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java index d446a9d55..e4d3c32fa 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/PlayerInventoryUtil.java @@ -1,6 +1,8 @@ package net.pitan76.mcpitanlib.api.util.inventory; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; import net.pitan76.mcpitanlib.api.entity.Player; public class PlayerInventoryUtil { @@ -19,4 +21,20 @@ public static void setSelectedSlot(PlayerInventory playerInventory, int slot) { public static void dropAllItems(PlayerInventory inv) { inv.dropAll(); } + + public static DefaultedList getMain(PlayerInventory inv) { + return inv.main; + } + + public static DefaultedList getArmor(PlayerInventory inv) { + return inv.armor; + } + + public static DefaultedList getOffHand(PlayerInventory inv) { + return inv.offHand; + } + + public static ItemStack getMainHandStack(PlayerInventory inv) { + return inv.getMainHandStack(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java index 4b60ecf52..5ffcc5e7a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/world/CompatiblePersistentState.java @@ -30,4 +30,24 @@ public NbtCompound writeNbt(NbtCompound nbt) { } public abstract NbtCompound writeNbt(WriteNbtArgs args); + + @Deprecated + @Override + public void markDirty() { + callMarkDirty(); + } + + public void callMarkDirty() { + super.markDirty(); + } + + @Deprecated + @Override + public void setDirty(boolean dirty) { + callSetDirty(dirty); + } + + public void callSetDirty(boolean dirty) { + super.setDirty(dirty); + } } diff --git a/info.properties b/info.properties index 2b34f8927..b295f21d9 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.8 +mod_version=3.1.9 maven_group=net.pitan76 changelog=fix APIs \ No newline at end of file From 8627039c99fa307fcd96fcd691a925de198d7c92 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 3 Apr 2025 10:50:06 +0900 Subject: [PATCH 445/617] add APIs (port to 1215) --- .../api/event/item/CanMineArgs.java | 30 +++++++++++++++++++ .../mcpitanlib/api/util/WorldUtil.java | 30 +++++++++++++++++-- .../api/util/world/ServerWorldUtil.java | 17 +++++++++++ .../midohra/world/chunk/ChunkTicketType.java | 21 +++++++++++++ info.properties | 2 +- 5 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanMineArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanMineArgs.java index 5ab21de8b..8456d4488 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanMineArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/CanMineArgs.java @@ -1,7 +1,9 @@ package net.pitan76.mcpitanlib.api.event.item; import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; @@ -11,13 +13,33 @@ public class CanMineArgs { public BlockState state; public World world; public BlockPos pos; + + @Deprecated public Player miner; + @Deprecated + public ItemStack stack; + + public LivingEntity entity; + public CanMineArgs(BlockState state, World world, BlockPos pos, PlayerEntity miner) { this.state = state; this.world = world; this.pos = pos; this.miner = new Player(miner); + this.entity = miner; + } + + public CanMineArgs(ItemStack stack, BlockState state, World world, BlockPos pos, LivingEntity entity) { + this.stack = stack; + this.state = state; + this.world = world; + this.pos = pos; + this.entity = entity; + + if (entity instanceof PlayerEntity) { + this.miner = new Player((PlayerEntity) entity); + } } public BlockState getState() { @@ -43,4 +65,12 @@ public boolean isExistMiner() { public boolean isClient() { return WorldUtil.isClient(world); } + + public ItemStack getStack() { + return stack != null ? stack : entity.getMainHandStack(); + } + + public LivingEntity getEntity() { + return entity; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 2d76dff98..5a066d995 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -13,7 +13,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.particle.ParticleEffect; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.world.ChunkTicketType; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; @@ -29,6 +28,7 @@ import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; +import net.pitan76.mcpitanlib.midohra.world.chunk.ChunkTicketType; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -101,6 +101,10 @@ public static void playSound(World world, @Nullable Player player, BlockPos pos, playSound(world, player, pos, sound.get(), category.get(), volume, pitch); } + public static void playSound(World world, BlockPos pos, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch) { + playSound(world, null, pos, sound.get(), category.get(), volume, pitch); + } + public static void playSound(World world, double x, double y, double z, CompatSoundEvent sound, CompatSoundCategory category, float volume, float pitch, boolean useDistance) { world.playSound(x, y, z, sound.get(), category.get(), volume, pitch, useDistance); } @@ -161,14 +165,34 @@ public static boolean equals(World world, World world2) { return Objects.equals(getWorldId(world), getWorldId(world2)); } - public static void addTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius, T argument) { + @Deprecated + public static void addTicket(ServerWorld world, net.minecraft.server.world.ChunkTicketType type, ChunkPos pos, int radius, T argument) { world.getChunkManager().addTicket(type, pos, radius, argument); } - public static void removeTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius, T argument) { + @Deprecated + public static void removeTicket(ServerWorld world, net.minecraft.server.world.ChunkTicketType type, ChunkPos pos, int radius, T argument) { world.getChunkManager().removeTicket(type, pos, radius, argument); } + public static void addTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius, T argument) { + addTicket(world, type.getRaw(), pos, radius, argument); + } + + public static void removeTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius, T argument) { + removeTicket(world, type.getRaw(), pos, radius, argument); + } + + public static void addTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius) { + net.minecraft.server.world.ChunkTicketType rawType = type.getRaw(); + world.getChunkManager().addTicket( rawType, pos, radius, pos); + } + + public static void removeTicket(ServerWorld world, ChunkTicketType type, ChunkPos pos, int radius) { + net.minecraft.server.world.ChunkTicketType rawType = type.getRaw(); + world.getChunkManager().removeTicket(rawType, pos, radius, pos); + } + public static boolean isReceivingRedstonePower(World world, BlockPos pos) { return world.isReceivingRedstonePower(pos); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java new file mode 100644 index 000000000..dfc864e53 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.util.world; + +import net.minecraft.particle.ParticleEffect; +import net.minecraft.server.world.ServerWorld; +import net.pitan76.mcpitanlib.api.entity.Player; + +public class ServerWorldUtil { + public static void spawnParticles(ServerWorld world, ParticleEffect particle, double x, double y, double z, int count, double velocityX, double velocityY, double velocityZ, double speed) { + world.spawnParticles(particle, x, y, z, count, velocityX, velocityY, velocityZ, speed); + } + + public static void spawnParticles(ServerWorld world, Player player, ParticleEffect particle, boolean force, double x, double y, double z, int count, double velocityX, double velocityY, double velocityZ, double speed) { + if (player.isServer()) { + world.spawnParticles(player.getServerPlayer().get(), particle, force, false, x, y, z, count, velocityX, velocityY, velocityZ, speed); + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java index b27752769..03c543559 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java @@ -55,4 +55,25 @@ public long getExpiryTicks() { public String toString() { return getRaw().toString(); } + + public ChunkTicketType(String name, long expiryTicks) { + this(_of(name, expiryTicks)); + } + + public ChunkTicketType(String name) { + this(name, 0); + } + + public static ChunkTicketType create(String name, long expiryTicks) { + return new ChunkTicketType<>(name, expiryTicks); + } + + public static ChunkTicketType create(String name) { + return new ChunkTicketType<>(name); + } + + private static net.minecraft.server.world.ChunkTicketType _of(String name, long expiryTicks) { + net.minecraft.server.world.ChunkTicketType type = net.minecraft.server.world.ChunkTicketType.create(name, Comparator.comparingLong(ChunkPos::toLong), (int) expiryTicks); + return (net.minecraft.server.world.ChunkTicketType) type; + } } diff --git a/info.properties b/info.properties index b295f21d9..2b6bc8062 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.1.9 +mod_version=3.2.0 maven_group=net.pitan76 changelog=fix APIs \ No newline at end of file From 743c1355ca0a8bed6676c48e1e3561ab240d56a5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 3 Apr 2025 11:34:01 +0900 Subject: [PATCH 446/617] 1213 --- .../net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java index dfc864e53..f2b87d329 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java @@ -11,7 +11,7 @@ public static void spawnParticles(ServerWorld world, ParticleEffect particle, do public static void spawnParticles(ServerWorld world, Player player, ParticleEffect particle, boolean force, double x, double y, double z, int count, double velocityX, double velocityY, double velocityZ, double speed) { if (player.isServer()) { - world.spawnParticles(player.getServerPlayer().get(), particle, force, false, x, y, z, count, velocityX, velocityY, velocityZ, speed); + world.spawnParticles(player.getServerPlayer().get(), particle, force, x, y, z, count, velocityX, velocityY, velocityZ, speed); } } } From aff7b642730bf1db625b3e9505fd1457480708b2 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Apr 2025 18:23:29 +0900 Subject: [PATCH 447/617] add APIs --- .../api/event/item/InventoryTickEvent.java | 81 +++++++++ .../api/event/item/PostMineEvent.java | 47 ++++++ .../event/v0/event/RecipeManagerEvent.java | 13 ++ .../api/event/v2/ItemEventRegistry.java | 7 + .../event/v2/listener/InventoryTickTask.java | 8 + .../api/gui/SimpleScreenHandler.java | 7 +- .../api/gui/args/SlotClickEvent.java | 67 ++++++++ .../api/gui/slot/CompatSlotActionType.java | 50 ++++++ .../mcpitanlib/api/item/stack/LoreUtil.java | 73 ++++++++ .../item/tool/CompatibleMiningToolItem.java | 34 ++++ .../mcpitanlib/api/item/v2/CompatItem.java | 14 ++ .../api/item/v2/CompatItemProvider.java | 5 + .../pitan76/mcpitanlib/api/tag/TagKey.java | 9 +- .../mcpitanlib/api/util/BlockStateUtil.java | 37 +++++ .../api/util/CompatibleRecipeEntryUtil.java | 10 ++ .../mcpitanlib/api/util/EntityUtil.java | 124 ++++++++++++++ .../mcpitanlib/api/util/IngredientUtil.java | 21 +++ .../mcpitanlib/api/util/ItemStackUtil.java | 4 + .../pitan76/mcpitanlib/api/util/NbtUtil.java | 78 ++++++++- .../mcpitanlib/api/util/ServerUtil.java | 5 + .../api/util/entity/EquipmentSlotUtil.java | 50 ++++++ .../api/util/entity/ItemEntityUtil.java | 14 ++ .../api/util/entity/LivingEntityUtil.java | 10 ++ .../api/util/world/ServerWorldUtil.java | 17 ++ .../midohra/component/ItemComponentTypes.java | 156 ++++++++++++++++++ .../item/CustomNameComponentType.java | 35 ++++ .../component/item/ItemComponentType.java | 50 ++++++ .../component/item/RarityComponentType.java | 35 ++++ .../mcpitanlib/midohra/item/ItemStack.java | 31 ++++ .../mcpitanlib/midohra/nbt/NbtElement.java | 4 + .../mcpitanlib/midohra/resource/Resource.java | 74 +++++++++ .../midohra/resource/ResourceManager.java | 84 ++++++++++ .../mcpitanlib/midohra/server/MCServer.java | 5 +- .../mcpitanlib/midohra/world/WorldAccess.java | 5 + .../pitan76/mcpitanlib/mixin/ItemMixin.java | 25 +++ info.properties | 4 +- 36 files changed, 1282 insertions(+), 11 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/item/InventoryTickEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/ItemEventRegistry.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/listener/InventoryTickTask.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/SlotClickEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatSlotActionType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/stack/LoreUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/EquipmentSlotUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/component/ItemComponentTypes.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/CustomNameComponentType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/ItemComponentType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/RarityComponentType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/Resource.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/ResourceManager.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/InventoryTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/InventoryTickEvent.java new file mode 100644 index 000000000..58b0913e9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/InventoryTickEvent.java @@ -0,0 +1,81 @@ +package net.pitan76.mcpitanlib.api.event.item; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.api.util.entity.EquipmentSlotUtil; +import net.pitan76.mcpitanlib.api.util.entity.LivingEntityUtil; + +public class InventoryTickEvent extends BaseEvent { + public ItemStack stack; + public World world; + public Entity entity; + public int slot; + public boolean selected; + public EquipmentSlot equipmentSlot; + + public InventoryTickEvent(ItemStack stack, World world, Entity entity, int slot, boolean selected) { + this.stack = stack; + this.world = world; + this.entity = entity; + this.slot = slot; + this.selected = selected; + this.equipmentSlot = EquipmentSlotUtil.fromEntitySlotId(slot); + } + + public InventoryTickEvent(ItemStack stack, ServerWorld world, Entity entity, EquipmentSlot slot) { + this(stack, world, entity, EquipmentSlotUtil.getEntitySlotId(slot), isSelected(entity, slot, stack)); + this.equipmentSlot = slot; + } + + private static boolean isSelected(Entity entity, EquipmentSlot slot, ItemStack stack) { + if (entity instanceof LivingEntity) { + LivingEntity livingEntity = (LivingEntity) entity; + ItemStack equippedStack = LivingEntityUtil.getEquippedStack(livingEntity, slot); + return equippedStack.isOf(stack.getItem()) && equippedStack.getCount() == stack.getCount(); + } else { + return false; + } + } + + public ItemStack getStack() { + return stack; + } + + public World getWorld() { + return world; + } + + public boolean isServer() { + return !isClient(); + } + + public ServerWorld getServerWorld() { + return (ServerWorld) world; + } + + public Entity getEntity() { + return entity; + } + + public int getSlot() { + return slot; + } + + public boolean isSelected() { + return selected; + } + + public boolean isClient() { + return WorldUtil.isClient(world); + } + + public EquipmentSlot getEquipmentSlot() { + return equipmentSlot; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostMineEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostMineEvent.java index 153954d77..fc293b7ee 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostMineEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/PostMineEvent.java @@ -5,10 +5,13 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.util.BlockUtil; import net.pitan76.mcpitanlib.api.util.WorldUtil; @@ -74,4 +77,48 @@ public void damageStack(int amount, EquipmentSlot slot) { entity.sendEquipmentBreakStatus(slot); }); } + + /** + * Damages the stack in the given slot + * @param amount the amount of damage to deal + * @param type the type of armor equipment + */ + public void damageStack(int amount, ArmorEquipmentType type) { + stack.damage(amount, miner, (entity) -> { + entity.sendEquipmentBreakStatus(type.getSlot()); + }); + } + + /** + * Damages the stack in the main hand + * @param amount the amount of damage to deal + */ + public void damageStack(int amount) { + stack.damage(amount, miner, (entity) -> { + entity.sendEquipmentBreakStatus(EquipmentSlot.MAINHAND); + }); + } + + public boolean isPlayer() { + return miner instanceof PlayerEntity; + } + + public Player getPlayer() { + if (isPlayer()) + return new Player((PlayerEntity) miner); + + return null; + } + + public boolean isCreative() { + return isPlayer() && getPlayer().isCreative(); + } + + public boolean isSneaking() { + return miner.isSneaking(); + } + + public ItemStack getMainHandStack() { + return miner.getMainHandStack(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java index 01cb9519e..9f704f371 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v0/event/RecipeManagerEvent.java @@ -9,6 +9,7 @@ import net.minecraft.util.profiler.Profiler; import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; import net.pitan76.mcpitanlib.api.recipe.v2.CompatRecipeEntry; +import net.pitan76.mcpitanlib.api.recipe.v3.CompatRecipe; import java.util.Map; @@ -44,6 +45,10 @@ public ResourceManager getResourceManager() { return resourceManager; } + public net.pitan76.mcpitanlib.midohra.resource.ResourceManager getResourceManagerM() { + return net.pitan76.mcpitanlib.midohra.resource.ResourceManager.of(resourceManager); + } + public void putCompatibleRecipeEntry(Identifier id, CompatibleRecipeEntry entry) { map.get(entry.getType()).put(id, entry.getRecipe()); } @@ -55,4 +60,12 @@ public void putCompatibleRecipeEntry(CompatibleRecipeEntry entry) { public void putCompatibleRecipeEntry(CompatRecipeEntry entry) { map.get(entry.getType()).put(entry.getId(), entry.getRecipe()); } + + public void putRecipeEntry(net.pitan76.mcpitanlib.midohra.recipe.entry.RecipeEntry entry) { + map.get(entry.getRawRecipeType()).put(entry.getId().toMinecraft(), entry.toMinecraft()); + } + + public void putRecipe(CompatRecipe recipe) { + map.get(recipe.getType()).put(recipe.getId(), recipe.getRecipeEntry().getRecipe()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/ItemEventRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/ItemEventRegistry.java new file mode 100644 index 000000000..822804845 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/ItemEventRegistry.java @@ -0,0 +1,7 @@ +package net.pitan76.mcpitanlib.api.event.v2; + +import net.pitan76.mcpitanlib.api.event.v2.listener.InventoryTickTask; + +public class ItemEventRegistry { + public static OrderedEvent INVENTORY_TICK = new OrderedEvent<>(); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/listener/InventoryTickTask.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/listener/InventoryTickTask.java new file mode 100644 index 000000000..4f66ba34f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/v2/listener/InventoryTickTask.java @@ -0,0 +1,8 @@ +package net.pitan76.mcpitanlib.api.event.v2.listener; + +import net.pitan76.mcpitanlib.api.event.item.InventoryTickEvent; + +@FunctionalInterface +public interface InventoryTickTask { + void inventoryTick(InventoryTickEvent event); +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java index 5acbce2e1..fe1aa0c9b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/SimpleScreenHandler.java @@ -10,6 +10,7 @@ import net.minecraft.screen.slot.SlotActionType; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.gui.args.CreateMenuEvent; +import net.pitan76.mcpitanlib.api.gui.args.SlotClickEvent; import net.pitan76.mcpitanlib.api.util.ItemStackUtil; import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; import net.pitan76.mcpitanlib.api.util.SlotUtil; @@ -236,7 +237,11 @@ public void onSlotClick(int slotIndex, int button, SlotActionType actionType, Pl } public void overrideOnSlotClick(int slotIndex, int button, SlotActionType actionType, Player player) { - super.onSlotClick(slotIndex, button, actionType, player.getPlayerEntity()); + onSlotClick(new SlotClickEvent(slotIndex, button, actionType, player)); + } + + public void onSlotClick(SlotClickEvent e) { + super.onSlotClick(e.slot, e.button, e.actionType, e.player.getEntity()); } @Override diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/SlotClickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/SlotClickEvent.java new file mode 100644 index 000000000..2c63f0d20 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/args/SlotClickEvent.java @@ -0,0 +1,67 @@ +package net.pitan76.mcpitanlib.api.gui.args; + +import net.minecraft.screen.slot.SlotActionType; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.gui.slot.CompatSlotActionType; + +public class SlotClickEvent { + public int slot; + public int button; + public SlotActionType actionType; + public Player player; + + public SlotClickEvent(int slot, int button, SlotActionType actionType, Player player) { + this.slot = slot; + this.button = button; + this.actionType = actionType; + this.player = player; + } + + public int getSlot() { + return slot; + } + + public int getButton() { + return button; + } + + public SlotActionType getRawActionType() { + return actionType; + } + + public CompatSlotActionType getActionType() { + return CompatSlotActionType.of(actionType); + } + + public Player getPlayer() { + return player; + } + + public boolean isClient() { + return player.isClient(); + } + + public boolean isServer() { + return player.isServer(); + } + + public boolean isSwapAction() { + return actionType == SlotActionType.SWAP; + } + + public boolean isPickupAction() { + return actionType == SlotActionType.PICKUP; + } + + public boolean isQuickCraftAction() { + return actionType == SlotActionType.QUICK_CRAFT; + } + + public boolean isQuickMoveAction() { + return actionType == SlotActionType.QUICK_MOVE; + } + + public boolean isThrowAction() { + return actionType == SlotActionType.THROW; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatSlotActionType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatSlotActionType.java new file mode 100644 index 000000000..b95c48eec --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatSlotActionType.java @@ -0,0 +1,50 @@ +package net.pitan76.mcpitanlib.api.gui.slot; + +import net.minecraft.screen.slot.SlotActionType; + +public class CompatSlotActionType { + public static final CompatSlotActionType PICKUP = new CompatSlotActionType(SlotActionType.PICKUP); + public static final CompatSlotActionType QUICK_MOVE = new CompatSlotActionType(SlotActionType.QUICK_MOVE); + public static final CompatSlotActionType SWAP = new CompatSlotActionType(SlotActionType.SWAP); + public static final CompatSlotActionType THROW = new CompatSlotActionType(SlotActionType.THROW); + public static final CompatSlotActionType CLONE = new CompatSlotActionType(SlotActionType.CLONE); + public static final CompatSlotActionType QUICK_CRAFT = new CompatSlotActionType(SlotActionType.QUICK_CRAFT); + public static final CompatSlotActionType PICKUP_ALL = new CompatSlotActionType(SlotActionType.PICKUP_ALL); + + public final SlotActionType raw; + + protected CompatSlotActionType(SlotActionType raw) { + this.raw = raw; + } + + public static CompatSlotActionType of(SlotActionType raw) { + if (raw == SlotActionType.PICKUP) return PICKUP; + if (raw == SlotActionType.QUICK_MOVE) return QUICK_MOVE; + if (raw == SlotActionType.SWAP) return SWAP; + if (raw == SlotActionType.THROW) return THROW; + if (raw == SlotActionType.CLONE) return CLONE; + if (raw == SlotActionType.QUICK_CRAFT) return QUICK_CRAFT; + if (raw == SlotActionType.PICKUP_ALL) return PICKUP_ALL; + return new CompatSlotActionType(raw); + } + + public boolean isSwapOrPickupOrQuickMoveOrThrow() { + return raw == SlotActionType.SWAP || raw == SlotActionType.PICKUP || raw == SlotActionType.QUICK_MOVE || raw == SlotActionType.THROW; + } + + public SlotActionType getRaw() { + return raw; + } + + public int getIndex() { + return raw.ordinal(); + } + + public String getName() { + return raw.name(); + } + + public boolean isOf(CompatSlotActionType type) { + return raw == type.raw; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/stack/LoreUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/stack/LoreUtil.java new file mode 100644 index 000000000..9553ad71a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/stack/LoreUtil.java @@ -0,0 +1,73 @@ +package net.pitan76.mcpitanlib.api.item.stack; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtList; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.nbt.NbtTypeBytes; +import net.pitan76.mcpitanlib.api.util.NbtUtil; + +import java.util.List; +import java.util.regex.Pattern; + +public class LoreUtil { + public static boolean hasLore(ItemStack stack) { + return stack.getSubNbt("display") != null && stack.getSubNbt("display").contains("Lore"); + } + + public static List getLore(ItemStack stack) { + if (!hasLore(stack)) return List.of(); + return NbtUtil.getList(stack.getSubNbt("display"), "Lore", NbtTypeBytes.STRING).stream() + .map(nbt -> { + String str = NbtUtil.asString(nbt); + if (str == null) return Text.empty(); + + Pattern pattern = Pattern.compile("\"text\":\"([^\"]+)\""); + java.util.regex.Matcher matcher = pattern.matcher(str); + if (matcher.find()) { + String text = matcher.group(1); + return Text.of(text); + } + + return Text.of(str); + }).toList(); + } + + public static List getLoreAsStringList(ItemStack stack) { + return getLore(stack).stream() + .map(Text::getString) + .toList(); + } + + public static String getLoreAsString(ItemStack stack) { + return getLoreAsStringList(stack).stream() + .reduce("", (a, b) -> a + "\n" + b); + } + + public static void setLore(ItemStack stack, List lore) { + NbtList nbtList = NbtUtil.createNbtList(); + + for (Text text : lore) { + String str = text.getString(); + str = "{\"text\":\"" + str + "\"}"; + + nbtList.add(NbtUtil.createString(str)); + } + + NbtCompound displayNbt = stack.getOrCreateSubNbt("display"); + displayNbt.put("Lore", nbtList); + stack.setSubNbt("display", displayNbt); + } + + public static void setLoreStringList(ItemStack stack, List lore) { + setLore(stack, lore.stream() + .map(Text::of) + .toList()); + } + + public static void setLore(ItemStack stack, String lore) { + setLore(stack, lore.lines() + .map(Text::of) + .toList()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java index 58be76517..7c199e13a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/tool/CompatibleMiningToolItem.java @@ -3,16 +3,24 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.MiningToolItem; import net.minecraft.item.ToolMaterial; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.event.item.ItemUseOnEntityEvent; import net.pitan76.mcpitanlib.api.event.item.PostHitEvent; import net.pitan76.mcpitanlib.api.event.item.PostMineEvent; import net.pitan76.mcpitanlib.api.item.v2.CompatItemProvider; import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; import net.pitan76.mcpitanlib.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.tag.v2.CompatTagKey; +import net.pitan76.mcpitanlib.api.tag.v2.typed.BlockTagKey; +import net.pitan76.mcpitanlib.api.util.CompatActionResult; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; public class CompatibleMiningToolItem extends MiningToolItem implements CompatItemProvider { @@ -28,6 +36,16 @@ public CompatibleMiningToolItem(CompatibleToolMaterial material, int attackDamag this.settings = settings; } + public CompatibleMiningToolItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, CompatTagKey tagKey, CompatibleItemSettings settings) { + this(attackDamage, attackSpeed, material.build(), tagKey.getTagKey(), settings.build()); + this.settings = settings; + } + + public CompatibleMiningToolItem(CompatibleToolMaterial material, int attackDamage, float attackSpeed, BlockTagKey tagKey, CompatibleItemSettings settings) { + this(attackDamage, attackSpeed, material.build(), tagKey.getTagKey(), settings.build()); + this.settings = settings; + } + @Override public CompatibleItemSettings getCompatSettings() { return settings; @@ -92,4 +110,20 @@ public boolean isDamageable() { public boolean isDamageableOnDefault() { return super.isDamageable(); } + + @Deprecated + @Override + public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) { + return onRightClickOnEntity(new ItemUseOnEntityEvent(stack, user, entity, hand)).toActionResult(); + } + + @Deprecated + @Override + public CompatActionResult onRightClickOnEntity(ItemUseOnEntityEvent event, Options options) { + return CompatItemProvider.super.onRightClickOnEntity(event, options); + } + + public CompatActionResult onRightClickOnEntity(ItemUseOnEntityEvent e) { + return CompatActionResult.of(super.useOnEntity(e.stack, e.user.getEntity(), e.entity, e.hand)); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java index 15931b829..6a82aafbe 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItem.java @@ -1,5 +1,7 @@ package net.pitan76.mcpitanlib.api.item.v2; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Rarity; @@ -8,6 +10,7 @@ import net.pitan76.mcpitanlib.api.event.item.CanRepairArgs; import net.pitan76.mcpitanlib.api.event.item.EnchantabilityArgs; import net.pitan76.mcpitanlib.api.event.item.EnchantableArgs; +import net.pitan76.mcpitanlib.api.event.item.InventoryTickEvent; import net.pitan76.mcpitanlib.api.item.ExtendItem; import net.pitan76.mcpitanlib.api.item.args.RarityArgs; import net.pitan76.mcpitanlib.api.item.args.StoppedUsingArgs; @@ -17,6 +20,7 @@ import net.pitan76.mcpitanlib.api.util.CompatRarity; import net.pitan76.mcpitanlib.core.Dummy; import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; +import org.jetbrains.annotations.Nullable; public class CompatItem extends ExtendItem { @@ -94,4 +98,14 @@ public boolean onStoppedUsing(StoppedUsingArgs args) { super.onStoppedUsing(args.stack, args.world, args.user, args.remainingUseTicks); return false; } + + @Deprecated + @Override + public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { + inventoryTick(new InventoryTickEvent(stack, world, entity, slot, selected)); + } + + public void inventoryTick(InventoryTickEvent e) { + super.inventoryTick(e.stack, e.world, e.entity, e.slot, e.selected); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItemProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItemProvider.java index 9b115e77c..67cb774ea 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItemProvider.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatItemProvider.java @@ -4,6 +4,7 @@ import net.pitan76.mcpitanlib.api.event.item.CanRepairArgs; import net.pitan76.mcpitanlib.api.event.item.EnchantabilityArgs; import net.pitan76.mcpitanlib.api.event.item.EnchantableArgs; +import net.pitan76.mcpitanlib.api.event.item.InventoryTickEvent; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.pitan76.mcpitanlib.api.item.args.RarityArgs; import net.pitan76.mcpitanlib.api.item.args.UseActionArgs; @@ -40,4 +41,8 @@ default boolean canRepair(CanRepairArgs args) { RepairIngredientTag tag = getCompatSettings().repairIngredientTag; return tag != null && tag.contains(args.stack); } + + default void inventoryTick(InventoryTickEvent e, Options options) { + options.cancel = false; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java index e4a437863..25f344e50 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tag/TagKey.java @@ -7,10 +7,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; -import net.pitan76.mcpitanlib.api.util.BlockUtil; -import net.pitan76.mcpitanlib.api.util.EntityTypeUtil; -import net.pitan76.mcpitanlib.api.util.FluidUtil; -import net.pitan76.mcpitanlib.api.util.ItemUtil; +import net.pitan76.mcpitanlib.api.util.*; public class TagKey { private final net.minecraft.tag.TagKey tagKey; @@ -29,6 +26,10 @@ public static TagKey create(Type type, Identifier identifier) { }; } + public static TagKey create(Type type, CompatIdentifier id) { + return create(type, id.toMinecraft()); + } + @Deprecated public net.minecraft.tag.TagKey getTagKey() { return tagKey; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index 0909d60bf..1d978392f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -15,6 +15,7 @@ import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; +import net.minecraft.world.BlockView; import net.minecraft.world.World; import net.minecraft.world.WorldAccess; import net.pitan76.mcpitanlib.api.entity.Player; @@ -107,4 +108,40 @@ public static net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraDefaultS public static net.pitan76.mcpitanlib.midohra.block.BlockState getDefaultState(BlockWrapper block) { return block.getDefaultState(); } + + public static float getHardness(BlockState state, BlockView world, BlockPos pos) { + return state.getHardness(world, pos); + } + + public static float getHardness(BlockState state, World world, BlockPos pos) { + return state.getHardness(world, pos); + } + + public static int getLuminance(BlockState state) { + return state.getLuminance(); + } + + public static int getOpacity(BlockState state) { + return state.getOpacity(null, null); + } + + public static int getComparatorOutput(BlockState state, World world, BlockPos pos) { + return state.getComparatorOutput(world, pos); + } + + public static float getHardness(net.pitan76.mcpitanlib.midohra.block.BlockState state, net.pitan76.mcpitanlib.midohra.world.BlockView world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { + return getHardness(state.toMinecraft(), world.getRaw(), pos.toMinecraft()); + } + + public static int getLuminance(net.pitan76.mcpitanlib.midohra.block.BlockState state) { + return getLuminance(state.toMinecraft()); + } + + public static int getOpacity(net.pitan76.mcpitanlib.midohra.block.BlockState state) { + return getOpacity(state.toMinecraft()); + } + + public static int getComparatorOutput(net.pitan76.mcpitanlib.midohra.block.BlockState state, net.pitan76.mcpitanlib.midohra.world.World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { + return getComparatorOutput(state.toMinecraft(), world.getRaw(), pos.toMinecraft()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java index ab1fada7f..6201ecc60 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatibleRecipeEntryUtil.java @@ -5,6 +5,8 @@ import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.pitan76.mcpitanlib.api.recipe.CompatibleRecipeEntry; +import net.pitan76.mcpitanlib.api.recipe.v3.CompatRecipe; +import net.pitan76.mcpitanlib.midohra.recipe.entry.RecipeEntry; public class CompatibleRecipeEntryUtil { public static CompatibleRecipeEntry createShapelessRecipe(Identifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { @@ -14,4 +16,12 @@ public static CompatibleRecipeEntry createShapelessRecipe(Identifier id, String public static CompatibleRecipeEntry createShapelessRecipe(CompatIdentifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { return createShapelessRecipe(id.toMinecraft(), group, category, output, input); } + + public static RecipeEntry createShapelessRecipeM(CompatIdentifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { + return RecipeEntry.of(RecipeUtil.createShapelessRecipe(id.toMinecraft(), group, category, output, input), id); + } + + public static CompatRecipe createShapelessAsCompatRecipe(CompatIdentifier id, String group, RecipeUtil.CompatibilityCraftingRecipeCategory category, ItemStack output, DefaultedList input) { + return new CompatRecipe(RecipeUtil.createShapelessRecipe(id.toMinecraft(), group, category, output, input), id.toMinecraft()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index f22aa08e4..446d8db17 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -3,11 +3,15 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.Text; import net.minecraft.util.BlockRotation; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import java.util.UUID; + public class EntityUtil { public static World getWorld(Entity entity) { return entity.getWorld(); @@ -152,4 +156,124 @@ public static void setVehicle(Entity entity, Entity vehicle) { public static void applyRotation(Entity entity, BlockRotation rotation) { entity.applyRotation(rotation); } + + public static void setVelocity(Entity entity, Vec3d velocity) { + entity.setVelocity(velocity); + } + + public static void setFallDistance(Entity entity, double fallDistance) { + entity.fallDistance = (float) fallDistance; + } + + public static double getFallDistance(Entity entity) { + return entity.fallDistance; + } + + public static void setVelocityModified(Entity entity, boolean velocityModified) { + entity.velocityModified = velocityModified; + } + + public static boolean isVelocityModified(Entity entity) { + return entity.velocityModified; + } + + public static float getYaw(Entity entity) { + return entity.getYaw(); + } + + public static float getPitch(Entity entity) { + return entity.getPitch(); + } + + public static void setYaw(Entity entity, float yaw) { + entity.setYaw(yaw); + } + + public static void setPitch(Entity entity, float pitch) { + entity.setPitch(pitch); + } + + public static float getSpeed(Entity entity) { + return entity.speed; + } + + public static void setSpeed(Entity entity, float speed) { + entity.speed = speed; + } + + public static boolean isOnGround(Entity entity) { + return entity.isOnGround(); + } + + public static void setOnGround(Entity entity, boolean onGround) { + entity.setOnGround(onGround); + } + + public static boolean isAlive(Entity entity) { + return entity.isAlive(); + } + + public static UUID getUuid(Entity entity) { + return entity.getUuid(); + } + + public static String getUuidString(Entity entity) { + return entity.getUuidAsString(); + } + + public static void setUuid(Entity entity, UUID uuid) { + entity.setUuid(uuid); + } + + public static Text getName(Entity entity) { + return entity.getName(); + } + + public static Text getDisplayName(Entity entity) { + return entity.getDisplayName(); + } + + public static void setCustomName(Entity entity, Text customName) { + entity.setCustomName(customName); + } + + public static Text getCustomName(Entity entity) { + return entity.getCustomName(); + } + + public static void setCustomNameVisible(Entity entity, boolean visible) { + entity.setCustomNameVisible(visible); + } + + public static boolean isCustomNameVisible(Entity entity) { + return entity.isCustomNameVisible(); + } + + public static boolean hasCustomName(Entity entity) { + return entity.hasCustomName(); + } + + public static String getNameAsString(Entity entity) { + return entity.getName().getString(); + } + + public static String getDisplayNameAsString(Entity entity) { + if (entity.getDisplayName() == null) + return null; + return entity.getDisplayName().getString(); + } + + public static String getCustomNameAsString(Entity entity) { + if (entity.getCustomName() == null) + return null; + return entity.getCustomName().getString(); + } + + public static void setCustomName(Entity entity, String customName) { + entity.setCustomName(TextUtil.literal(customName)); + } + + public static Vec3d getRotationVector(Entity entity) { + return entity.getRotationVector(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java index 6b4e4275d..d52b50bce 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/IngredientUtil.java @@ -2,11 +2,13 @@ import it.unimi.dsi.fastutil.ints.IntList; import net.minecraft.item.Item; +import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.tag.TagKey; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import net.minecraft.util.collection.DefaultedList; import java.util.ArrayList; import java.util.Arrays; @@ -50,4 +52,23 @@ public static ItemStack[] getMatchingStacks(Ingredient ingredient) { public static Ingredient empty() { return Ingredient.EMPTY; } + + public static Ingredient ofItems(ItemConvertible... items) { + return Ingredient.ofItems(items); + } + + public static DefaultedList buildInput(Object[] input) { + DefaultedList list = DefaultedList.of(); + for (Object obj : input) { + if (obj instanceof Ingredient) { + list.add((Ingredient) obj); + continue; + } + + if (obj instanceof ItemConvertible) { + list.add(ofItems((ItemConvertible) obj)); + } + } + return list; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 6b1e135d7..8c5d10250 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -173,4 +173,8 @@ public static boolean isBreak(ItemStack stack) { public static ItemWrapper getItemWrapper(ItemStack stack) { return ItemWrapper.of(stack.getItem()); } + + public static int getMaxCount(ItemStack stack) { + return stack.getMaxCount(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java index 44dcb5269..e227eefc0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java @@ -2,9 +2,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtList; +import net.minecraft.nbt.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; @@ -476,4 +474,78 @@ public static NbtElement getElement(NbtCompound nbt, String key) { public static void putElement(NbtCompound nbt, String key, NbtElement element) { nbt.put(key, element); } + + public static void setBlockPosDirect(NbtCompound nbt, BlockPos pos) { + putInt(nbt, "x", pos.getX()); + putInt(nbt, "y", pos.getY()); + putInt(nbt, "z", pos.getZ()); + } + + public static BlockPos getBlockPosDirect(NbtCompound nbt) { + return PosUtil.flooredBlockPos(getInt(nbt, "x"), getInt(nbt, "y"), getInt(nbt, "z")); + } + + public static void setVec3iDirect(NbtCompound nbt, Vec3i vec3i) { + putInt(nbt, "x", vec3i.getX()); + putInt(nbt, "y", vec3i.getY()); + putInt(nbt, "z", vec3i.getZ()); + } + + public static Vec3i getVec3iDirect(NbtCompound nbt) { + return Vec3iUtil.create(getInt(nbt, "x"), getInt(nbt, "y"), getInt(nbt, "z")); + } + + public static void setVec3dDirect(NbtCompound nbt, Vec3d vec3d) { + putDouble(nbt, "x", vec3d.getX()); + putDouble(nbt, "y", vec3d.getY()); + putDouble(nbt, "z", vec3d.getZ()); + } + + public static Vec3d getVec3dDirect(NbtCompound nbt) { + return Vec3dUtil.create(getDouble(nbt, "x"), getDouble(nbt, "y"), getDouble(nbt, "z")); + } + + public static void setVec3iDirect(NbtCompound nbt, int x, int y, int z) { + putInt(nbt, "x", x); + putInt(nbt, "y", y); + putInt(nbt, "z", z); + } + + public static void setVec3dDirect(NbtCompound nbt, double x, double y, double z) { + putDouble(nbt, "x", x); + putDouble(nbt, "y", y); + putDouble(nbt, "z", z); + } + + public static String asString(NbtElement nbt) { + return nbt.asString(); + } + + public static NbtString createString(String string) { + return NbtString.of(string); + } + + public static NbtInt createInt(int value) { + return NbtInt.of(value); + } + + public static NbtFloat createFloat(float value) { + return NbtFloat.of(value); + } + + public static NbtDouble createDouble(double value) { + return NbtDouble.of(value); + } + + public static NbtLong createLong(long value) { + return NbtLong.of(value); + } + + public static NbtByte createByte(byte value) { + return NbtByte.of(value); + } + + public static NbtShort createShort(short value) { + return NbtShort.of(value); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java index f19efd9b3..84db97e6d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java @@ -3,6 +3,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.PlayerManager; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.entity.Player; public class ServerUtil { public static MinecraftServer getServer(World world) { @@ -52,4 +53,8 @@ public static boolean isSingleplayer(MinecraftServer server) { public static PlayerManager getPlayerManager(MinecraftServer server) { return server.getPlayerManager(); } + + public static MinecraftServer getServer(Player player) { + return getServer(player.getWorld()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/EquipmentSlotUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/EquipmentSlotUtil.java new file mode 100644 index 000000000..357db1335 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/EquipmentSlotUtil.java @@ -0,0 +1,50 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.EquipmentSlot; +import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; + +public class EquipmentSlotUtil { + public static boolean isArmor(EquipmentSlot slot) { + return slot == EquipmentSlot.HEAD || slot == EquipmentSlot.CHEST || slot == EquipmentSlot.LEGS || slot == EquipmentSlot.FEET; + } + + public static boolean isMainHand(EquipmentSlot slot) { + return slot == EquipmentSlot.MAINHAND; + } + + public static boolean isOffHand(EquipmentSlot slot) { + return slot == EquipmentSlot.OFFHAND; + } + + public static boolean isWeapon(EquipmentSlot slot) { + return slot == EquipmentSlot.MAINHAND || slot == EquipmentSlot.OFFHAND; + } + + public static int getEntitySlotId(EquipmentSlot slot) { + return slot.getEntitySlotId(); + } + + public static EquipmentSlot fromEntitySlotId(int id) { + for (EquipmentSlot slot : EquipmentSlot.values()) { + if (slot.getEntitySlotId() == id) { + return slot; + } + } + return null; + } + + public static ArmorEquipmentType getArmorEquipmentType(EquipmentSlot slot) { + switch (slot) { + case HEAD: + return ArmorEquipmentType.HEAD; + case CHEST: + return ArmorEquipmentType.CHEST; + case LEGS: + return ArmorEquipmentType.LEGS; + case FEET: + return ArmorEquipmentType.FEET; + default: + return null; + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java index 2454910ab..a24cc5327 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java @@ -2,6 +2,8 @@ import net.minecraft.entity.ItemEntity; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; public class ItemEntityUtil { @@ -9,6 +11,14 @@ public static ItemEntity create(World world, double x, double y, double z, ItemS return new ItemEntity(world, x, y, z, stack); } + public static ItemEntity create(World world, BlockPos pos, ItemStack stack) { + return create(world, pos.getX(), pos.getY(), pos.getZ(), stack); + } + + public static ItemEntity create(World world, Vec3d pos, ItemStack stack) { + return create(world, pos.x, pos.y, pos.z, stack); + } + public static ItemEntity create(World world, double x, double y, double z, ItemStack stack, double velocityX, double velocityY, double velocityZ) { ItemEntity itemEntity = create(world, x, y, z, stack); setVelocity(itemEntity, velocityX, velocityY, velocityZ); @@ -19,6 +29,10 @@ public static void setVelocity(ItemEntity itemEntity, double velocityX, double v itemEntity.setVelocity(velocityX, velocityY, velocityZ); } + public static void setVelocity(ItemEntity itemEntity, Vec3d vec3d) { + itemEntity.setVelocity(vec3d); + } + public static void setPickupDelay(ItemEntity itemEntity, int pickupDelay) { itemEntity.setPickupDelay(pickupDelay); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java index 5984995a2..612851693 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/LivingEntityUtil.java @@ -1,7 +1,9 @@ package net.pitan76.mcpitanlib.api.util.entity; +import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffect; import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffectInstance; @@ -44,4 +46,12 @@ public static void setHealth(LivingEntity entity, float health) { public static float getMaxHealth(LivingEntity entity) { return entity.getMaxHealth(); } + + public static ItemStack getEquippedStack(LivingEntity entity, EquipmentSlot slot) { + return entity.getEquippedStack(slot); + } + + public static void setEquippedStack(LivingEntity entity, EquipmentSlot slot, ItemStack stack) { + entity.equipStack(slot, stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java index f2b87d329..483645374 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java @@ -1,8 +1,17 @@ package net.pitan76.mcpitanlib.api.util.world; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.ItemStack; import net.minecraft.particle.ParticleEffect; import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import org.jetbrains.annotations.Nullable; + +import java.util.List; public class ServerWorldUtil { public static void spawnParticles(ServerWorld world, ParticleEffect particle, double x, double y, double z, int count, double velocityX, double velocityY, double velocityZ, double speed) { @@ -14,4 +23,12 @@ public static void spawnParticles(ServerWorld world, Player player, ParticleEffe world.spawnParticles(player.getServerPlayer().get(), particle, force, x, y, z, count, velocityX, velocityY, velocityZ, speed); } } + + public static List getDroppedStacksOnBlock(BlockState state, ServerWorld world, BlockPos pos, @Nullable BlockEntity blockEntity) { + return Block.getDroppedStacks(state, world, pos, blockEntity); + } + + public static List getDroppedStacksOnBlock(BlockState state, ServerWorld world, BlockPos pos, @Nullable BlockEntityWrapper blockEntity) { + return getDroppedStacksOnBlock(state, world, pos, blockEntity.get()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/ItemComponentTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/ItemComponentTypes.java new file mode 100644 index 000000000..6aec8b877 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/ItemComponentTypes.java @@ -0,0 +1,156 @@ +package net.pitan76.mcpitanlib.midohra.component; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.text.Text; +import net.minecraft.util.Rarity; +import net.pitan76.mcpitanlib.api.item.stack.LoreUtil; +import net.pitan76.mcpitanlib.api.util.BlockEntityDataUtil; +import net.pitan76.mcpitanlib.api.util.CustomDataUtil; +import net.pitan76.mcpitanlib.api.util.NbtUtil; +import net.pitan76.mcpitanlib.midohra.component.item.CustomNameComponentType; +import net.pitan76.mcpitanlib.midohra.component.item.ItemComponentType; +import net.pitan76.mcpitanlib.midohra.component.item.RarityComponentType; + +import java.util.List; + +public class ItemComponentTypes { + public static final ItemComponentType CUSTOM_DATA = new ItemComponentType<>("components.minecraft:custom_data") { + @Override + public void put(ItemStack stack, NbtCompound value) { + CustomDataUtil.setNbt(stack, value); + } + + @Override + public NbtCompound get(ItemStack stack) { + return CustomDataUtil.getNbt(stack); + } + + @Override + public boolean has(ItemStack stack) { + return CustomDataUtil.hasNbt(stack); + } + }; + + public static final ItemComponentType MAX_STACK_SIZE = new ItemComponentType<>("components.minecraft:max_stack_size") { + @Override + public void put(ItemStack stack, Integer value) { + + } + + @Override + public boolean has(ItemStack stack) { + return false; + } + + @Override + public Integer get(ItemStack stack) { + return stack.getMaxCount(); + } + }; + + public static final ItemComponentType MAX_DAMAGE = new ItemComponentType<>("components.minecraft:max_damage") { + @Override + public void put(ItemStack stack, Integer value) { + + } + + @Override + public boolean has(ItemStack stack) { + return false; + } + + @Override + public Integer get(ItemStack stack) { + return stack.getMaxDamage(); + } + }; + + public static final ItemComponentType DAMAGE = new ItemComponentType<>("Damage") { + @Override + public void put(ItemStack stack, Integer value) { + stack.setDamage(value); + } + + @Override + public boolean has(ItemStack stack) { + return stack.hasNbt() && NbtUtil.has(stack.getNbt(), "Damage"); + } + + @Override + public Integer get(ItemStack stack) { + return stack.getDamage(); + } + }; + + public static final ItemComponentType UNBREAKABLE = new ItemComponentType<>("Unbreakable") { + @Override + public void put(ItemStack stack, Boolean value) { + if (value) { + stack.getNbt().putBoolean("Unbreakable", true); + } else { + stack.removeSubNbt("Unbreakable"); + } + } + + @Override + public Boolean get(ItemStack stack) { + return has(stack); + } + }; + + public static final ItemComponentType RARITY = new RarityComponentType(); + + public static final CustomNameComponentType CUSTOM_NAME = new CustomNameComponentType(); + + public static final ItemComponentType BLOCK_ENTITY_DATA = new ItemComponentType<>("BlockEntityTag") { + @Override + public void put(ItemStack stack, NbtCompound value) { + BlockEntityDataUtil.setBlockEntityNbt(stack, value); + } + + @Override + public boolean has(ItemStack stack) { + return BlockEntityDataUtil.hasBlockEntityNbt(stack); + } + + @Override + public NbtCompound get(ItemStack stack) { + return BlockEntityDataUtil.getBlockEntityNbt(stack); + } + }; + + public static final ItemComponentType ENTITY_DATA = new ItemComponentType<>("EntityTag") { + @Override + public void put(ItemStack stack, NbtCompound value) { + stack.setSubNbt("EntityTag", value); + } + + @Override + public boolean has(ItemStack stack) { + return stack.hasNbt() && NbtUtil.has(stack.getNbt(), "EntityTag"); + } + + @Override + public NbtCompound get(ItemStack stack) { + return stack.getSubNbt("EntityTag"); + } + }; + + public static final ItemComponentType> LORE = new ItemComponentType<>("display.Lore") { + @Override + public void put(ItemStack stack, List value) { + LoreUtil.setLore(stack, value); + } + + @Override + public boolean has(ItemStack stack) { + return LoreUtil.hasLore(stack); + } + + @Override + public List get(ItemStack stack) { + return LoreUtil.getLore(stack); + } + }; +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/CustomNameComponentType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/CustomNameComponentType.java new file mode 100644 index 000000000..1f40ee3a3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/CustomNameComponentType.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.midohra.component.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; + +public class CustomNameComponentType extends ItemComponentType { + + public CustomNameComponentType() { + super("display.Name"); + } + + @Override + public void put(ItemStack stack, Text value) { + stack.setCustomName(value); + } + + @Override + public Text get(ItemStack stack) { + if (!has(stack)) return Text.empty(); + return stack.getName(); + } + + @Override + public boolean has(ItemStack stack) { + return stack.hasCustomName(); + } + + public String getAsString(ItemStack stack) { + return get(stack).getString(); + } + + public void put(ItemStack stack, String name) { + put(stack, Text.literal(name)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/ItemComponentType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/ItemComponentType.java new file mode 100644 index 000000000..67f3d957b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/ItemComponentType.java @@ -0,0 +1,50 @@ +package net.pitan76.mcpitanlib.midohra.component.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.util.NbtUtil; + +public abstract class ItemComponentType { + + private final String key; + + protected ItemComponentType(String key) { + this.key = key; + } + + public abstract void put(ItemStack stack, T value); + + public abstract T get(ItemStack stack); + + public boolean has(ItemStack stack) { + if (!stack.hasNbt()) return false; + + String[] keys = key.split("\\."); + NbtCompound tmp = stack.getNbt(); + for (String k : keys) { + if (!NbtUtil.has(tmp, k)) return false; + + if (keys[keys.length - 1].equals(k)) { + return true; + } + + if (tmp.get(k) instanceof NbtCompound) { + tmp = (NbtCompound) tmp.get(k); + } else { + return false; + } + } + + return false; + } + + public void putOrDefault(ItemStack stack, T value, T defaultValue) { + if (value.equals(defaultValue)) return; + put(stack, value); + } + + public T getOrDefault(ItemStack stack, T defaultValue) { + if (!has(stack)) return defaultValue; + return get(stack); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/RarityComponentType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/RarityComponentType.java new file mode 100644 index 000000000..8cc743f76 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/RarityComponentType.java @@ -0,0 +1,35 @@ +package net.pitan76.mcpitanlib.midohra.component.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.Rarity; +import net.pitan76.mcpitanlib.api.util.CompatRarity; + +public class RarityComponentType extends ItemComponentType { + + public RarityComponentType() { + super("components.minecraft:rarity"); + } + + @Override + public void put(ItemStack stack, Rarity value) { + + } + + @Override + public Rarity get(ItemStack stack) { + return stack.getRarity(); + } + + @Override + public boolean has(ItemStack stack) { + return !stack.getRarity().equals(Rarity.COMMON); + } + + public void put(ItemStack stack, CompatRarity rarity) { + + } + + public CompatRarity getCompatRarity(ItemStack stack) { + return CompatRarity.of(get(stack)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java index 578ff2a38..06252dc3b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java @@ -2,11 +2,14 @@ import net.minecraft.item.ItemConvertible; import net.minecraft.nbt.NbtCompound; +import net.minecraft.text.Text; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.enchantment.CompatEnchantment; +import net.pitan76.mcpitanlib.api.item.stack.LoreUtil; import net.pitan76.mcpitanlib.api.util.*; import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.Map; public class ItemStack { @@ -84,6 +87,34 @@ public void setEnchantments(Map enchantments, @Nulla EnchantmentUtil.setEnchantment(stack, enchantments, world); } + public int getMaxCount() { + return ItemStackUtil.getMaxCount(stack); + } + + public boolean hasLore() { + return LoreUtil.hasLore(stack); + } + + public List getLore() { + return LoreUtil.getLore(stack); + } + + public List getLoreAsStringList() { + return LoreUtil.getLoreAsStringList(stack); + } + + public void setLore(List lore) { + LoreUtil.setLore(stack, lore); + } + + public void setLoreString(List lore) { + LoreUtil.setLoreStringList(stack, lore); + } + + public void setLore(String lore) { + LoreUtil.setLore(stack, lore); + } + @Deprecated public net.minecraft.item.ItemStack toMinecraft() { return stack; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java index 963356043..7c6fa5fac 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/nbt/NbtElement.java @@ -42,4 +42,8 @@ public net.minecraft.nbt.NbtElement toMinecraft() { public NbtElement toElement() { return this; } + + public String asString() { + return nbt.asString(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/Resource.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/Resource.java new file mode 100644 index 000000000..4563371ef --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/Resource.java @@ -0,0 +1,74 @@ +package net.pitan76.mcpitanlib.midohra.resource; + +import net.pitan76.mcpitanlib.api.util.LoggerUtil; +import net.pitan76.mcpitanlib.api.util.ResourceUtil; +import org.apache.commons.io.IOUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class Resource { + private final net.minecraft.resource.Resource resource; + + protected Resource(net.minecraft.resource.Resource resource) { + this.resource = resource; + } + + public static Resource of(net.minecraft.resource.Resource resource) { + return new Resource(resource); + } + + public net.minecraft.resource.Resource getRaw() { + return resource; + } + + public net.minecraft.resource.Resource toMinecraft() { + return getRaw(); + } + + public BufferedReader getReader() throws IOException { + return resource.getReader(); + } + + public String getPackId() { + return resource.getResourcePackName(); + } + + public InputStream getInputStream() { + try { + return ResourceUtil.getInputStream(resource); + } catch (IOException e) { + LoggerUtil.error(LoggerUtil.getLogger(), "Failed to read resource: " + e.getMessage()); + return null; + } + } + + public void close() { + try { + ResourceUtil.close(resource); + } catch (IOException e) { + LoggerUtil.error(LoggerUtil.getLogger(), "Failed to close resource: " + e.getMessage()); + } + } + + public String getContent() throws IOException { + String content = IOUtils.toString(getInputStream(), StandardCharsets.UTF_8); + close(); + return content; + } + + public String getContent(String encoding) throws IOException { + String content = IOUtils.toString(getInputStream(), encoding); + close(); + return content; + } + + public String getContent(Charset encoding) throws IOException { + String content = IOUtils.toString(getInputStream(), encoding); + close(); + return content; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/ResourceManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/ResourceManager.java new file mode 100644 index 000000000..76b541509 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/ResourceManager.java @@ -0,0 +1,84 @@ +package net.pitan76.mcpitanlib.midohra.resource; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.Identifier; +import net.minecraft.world.WorldAccess; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.LoggerUtil; +import net.pitan76.mcpitanlib.api.util.ResourceUtil; +import net.pitan76.mcpitanlib.midohra.server.MCServer; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public class ResourceManager { + private final net.minecraft.resource.ResourceManager resourceManager; + + protected ResourceManager(net.minecraft.resource.ResourceManager resourceManager) { + this.resourceManager = resourceManager; + } + + public static ResourceManager of(net.minecraft.resource.ResourceManager resourceManager) { + return new ResourceManager(resourceManager); + } + + public static ResourceManager of(net.minecraft.server.MinecraftServer server) { + return of(MCServer.of(server)); + } + + public static ResourceManager of(MCServer server) { + return of(server.getRaw()); + } + + @Environment(EnvType.CLIENT) + public static ResourceManager of(MinecraftClient client) { + return of(client.getResourceManager()); + } + + public static ResourceManager of(WorldAccess worldAccess) { + return of(worldAccess.getServer()); + } + + public static ResourceManager of(net.pitan76.mcpitanlib.midohra.world.WorldAccess worldAccess) { + return of(worldAccess.getServer()); + } + + public net.minecraft.resource.ResourceManager getRaw() { + return resourceManager; + } + + public net.minecraft.resource.ResourceManager toMinecraft() { + return getRaw(); + } + + public Map findResources(String startPath, String endPath) { + Map map = new HashMap<>(); + try { + Map rawMap = ResourceUtil.findResources(resourceManager, startPath, endPath); + for (Map.Entry entry : rawMap.entrySet()) { + map.put(CompatIdentifier.fromMinecraft(entry.getKey()), Resource.of(entry.getValue())); + } + } catch (IOException e) { + LoggerUtil.error(LoggerUtil.getLogger(), "Failed to read " + startPath + ": " + e.getMessage()); + return null; + } + + return map; + } + + public Resource getResource(CompatIdentifier id) { + Optional resource = resourceManager.getResource(id.toMinecraft()); + return resource.map(Resource::of).orElse(null); + } + + public List getAllResources(CompatIdentifier id) { + return resourceManager.getAllResources(id.toMinecraft()) + .stream().map(Resource::of).toList(); + } + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java index fbc5678ed..d6f30f6b5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java @@ -4,6 +4,7 @@ import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.ServerUtil; import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.resource.ResourceManager; import net.pitan76.mcpitanlib.midohra.world.ServerWorld; public class MCServer { @@ -85,5 +86,7 @@ public ServerWorld getEnd() { return ServerWorld.of(WorldUtil.getEnd(server)); } - + public ResourceManager getResourceManager() { + return ResourceManager.of(server.getResourceManager()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java index e4f320e4a..d6db75819 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldAccess.java @@ -14,6 +14,7 @@ import net.pitan76.mcpitanlib.api.util.world.WorldAccessUtil; import net.pitan76.mcpitanlib.midohra.block.BlockState; import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.server.MCServer; import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; import java.util.Optional; @@ -121,4 +122,8 @@ public void playSound(BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCate public void playSound(BlockPos pos, CompatSoundEvent soundEvent, CompatSoundCategory category) { playSound(null, pos.toMinecraft(), soundEvent.get(), category.get()); } + + public MCServer getMCServer() { + return MCServer.of(getServer()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java index 39ea788b0..11f8ec035 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/mixin/ItemMixin.java @@ -2,6 +2,7 @@ import net.minecraft.block.BlockState; import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; @@ -15,6 +16,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.item.*; +import net.pitan76.mcpitanlib.api.event.v2.ItemEventRegistry; +import net.pitan76.mcpitanlib.api.event.v2.listener.InventoryTickTask; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider; import net.pitan76.mcpitanlib.api.item.ExtendItemProvider.Options; import net.pitan76.mcpitanlib.api.item.args.UseActionArgs; @@ -196,4 +199,26 @@ public class ItemMixin { cir.setReturnValue(returnValue.getUseAction()); } } + + @Inject(method = "inventoryTick", at = @At("HEAD"), cancellable = true) + private void mcpitanlib$inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected, CallbackInfo ci) { + // イベントを呼び出す + if (!ItemEventRegistry.INVENTORY_TICK.isEmpty()) { + int maxPriority = ItemEventRegistry.INVENTORY_TICK.getMaxPriority(); + for (int p = maxPriority; p >= 0; p--) { + for (InventoryTickTask listener : ItemEventRegistry.INVENTORY_TICK.getListenersAsList(p)) { + listener.inventoryTick(new InventoryTickEvent(stack, world, entity, slot, selected)); + } + } + } + + // CompatItemProviderを実装している場合 + if (this instanceof CompatItemProvider) { + CompatItemProvider provider = (CompatItemProvider) this; + Options options = new Options(); + provider.inventoryTick(new InventoryTickEvent(stack, world, entity, slot, selected), options); + if (options.cancel) + ci.cancel(); + } + } } diff --git a/info.properties b/info.properties index 2b6bc8062..61674125f 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.0 +mod_version=3.2.1 maven_group=net.pitan76 -changelog=fix APIs \ No newline at end of file +changelog=add APIs \ No newline at end of file From 3d070a5514b21788de230ef9fc4b013c46854265 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Apr 2025 22:22:06 +0900 Subject: [PATCH 448/617] fix APIs --- .../mcpitanlib/api/item/stack/LoreUtil.java | 3 ++- .../component/item/CustomNameComponentType.java | 5 +++-- .../mcpitanlib/midohra/resource/Resource.java | 12 ++++-------- .../midohra/resource/ResourceManager.java | 15 +++++++++++---- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/stack/LoreUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/stack/LoreUtil.java index 9553ad71a..1dde42cec 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/stack/LoreUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/stack/LoreUtil.java @@ -6,6 +6,7 @@ import net.minecraft.text.Text; import net.pitan76.mcpitanlib.api.nbt.NbtTypeBytes; import net.pitan76.mcpitanlib.api.util.NbtUtil; +import net.pitan76.mcpitanlib.api.util.TextUtil; import java.util.List; import java.util.regex.Pattern; @@ -20,7 +21,7 @@ public static List getLore(ItemStack stack) { return NbtUtil.getList(stack.getSubNbt("display"), "Lore", NbtTypeBytes.STRING).stream() .map(nbt -> { String str = NbtUtil.asString(nbt); - if (str == null) return Text.empty(); + if (str == null) return TextUtil.empty(); Pattern pattern = Pattern.compile("\"text\":\"([^\"]+)\""); java.util.regex.Matcher matcher = pattern.matcher(str); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/CustomNameComponentType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/CustomNameComponentType.java index 1f40ee3a3..720e5225c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/CustomNameComponentType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/component/item/CustomNameComponentType.java @@ -2,6 +2,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.util.TextUtil; public class CustomNameComponentType extends ItemComponentType { @@ -16,7 +17,7 @@ public void put(ItemStack stack, Text value) { @Override public Text get(ItemStack stack) { - if (!has(stack)) return Text.empty(); + if (!has(stack)) return TextUtil.empty(); return stack.getName(); } @@ -30,6 +31,6 @@ public String getAsString(ItemStack stack) { } public void put(ItemStack stack, String name) { - put(stack, Text.literal(name)); + put(stack, TextUtil.literal(name)); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/Resource.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/Resource.java index 4563371ef..04fccfe01 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/Resource.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/Resource.java @@ -7,6 +7,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -29,8 +30,8 @@ public net.minecraft.resource.Resource toMinecraft() { return getRaw(); } - public BufferedReader getReader() throws IOException { - return resource.getReader(); + public BufferedReader getReader() { + return new BufferedReader(new InputStreamReader(getInputStream(), StandardCharsets.UTF_8)); } public String getPackId() { @@ -38,12 +39,7 @@ public String getPackId() { } public InputStream getInputStream() { - try { - return ResourceUtil.getInputStream(resource); - } catch (IOException e) { - LoggerUtil.error(LoggerUtil.getLogger(), "Failed to read resource: " + e.getMessage()); - return null; - } + return ResourceUtil.getInputStream(resource); } public void close() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/ResourceManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/ResourceManager.java index 76b541509..90725dd4b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/ResourceManager.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/resource/ResourceManager.java @@ -72,13 +72,20 @@ public Map findResources(String startPath, String en } public Resource getResource(CompatIdentifier id) { - Optional resource = resourceManager.getResource(id.toMinecraft()); - return resource.map(Resource::of).orElse(null); + try { + return Resource.of(resourceManager.getResource(id.toMinecraft())); + } catch (IOException e) { + return null; + } } public List getAllResources(CompatIdentifier id) { - return resourceManager.getAllResources(id.toMinecraft()) - .stream().map(Resource::of).toList(); + try { + return resourceManager.getAllResources(id.toMinecraft()) + .stream().map(Resource::of).toList(); + } catch (IOException e) { + return null; + } } } From 6bf3770ba926edb80ea90ac811e75a60d785fdbc Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 7 Apr 2025 21:01:37 +0900 Subject: [PATCH 449/617] add APIs --- .../mcpitanlib/api/block/CompatBlocks.java | 6 + .../api/client/SimpleHandledScreen.java | 36 +++++ .../gui/widget/CompatTextFieldWidget.java | 143 ++++++++++++++++++ .../api/gui/slot/CompatibleSlot.java | 10 ++ .../mcpitanlib/api/item/CompatItems.java | 51 +++++++ .../mcpitanlib/api/util/BlockUtil.java | 10 ++ .../mcpitanlib/api/util/ItemStackUtil.java | 4 + .../mcpitanlib/api/util/WorldUtil.java | 4 + .../api/util/client/widget/TextFieldUtil.java | 51 +++++++ .../api/util/entity/EquipmentSlotUtil.java | 5 +- .../mcpitanlib/api/util/math/PosUtil.java | 68 ++++++++- .../mcpitanlib/api/util/v2/BlockUtilV2.java | 10 ++ .../api/util/world/ServerWorldUtil.java | 5 + .../mcpitanlib/midohra/item/ItemStack.java | 12 ++ info.properties | 2 +- 15 files changed, 412 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlocks.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlocks.java index 293cb29c4..e855ccf32 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlocks.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatBlocks.java @@ -87,4 +87,10 @@ public class CompatBlocks { public static final Block WATER = Blocks.WATER; public static final Block LAVA = Blocks.LAVA; public static final Block BEDROCK = Blocks.BEDROCK; + + // ---- + + public static boolean isExist(Block block) { + return block != null && block != Blocks.AIR; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java index 25522babc..df9ffd26c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/SimpleHandledScreen.java @@ -23,6 +23,7 @@ import net.pitan76.mcpitanlib.api.util.IdentifierUtil; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import net.pitan76.mcpitanlib.api.util.client.RenderUtil; +import net.pitan76.mcpitanlib.core.datafixer.Pair; @Deprecated public abstract class SimpleHandledScreen extends HandledScreen { @@ -288,4 +289,39 @@ public int getTitleX() { public int getTitleY() { return titleY; } + + @Deprecated + @Override + public Text getTitle() { + return callGetTitle(); + } + + public Text callGetTitle() { + return super.getTitle(); + } + + public Pair getTitlePosP() { + return new Pair<>(getTitleX(), getTitleY()); + } + + public int getPlayerInvTitleX() { + return playerInventoryTitleX; + } + + public int getPlayerInvTitleY() { + return playerInventoryTitleY; + } + + public void setPlayerInvTitleX(int x) { + playerInventoryTitleX = x; + } + + public void setPlayerInvTitleY(int y) { + playerInventoryTitleY = y; + } + + public void setPlayerInvTitle(int x, int y) { + setPlayerInvTitleX(x); + setPlayerInvTitleY(y); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java new file mode 100644 index 000000000..a29256a75 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java @@ -0,0 +1,143 @@ +package net.pitan76.mcpitanlib.api.client.gui.widget; + +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.util.TextUtil; +import org.jetbrains.annotations.Nullable; + +public class CompatTextFieldWidget extends TextFieldWidget { + public CompatTextFieldWidget(TextRenderer textRenderer, int width, int height) { + this(textRenderer, width, height, TextUtil.empty()); + } + + public CompatTextFieldWidget(TextRenderer textRenderer, int x, int y, int width, int height) { + this(textRenderer, x, y, width, height, TextUtil.empty()); + } + + // ---- + + public CompatTextFieldWidget(TextRenderer textRenderer, int width, int height, Text text) { + super(textRenderer, width, height, text); + } + + public CompatTextFieldWidget(TextRenderer textRenderer, int x, int y, int width, int height, Text text) { + super(textRenderer, x, y, width, height, text); + } + + public CompatTextFieldWidget(TextRenderer textRenderer, int x, int y, int width, int height, @Nullable TextFieldWidget copyFrom, Text text) { + super(textRenderer, x, y, width, height, copyFrom, text); + } + + // ---- + + @Deprecated + @Override + public void setDrawsBackground(boolean drawsBackground) { + callSetDrawsBackground(drawsBackground); + } + + public void callSetDrawsBackground(boolean drawsBackground) { + super.setDrawsBackground(drawsBackground); + } + + @Deprecated + @Override + public void setFocused(boolean focused) { + callSetFocused(focused); + } + + public void callSetFocused(boolean focused) { + super.setFocused(focused); + } + + @Deprecated + @Override + public void setFocusUnlocked(boolean focusUnlocked) { + callSetFocusUnlocked(focusUnlocked); + } + + public void callSetFocusUnlocked(boolean focusUnlocked) { + super.setFocusUnlocked(focusUnlocked); + } + + @Deprecated + @Override + public void setMaxLength(int maxLength) { + callSetMaxLength(maxLength); + } + + public void callSetMaxLength(int maxLength) { + super.setMaxLength(maxLength); + } + + @Deprecated + @Override + public void setText(String text) { + callSetText(text); + } + + public void callSetText(String text) { + super.setText(text); + } + + @Deprecated + @Override + public String getText() { + return callGetText(); + } + + public String callGetText() { + return super.getText(); + } + + @Deprecated + @Override + public void setEditable(boolean editable) { + callSetEditable(editable); + } + + public void callSetEditable(boolean editable) { + super.setEditable(editable); + } + + @Deprecated + @Override + public boolean isFocused() { + return callIsFocused(); + } + + public boolean callIsFocused() { + return super.isFocused(); + } + + @Deprecated + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + return callKeyPressed(keyCode, scanCode, modifiers); + } + + public boolean callKeyPressed(int keyCode, int scanCode, int modifiers) { + return super.keyPressed(keyCode, scanCode, modifiers); + } + + @Deprecated + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + return callKeyReleased(keyCode, scanCode, modifiers); + } + + public boolean callKeyReleased(int keyCode, int scanCode, int modifiers) { + return super.keyReleased(keyCode, scanCode, modifiers); + } + + @Deprecated + @Override + public boolean charTyped(char chr, int modifiers) { + return callCharTyped(chr, modifiers); + } + + public boolean callCharTyped(char chr, int modifiers) { + return super.charTyped(chr, modifiers); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java index b72e0d2cc..f96b298d6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java @@ -96,4 +96,14 @@ public boolean canInsert(net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { public boolean canTakeItems(Player player) { return super.canTakeItems(player.getEntity()); } + + @Deprecated + @Override + public boolean canTakePartial(PlayerEntity player) { + return canTakePartial(new Player(player)); + } + + public boolean canTakePartial(Player player) { + return super.canTakePartial(player.getEntity()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java index 9903512e4..5e612fdec 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/CompatItems.java @@ -12,6 +12,57 @@ public class CompatItems { public static Item GRASS = SHORT_GRASS; public static Item SCUTE = TURTLE_SCUTE; + // ---- + + public static Item AIR = Items.AIR; + public static Item STONE = Items.STONE; + public static Item COBBLESTONE = Items.COBBLESTONE; + public static Item GRASS_BLOCK = Items.GRASS_BLOCK; + public static Item DIRT = Items.DIRT; + public static Item SAND = Items.SAND; + public static Item RED_SAND = Items.RED_SAND; + public static Item GRANITE = Items.GRANITE; + public static Item POLISHED_GRANITE = Items.POLISHED_GRANITE; + public static Item DIORITE = Items.DIORITE; + public static Item POLISHED_DIORITE = Items.POLISHED_DIORITE; + public static Item ANDESITE = Items.ANDESITE; + public static Item POLISHED_ANDESITE = Items.POLISHED_ANDESITE; + public static Item COARSE_DIRT = Items.COARSE_DIRT; + public static Item PODZOL = Items.PODZOL; + public static Item OAK_LOG = Items.OAK_LOG; + public static Item SPRUCE_LOG = Items.SPRUCE_LOG; + public static Item BIRCH_LOG = Items.BIRCH_LOG; + public static Item JUNGLE_LOG = Items.JUNGLE_LOG; + public static Item ACACIA_LOG = Items.ACACIA_LOG; + public static Item DARK_OAK_LOG = Items.DARK_OAK_LOG; + public static Item OAK_PLANKS = Items.OAK_PLANKS; + public static Item SPRUCE_PLANKS = Items.SPRUCE_PLANKS; + public static Item BIRCH_PLANKS = Items.BIRCH_PLANKS; + public static Item JUNGLE_PLANKS = Items.JUNGLE_PLANKS; + public static Item ACACIA_PLANKS = Items.ACACIA_PLANKS; + public static Item DARK_OAK_PLANKS = Items.DARK_OAK_PLANKS; + public static Item GLASS = Items.GLASS; + + public static Item STICK = Items.STICK; + public static Item GLASS_BOTTLE = Items.GLASS_BOTTLE; + public static Item EXP_BOTTLE = Items.EXPERIENCE_BOTTLE; + + public static Item GUNPOWDER = Items.GUNPOWDER; + public static Item REDSTONE = Items.REDSTONE; + public static Item COAL = Items.COAL; + public static Item CHARCOAL = Items.CHARCOAL; + public static Item IRON_INGOT = Items.IRON_INGOT; + public static Item COPPER_INGOT = Items.COPPER_INGOT; + public static Item GOLD_INGOT = Items.GOLD_INGOT; + public static Item DIAMOND = Items.DIAMOND; + public static Item EMERALD = Items.EMERALD; + public static Item LAPIS_LAZULI = Items.LAPIS_LAZULI; + public static Item NETHERITE_INGOT = Items.NETHERITE_INGOT; + public static Item NETHERITE_SCRAP = Items.NETHERITE_SCRAP; + public static Item QUARTZ = Items.QUARTZ; + + // ---- + public static boolean isExist(Item item) { return item != null && item != Items.AIR; } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java index 6bb1e0bbc..0a5532540 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockUtil.java @@ -2,6 +2,8 @@ import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.tag.MineableToolTags; @@ -245,4 +247,12 @@ public static boolean isBlockInTag(Block block, Identifier identifier) { public static boolean isBlockInTag(Block block, String id) { return BlockUtilV2.isBlockInTag(block, id); } + + public static Block fromItem(Item item) { + return BlockUtilV2.fromItem(item); + } + + public static Block fromItem(ItemStack stack) { + return BlockUtilV2.fromItem(stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 8c5d10250..086d06099 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -177,4 +177,8 @@ public static ItemWrapper getItemWrapper(ItemStack stack) { public static int getMaxCount(ItemStack stack) { return stack.getMaxCount(); } + + public static Item getItem(ItemStack stack) { + return stack.getItem(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 5a066d995..c70328f6e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -378,4 +378,8 @@ public static void playSound(net.pitan76.mcpitanlib.midohra.world.World world, @ public static void dropStackOnBlock(World world, BlockPos pos, ItemStack stack) { Block.dropStack(world, pos, stack); } + + public static float getSkyAngle(World world, float tickDelta) { + return world.getSkyAngle(tickDelta); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java index 5f4cada98..2633786eb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java @@ -1,7 +1,10 @@ package net.pitan76.mcpitanlib.api.util.client.widget; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.text.Text; import net.pitan76.mcpitanlib.api.client.render.handledscreen.RenderArgs; +import net.pitan76.mcpitanlib.api.util.TextUtil; public class TextFieldUtil { public static void setFocused(TextFieldWidget widget, boolean focused) { @@ -23,4 +26,52 @@ public static void setMaxLength(TextFieldWidget widget, int maxLength) { public static void setSuggestion(TextFieldWidget widget, String suggestion) { widget.setSuggestion(suggestion); } + + public static void setText(TextFieldWidget widget, String text) { + widget.setText(text); + } + + public static String getText(TextFieldWidget widget) { + return widget.getText(); + } + + public static void setDrawsBackground(TextFieldWidget widget, boolean drawsBackground) { + widget.setDrawsBackground(drawsBackground); + } + + public static void setFocusUnlocked(TextFieldWidget widget, boolean focusUnlocked) { + widget.setFocusUnlocked(focusUnlocked); + } + + public static boolean isFocused(TextFieldWidget widget) { + return widget.isFocused(); + } + + public static boolean keyPressed(TextFieldWidget widget, int keyCode, int scanCode, int modifiers) { + return widget.keyPressed(keyCode, scanCode, modifiers); + } + + public static boolean keyReleased(TextFieldWidget widget, int keyCode, int scanCode, int modifiers) { + return widget.keyReleased(keyCode, scanCode, modifiers); + } + + public static boolean charTyped(TextFieldWidget widget, char chr, int modifiers) { + return widget.charTyped(chr, modifiers); + } + + public static TextFieldWidget create(TextRenderer renderer, int x, int y, int width, int height, Text text) { + return new TextFieldWidget(renderer, x, y, width, height, text); + } + + public static TextFieldWidget create(TextRenderer renderer, int x, int y, Text text) { + return new TextFieldWidget(renderer, x, y, text); + } + + public static TextFieldWidget create(TextRenderer renderer, int x, int y, int width, int height) { + return new TextFieldWidget(renderer, x, y, width, height, TextUtil.empty()); + } + + public static TextFieldWidget create(TextRenderer renderer, int x, int y) { + return new TextFieldWidget(renderer, x, y, TextUtil.empty()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/EquipmentSlotUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/EquipmentSlotUtil.java index 357db1335..d7752bc21 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/EquipmentSlotUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/EquipmentSlotUtil.java @@ -21,6 +21,9 @@ public static boolean isWeapon(EquipmentSlot slot) { } public static int getEntitySlotId(EquipmentSlot slot) { + if (slot == null) + return 0; + return slot.getEntitySlotId(); } @@ -30,7 +33,7 @@ public static EquipmentSlot fromEntitySlotId(int id) { return slot; } } - return null; + return EquipmentSlot.MAINHAND; } public static ArmorEquipmentType getArmorEquipmentType(EquipmentSlot slot) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java index 5967a3204..0bda52c86 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java @@ -1,8 +1,6 @@ package net.pitan76.mcpitanlib.api.util.math; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Position; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.*; public class PosUtil { public static BlockPos flooredBlockPos(double x, double y, double z) { @@ -43,4 +41,68 @@ public static Iterable iterate(BlockPos start, BlockPos end) { public static BlockPos[] getNeighborPoses(BlockPos pos) { return new BlockPos[]{pos.north(), pos.south(), pos.east(), pos.west(), pos.up(), pos.down()}; } + + public static BlockPos up(BlockPos pos) { + return pos.up(); + } + + public static BlockPos down(BlockPos pos) { + return pos.down(); + } + + public static BlockPos north(BlockPos pos) { + return pos.north(); + } + + public static BlockPos south(BlockPos pos) { + return pos.south(); + } + + public static BlockPos east(BlockPos pos) { + return pos.east(); + } + + public static BlockPos west(BlockPos pos) { + return pos.west(); + } + + public static BlockPos add(BlockPos pos, int x, int y, int z) { + return pos.add(x, y, z); + } + + public static BlockPos sub(BlockPos pos, int x, int y, int z) { + return pos.subtract(new Vec3i(x, y, z)); + } + + public static BlockPos mul(BlockPos pos, int n) { + return pos.multiply(n); + } + + public static int x(BlockPos pos) { + return pos.getX(); + } + + public static int y(BlockPos pos) { + return pos.getY(); + } + + public static int z(BlockPos pos) { + return pos.getZ(); + } + + public static BlockPos offset(BlockPos pos, Direction direction) { + return pos.offset(direction); + } + + public static BlockPos offset(BlockPos pos, Direction direction, int n) { + return pos.offset(direction, n); + } + + public static BlockPos offset(BlockPos pos, net.pitan76.mcpitanlib.midohra.util.math.Direction direction) { + return pos.offset(direction.toMinecraft()); + } + + public static BlockPos offset(BlockPos pos, net.pitan76.mcpitanlib.midohra.util.math.Direction direction, int n) { + return pos.offset(direction.toMinecraft(), n); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java index 2b3c9fa6a..c7a5137f0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/v2/BlockUtilV2.java @@ -1,6 +1,8 @@ package net.pitan76.mcpitanlib.api.util.v2; import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.util.BlockUtil; @@ -111,4 +113,12 @@ public static boolean isBlockInTag(Block block, Identifier identifier) { public static boolean isBlockInTag(Block block, String id) { return isBlockInTag(block, new Identifier(id)); } + + public static Block fromItem(Item item) { + return Block.getBlockFromItem(item); + } + + public static Block fromItem(ItemStack stack) { + return fromItem(stack.getItem()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java index 483645374..2b1202093 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java @@ -3,6 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.particle.ParticleEffect; import net.minecraft.server.world.ServerWorld; @@ -31,4 +32,8 @@ public static List getDroppedStacksOnBlock(BlockState state, ServerWo public static List getDroppedStacksOnBlock(BlockState state, ServerWorld world, BlockPos pos, @Nullable BlockEntityWrapper blockEntity) { return getDroppedStacksOnBlock(state, world, pos, blockEntity.get()); } + + public static List getDroppedStacksOnBlock(BlockState state, ServerWorld world, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity entity, ItemStack stack) { + return Block.getDroppedStacks(state, world, pos, blockEntity, entity, stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java index 06252dc3b..5161cf970 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemStack.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.midohra.item; +import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; import net.minecraft.nbt.NbtCompound; import net.minecraft.text.Text; @@ -120,6 +121,17 @@ public net.minecraft.item.ItemStack toMinecraft() { return stack; } + public ItemWrapper getItem() { + if (isEmpty()) + return ItemWrapper.of(); + + return ItemWrapper.of(getRawItem()); + } + + public Item getRawItem() { + return ItemStackUtil.getItem(stack); + } + public static class Builder { protected CompatIdentifier id; diff --git a/info.properties b/info.properties index 61674125f..420b12083 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.1 +mod_version=3.2.2 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From f3c1fd8a35a5a0a61c6499052bc11c3a17f2088d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Tue, 8 Apr 2025 13:51:12 +0900 Subject: [PATCH 450/617] 1201 --- .../mcpitanlib/api/util/client/widget/TextFieldUtil.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java index 2633786eb..814043817 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/widget/TextFieldUtil.java @@ -63,15 +63,15 @@ public static TextFieldWidget create(TextRenderer renderer, int x, int y, int wi return new TextFieldWidget(renderer, x, y, width, height, text); } - public static TextFieldWidget create(TextRenderer renderer, int x, int y, Text text) { - return new TextFieldWidget(renderer, x, y, text); + public static TextFieldWidget create(TextRenderer renderer, int width, int height, Text text) { + return create(renderer, 0, 0, width, height, text); } public static TextFieldWidget create(TextRenderer renderer, int x, int y, int width, int height) { return new TextFieldWidget(renderer, x, y, width, height, TextUtil.empty()); } - public static TextFieldWidget create(TextRenderer renderer, int x, int y) { - return new TextFieldWidget(renderer, x, y, TextUtil.empty()); + public static TextFieldWidget create(TextRenderer renderer, int width, int height) { + return create(renderer, width, height, TextUtil.empty()); } } From bf0aa55495fe862c1ad0c8e5392addeb3adf7795 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 26 Sep 2022 22:20:03 +0900 Subject: [PATCH 451/617] 1192 --- .../mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java index a29256a75..477a6586f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/widget/CompatTextFieldWidget.java @@ -18,7 +18,7 @@ public CompatTextFieldWidget(TextRenderer textRenderer, int x, int y, int width, // ---- public CompatTextFieldWidget(TextRenderer textRenderer, int width, int height, Text text) { - super(textRenderer, width, height, text); + super(textRenderer, 0, 0, width, height, text); } public CompatTextFieldWidget(TextRenderer textRenderer, int x, int y, int width, int height, Text text) { From 7aa040002d2e2f1d113954d3ded0373f1644b2cd Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 9 Apr 2025 11:19:59 +0900 Subject: [PATCH 452/617] add APIs --- .../gui/screen/SimpleHandledScreen.java | 53 +++++++++++++++++++ info.properties | 2 +- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index 2fdde3507..602cbba63 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -24,6 +24,7 @@ import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import net.pitan76.mcpitanlib.api.util.client.RenderUtil; import net.pitan76.mcpitanlib.api.util.client.ScreenUtil; +import net.pitan76.mcpitanlib.core.datafixer.Pair; public abstract class SimpleHandledScreen extends HandledScreen { @@ -313,4 +314,56 @@ public void drawText(DrawObjectDM drawObjectDM, Text text, int x, int y) { public void drawText(DrawObjectDM drawObjectDM, TextComponent text, int x, int y) { ScreenUtil.RendererUtil.drawText(textRenderer, drawObjectDM, text, x, y); } + + @Deprecated + @Override + public Text getTitle() { + return callGetTitle(); + } + + public Text callGetTitle() { + return super.getTitle(); + } + + public Pair getTitlePosP() { + return new Pair<>(getTitleX(), getTitleY()); + } + + public int getPlayerInvTitleX() { + return playerInventoryTitleX; + } + + public int getPlayerInvTitleY() { + return playerInventoryTitleY; + } + + public void setPlayerInvTitleX(int x) { + playerInventoryTitleX = x; + } + + public void setPlayerInvTitleY(int y) { + playerInventoryTitleY = y; + } + + public void setPlayerInvTitle(int x, int y) { + setPlayerInvTitleX(x); + setPlayerInvTitleY(y); + } + + public TextRenderer callGetTextRenderer() { + if (textRenderer != null) + return textRenderer; + + if (super.getTextRenderer() != null) + return super.getTextRenderer(); + + return ClientUtil.getTextRenderer(); + } + + public ItemRenderer callGetItemRenderer() { + if (itemRenderer != null) + return itemRenderer; + + return ClientUtil.getItemRenderer(); + } } diff --git a/info.properties b/info.properties index 420b12083..aa277f59d 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.2 +mod_version=3.2.3 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 0c92d5849b3f9ff3d9526e6fda6557cf935d8e10 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 9 Apr 2025 12:23:14 +0900 Subject: [PATCH 453/617] 1211 --- .../mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index 602cbba63..c797e44a6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -354,8 +354,8 @@ public TextRenderer callGetTextRenderer() { if (textRenderer != null) return textRenderer; - if (super.getTextRenderer() != null) - return super.getTextRenderer(); + if (super.textRenderer != null) + return super.textRenderer; return ClientUtil.getTextRenderer(); } From 7cecdfae650ba79f50deba16cd21a08b3fe6d729 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Apr 2025 12:00:52 +0900 Subject: [PATCH 454/617] [cp] fix cp --- .github/workflows/auto-cherry-pick.yml | 44 ++++++++++++++++++++++ .github/workflows/cherry-pick.sh | 52 ++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 .github/workflows/auto-cherry-pick.yml create mode 100644 .github/workflows/cherry-pick.sh diff --git a/.github/workflows/auto-cherry-pick.yml b/.github/workflows/auto-cherry-pick.yml new file mode 100644 index 000000000..894017d61 --- /dev/null +++ b/.github/workflows/auto-cherry-pick.yml @@ -0,0 +1,44 @@ +name: Auto Cherry-Pick +on: + push: + branches: + - "1.*" # 1.21.5, 1.21.4...のブランチでpushされたとき + pull_request: + types: + - closed # PRがmergeされたとき +jobs: + cherry-pick: + if: | + (github.event_name == 'push' || + (github.event_name == 'pull_request' && github.event.pull_request.merged == true)) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Check + id: check + run: | + COMMIT_MSG=$(git log -1 --pretty=%B) + if echo "$COMMIT_MSG" | grep -q '^\[cp\]'; then + echo "pickable=true" >> $GITHUB_ENV + fi + - name: Setup Git + if: env.pickable == 'true' + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + - name: Chmod cherry-pick.sh + if: env.pickable == 'true' + run: | + if [ ! -f .github/workflows/cherry-pick.sh ]; then + echo "cherry-pick.sh not found" + exit 1 + fi + git update-index --assume-unchanged .github/workflows/cherry-pick.sh + chmod +x .github/workflows/cherry-pick.sh + - name: Run cherry-pick.sh + if: env.pickable == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: .github/workflows/cherry-pick.sh \ No newline at end of file diff --git a/.github/workflows/cherry-pick.sh b/.github/workflows/cherry-pick.sh new file mode 100644 index 000000000..064ae6243 --- /dev/null +++ b/.github/workflows/cherry-pick.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -e + +git fetch --all +CURRENT_BRANCH="${GITHUB_REF##*/}" +SHA=$(git log -1 --pretty=format:"%H") +MSG=$(git log -1 --pretty=%B) + +echo "Current: $CURRENT_BRANCH" +echo "SHA: $SHA" + +BRANCHES=$(git for-each-ref --format='%(refname:short)' refs/remotes/origin | grep -E '^origin/1\.' | sed 's|origin/||' | sort -Vr) + +TARGETS=() +FOUND=0 +while read -r b; do + if [ "$FOUND" = "1" ]; then + TARGETS+=("$b") + fi + if [ "$b" = "$CURRENT_BRANCH" ]; then + FOUND=1 + fi +done <<< "$BRANCHES" + +for TARGET_BRANCH in "${TARGETS[@]}"; do + if [ -z "$TARGET_BRANCH" ]; then + continue + fi + + echo "Trying to cherry-pick to $TARGET_BRANCH..." + + git reset --hard + git switch -c "$TARGET_BRANCH" "origin/$TARGET_BRANCH" + + echo "Cherry-picking $SHA from $CURRENT_BRANCH to $TARGET_BRANCH..." + if git cherry-pick "$SHA"; then + git push origin "$TARGET_BRANCH" + echo "Cherry-pick successful. Pushed to $TARGET_BRANCH." + continue + fi + + echo "Cherry-pick failed. Attempting to resolve conflicts..." + + git cherry-pick --abort + gh auth setup-git + gh pr create \ + --base "$TARGET_BRANCH" \ + --head "$CURRENT_BRANCH" \ + --title "Manual Cherry-pick needed: $SHA" \ + --body "Cherry-pick of $SHA from $CURRENT_BRANCH to $TARGET_BRANCH failed due to conflicts." + exit 0 +done \ No newline at end of file From 1d3332da46aeab939dd16c9e48f63dc4837b4e0d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 12 Apr 2025 20:47:05 +0900 Subject: [PATCH 455/617] [cp] add APIs --- .../gui/screen/SimpleHandledScreen.java | 4 + .../api/gui/slot/CompatibleSlot.java | 10 ++ .../mcpitanlib/api/util/EntityTypeUtil.java | 9 ++ .../pitan76/mcpitanlib/api/util/SlotUtil.java | 5 + .../mcpitanlib/api/util/WorldUtil.java | 23 +++++ .../mcpitanlib/api/util/block/BlockUtil.java | 10 ++ .../api/util/entity/ItemEntityUtil.java | 13 +++ .../api/util/entity/ThrownItemEntityUtil.java | 4 + .../mcpitanlib/api/util/math/BoxUtil.java | 4 + .../mcpitanlib/api/util/nbt/NbtListUtil.java | 91 +++++++++++++++++++ .../midohra/entity/EntityTypeWrapper.java | 56 ++++++++++++ .../midohra/entity/EntityTypes.java | 75 +++++++++++++++ info.properties | 2 +- 13 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtListUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypeWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java index c797e44a6..fda254330 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/gui/screen/SimpleHandledScreen.java @@ -366,4 +366,8 @@ public ItemRenderer callGetItemRenderer() { return ClientUtil.getItemRenderer(); } + + public Text getPlayerInvTitle() { + return playerInventoryTitle; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java index f96b298d6..555abf14a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/gui/slot/CompatibleSlot.java @@ -7,8 +7,18 @@ import net.pitan76.mcpitanlib.api.entity.Player; public class CompatibleSlot extends Slot { + + public Inventory inventory; + public int index; + public int x; + public int y; + public CompatibleSlot(Inventory inventory, int index, int x, int y) { super(inventory, index, x, y); + this.inventory = inventory; + this.index = index; + this.x = x; + this.y = y; } public void callSetStack(ItemStack stack) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java index 71f795558..82776a8f4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityTypeUtil.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.api.util; import net.minecraft.entity.EntityType; +import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -36,4 +37,12 @@ public static int getRawId(EntityType type) { public static EntityType fromIndex(int index) { return Registry.ENTITY_TYPE.get(index); } + + public static Text getName(EntityType entityType) { + return entityType.getName(); + } + + public static String getTranslationKey(EntityType entityType) { + return entityType.getTranslationKey(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java index 23a65c55c..018aad006 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SlotUtil.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.util; +import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.pitan76.mcpitanlib.api.entity.Player; @@ -36,4 +37,8 @@ public static boolean canTakeItems(Slot slot) { public static void onTakeItem(Slot slot, Player player, ItemStack stack) { slot.onTakeItem(player.getEntity(), stack); } + + public static Inventory getInventory(Slot slot) { + return slot.inventory; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index c70328f6e..69e0afb23 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -12,6 +12,7 @@ import net.minecraft.fluid.FluidState; import net.minecraft.item.ItemStack; import net.minecraft.particle.ParticleEffect; +import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; @@ -28,6 +29,8 @@ import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.entity.EntityTypeWrapper; import net.pitan76.mcpitanlib.midohra.world.chunk.ChunkTicketType; import org.jetbrains.annotations.Nullable; @@ -382,4 +385,24 @@ public static void dropStackOnBlock(World world, BlockPos pos, ItemStack stack) public static float getSkyAngle(World world, float tickDelta) { return world.getSkyAngle(tickDelta); } + + public static Block getBlock(World world, BlockPos pos) { + return getBlockState(world, pos).getBlock(); + } + + public static BlockWrapper getBlockWrapper(World world, BlockPos pos) { + return BlockWrapper.of(getBlock(world, pos)); + } + + public static List getEntitiesByType(World world, EntityType filter, Box box) { + return getEntitiesByType(world, filter, box, EntityPredicates.VALID_ENTITY); + } + + public static List getEntitiesByType(World world, EntityTypeWrapper filter, Box box, Predicate predicate) { + return getEntitiesByType(world, (EntityType) filter.get(), box, predicate); + } + + public static List getEntitiesByType(World world, EntityTypeWrapper filter, Box box) { + return getEntitiesByType(world, filter.get(), box); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockUtil.java index d0b2969be..4f1eae397 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/block/BlockUtil.java @@ -2,10 +2,12 @@ import net.minecraft.block.Block; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.pitan76.mcpitanlib.api.block.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.tag.TagKey; import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.v2.BlockUtilV2; import java.util.ArrayList; import java.util.List; @@ -222,4 +224,12 @@ public static TextComponent getName(Block block) { public static String getTranslationKey(Block block) { return block.getTranslationKey(); } + + public static Block fromItem(Item item) { + return BlockUtilV2.fromItem(item); + } + + public static Block fromItem(ItemStack stack) { + return BlockUtilV2.fromItem(stack); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java index a24cc5327..083d0d00b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java @@ -1,10 +1,15 @@ package net.pitan76.mcpitanlib.api.util.entity; +import net.minecraft.entity.EntityType; import net.minecraft.entity.ItemEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.util.WorldUtil; + +import java.util.List; public class ItemEntityUtil { public static ItemEntity create(World world, double x, double y, double z, ItemStack stack) { @@ -40,4 +45,12 @@ public static void setPickupDelay(ItemEntity itemEntity, int pickupDelay) { public static void setToDefaultPickupDelay(ItemEntity itemEntity) { itemEntity.setToDefaultPickupDelay(); } + + public static ItemStack getStack(ItemEntity entity) { + return entity.getStack(); + } + + public static List getEntities(World world, Box box) { + return WorldUtil.getEntitiesByType(world, EntityType.ITEM, box); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java index c883b01fe..a5416441a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java @@ -11,4 +11,8 @@ public static ItemStack getItem(ThrownItemEntity entity) { public static void setItem(ThrownItemEntity entity, ItemStack stack) { entity.setItem(stack); } + + public static ItemStack getStack(ThrownItemEntity entity) { + return entity.getStack(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java index 0a8b02ad3..de4a75fd8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java @@ -35,4 +35,8 @@ public static Box createBox(BlockPos pos, int size) { public static Box createBox(BlockPos pos, int sizeX, int sizeY, int sizeZ) { return createBox(pos, pos.add(sizeX, sizeY, sizeZ)); } + + public static Box createBoxCenter(BlockPos pos, int size) { + return createBox(pos.add(-size, -size, -size), pos.add(size, size, size)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtListUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtListUtil.java new file mode 100644 index 000000000..076e0c11f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtListUtil.java @@ -0,0 +1,91 @@ +package net.pitan76.mcpitanlib.api.util.nbt; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; +import net.minecraft.nbt.NbtList; +import net.pitan76.mcpitanlib.api.util.NbtUtil; + +import java.util.Optional; +import java.util.stream.Stream; + +public class NbtListUtil { + public static NbtList create() { + return NbtUtil.createNbtList(); + } + + public static NbtList copy(NbtList list) { + return list.copy(); + } + + public static Stream stream(NbtList list) { + return list.stream(); + } + + public static Optional getStringOptional(NbtList list, int index) { + if (index < 0 || index >= list.size()) + return Optional.empty(); + + return Optional.of(list.getString(index)); + } + + public static NbtElement get(NbtList list, int index) { + return list.get(index); + } + + public static NbtElement getOrDefault(NbtList list, int index, NbtElement defaultValue) { + NbtElement nbt = get(list, index); + return nbt == null ? defaultValue : nbt; + } + + public static void set(NbtList list, int index, NbtElement value) { + list.set(index, value); + } + + public static void add(NbtList list, NbtElement value) { + list.add(value); + } + + public static void set(NbtList list, int index, String value) { + set(list, index, NbtUtil.createString(value)); + } + + public static boolean has(NbtList list, NbtElement value) { + return list.contains(value); + } + + public static int size(NbtList list) { + return list.size(); + } + + public static void remove(NbtList list, int index) { + list.remove(index); + } + + public static void clear(NbtList list) { + list.clear(); + } + + public static boolean isEmpty(NbtList list) { + return list.isEmpty(); + } + + public static String getString(NbtList list, int index) { + return getStringOptional(list, index).orElse(""); + } + + public static void setString(NbtList list, int index, String value) { + list.set(index, NbtUtil.createString(value)); + } + + public static void addString(NbtList list, String value) { + list.add(NbtUtil.createString(value)); + } + + public static NbtList getList(NbtList list, int index) { + return list.getList(index); + } + + public static NbtCompound getCompound(NbtList list, int index) { + return list.getCompound(index); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypeWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypeWrapper.java new file mode 100644 index 000000000..bf90199bb --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypeWrapper.java @@ -0,0 +1,56 @@ +package net.pitan76.mcpitanlib.midohra.entity; + +import net.pitan76.mcpitanlib.api.text.TextComponent; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.api.util.EntityTypeUtil; + +public class EntityTypeWrapper { + private final net.minecraft.entity.EntityType entityType; + + protected EntityTypeWrapper() { + this.entityType = null; + } + + protected EntityTypeWrapper(net.minecraft.entity.EntityType entityType) { + this.entityType = entityType; + } + + public static EntityTypeWrapper of(net.minecraft.entity.EntityType entityType) { + return new EntityTypeWrapper(entityType); + } + + public static EntityTypeWrapper of() { + return new EntityTypeWrapper(); + } + + public boolean isExist() { + return !isEmpty(); + } + + public boolean isEmpty() { + return entityType == null; + } + + public net.minecraft.entity.EntityType get() { + return entityType; + } + + public CompatIdentifier getId() { + if (isEmpty()) return CompatIdentifier.empty(); + return EntityTypeUtil.toCompatID(entityType); + } + + public TextComponent getName() { + if (isEmpty()) return TextComponent.of(""); + return new TextComponent(EntityTypeUtil.getName(entityType)); + } + + public String getTranslationKey() { + if (isEmpty()) return ""; + return EntityTypeUtil.getTranslationKey(entityType); + } + + public boolean rawEquals(EntityTypeWrapper other) { + return entityType == other.entityType; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java new file mode 100644 index 000000000..a7c65bbfe --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java @@ -0,0 +1,75 @@ +package net.pitan76.mcpitanlib.midohra.entity; + +import net.minecraft.entity.EntityType; + +public class EntityTypes { + public static final EntityTypeWrapper BOAT = EntityTypeWrapper.of(EntityType.OAK_BOAT); + public static final EntityTypeWrapper ACACIA_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ACACIA_BOAT); + public static final EntityTypeWrapper ACACIA_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ACACIA_CHEST_BOAT); + public static final EntityTypeWrapper BIRCH_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BIRCH_BOAT); + public static final EntityTypeWrapper BIRCH_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BIRCH_CHEST_BOAT); + public static final EntityTypeWrapper DARK_OAK_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.DARK_OAK_BOAT); + public static final EntityTypeWrapper DARK_OAK_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.DARK_OAK_CHEST_BOAT); + public static final EntityTypeWrapper JUNGLE_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.JUNGLE_BOAT); + public static final EntityTypeWrapper JUNGLE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.JUNGLE_CHEST_BOAT); + public static final EntityTypeWrapper SPRUCE_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.SPRUCE_BOAT); + public static final EntityTypeWrapper SPRUCE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.SPRUCE_CHEST_BOAT); + public static final EntityTypeWrapper FURNACE_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FURNACE_MINECART); + public static final EntityTypeWrapper HOPPER_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.HOPPER_MINECART); + public static final EntityTypeWrapper MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.MINECART); + public static final EntityTypeWrapper TNT_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.TNT_MINECART); + public static final EntityTypeWrapper CHEST_MINECART = EntityTypeWrapper.of(EntityType.CHEST_MINECART); + public static final EntityTypeWrapper HORSE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.HORSE); + public static final EntityTypeWrapper LLAMA = EntityTypeWrapper.of(net.minecraft.entity.EntityType.LLAMA); + + public static final EntityTypeWrapper ITEM = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ITEM); + public static final EntityTypeWrapper ITEM_DISPLAY = EntityTypeWrapper.of(EntityType.ITEM_DISPLAY); + public static final EntityTypeWrapper ITEM_FRAME = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ITEM_FRAME); + public static final EntityTypeWrapper GLOW_ITEM_FRAME = EntityTypeWrapper.of(EntityType.GLOW_ITEM_FRAME); + public static final EntityTypeWrapper EXPERIENCE_BOTTLE = EntityTypeWrapper.of(EntityType.EXPERIENCE_BOTTLE); + public static final EntityTypeWrapper EXPERIENCE_ORB = EntityTypeWrapper.of(EntityType.EXPERIENCE_ORB); + + public static final EntityTypeWrapper SNOWBALL = EntityTypeWrapper.of(EntityType.SNOWBALL); + public static final EntityTypeWrapper FIREBALL = EntityTypeWrapper.of(EntityType.FIREBALL); + public static final EntityTypeWrapper SMALL_FIREBALL = EntityTypeWrapper.of(EntityType.SMALL_FIREBALL); + public static final EntityTypeWrapper DRAGON_FIREBALL = EntityTypeWrapper.of(EntityType.DRAGON_FIREBALL); + public static final EntityTypeWrapper FIREWORK_ROCKET = EntityTypeWrapper.of(EntityType.FIREWORK_ROCKET); + + public static final EntityTypeWrapper ALLAY = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ALLAY); + public static final EntityTypeWrapper AXOLOTL = EntityTypeWrapper.of(net.minecraft.entity.EntityType.AXOLOTL); + public static final EntityTypeWrapper BAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BAT); + public static final EntityTypeWrapper BEE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BEE); + public static final EntityTypeWrapper BLAZE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BLAZE); + public static final EntityTypeWrapper CAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CAT); + public static final EntityTypeWrapper CHICKEN = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHICKEN); + public static final EntityTypeWrapper COD = EntityTypeWrapper.of(net.minecraft.entity.EntityType.COD); + public static final EntityTypeWrapper COW = EntityTypeWrapper.of(net.minecraft.entity.EntityType.COW); + public static final EntityTypeWrapper CREEPER = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CREEPER); + public static final EntityTypeWrapper DOLPHIN = EntityTypeWrapper.of(net.minecraft.entity.EntityType.DOLPHIN); + public static final EntityTypeWrapper DONKEY = EntityTypeWrapper.of(net.minecraft.entity.EntityType.DONKEY); + public static final EntityTypeWrapper DROWNED = EntityTypeWrapper.of(net.minecraft.entity.EntityType.DROWNED); + public static final EntityTypeWrapper ELDER_GUARDIAN = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ELDER_GUARDIAN); + public static final EntityTypeWrapper ENDER_DRAGON = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ENDER_DRAGON); + public static final EntityTypeWrapper ENDERMAN = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ENDERMAN); + public static final EntityTypeWrapper ENDERMITE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ENDERMITE); + public static final EntityTypeWrapper EVOKER = EntityTypeWrapper.of(net.minecraft.entity.EntityType.EVOKER); + public static final EntityTypeWrapper FOX = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FOX); + public static final EntityTypeWrapper FROG = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FROG); + public static final EntityTypeWrapper GHAST = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GHAST); + public static final EntityTypeWrapper GIANT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GIANT); + public static final EntityTypeWrapper GLOW_SQUID = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GLOW_SQUID); + public static final EntityTypeWrapper GOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GOAT); + public static final EntityTypeWrapper GUARDIAN = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GUARDIAN); + public static final EntityTypeWrapper HUSK = EntityTypeWrapper.of(net.minecraft.entity.EntityType.HUSK); + public static final EntityTypeWrapper ILLUSIONER = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ILLUSIONER); + public static final EntityTypeWrapper IRON_GOLEM = EntityTypeWrapper.of(net.minecraft.entity.EntityType.IRON_GOLEM); + public static final EntityTypeWrapper LLAMA_SPIT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.LLAMA_SPIT); + public static final EntityTypeWrapper MAGMA_CUBE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.MAGMA_CUBE); + public static final EntityTypeWrapper MARKER = EntityTypeWrapper.of(net.minecraft.entity.EntityType.MARKER); + public static final EntityTypeWrapper MOOSHROOM = EntityTypeWrapper.of(net.minecraft.entity.EntityType.MOOSHROOM); + public static final EntityTypeWrapper MULE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.MULE); + public static final EntityTypeWrapper SKELETON = EntityTypeWrapper.of(net.minecraft.entity.EntityType.SKELETON); + public static final EntityTypeWrapper VILLAGER = EntityTypeWrapper.of(net.minecraft.entity.EntityType.VILLAGER); + public static final EntityTypeWrapper ZOMBIE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ZOMBIE); + public static final EntityTypeWrapper ZOMBIE_VILLAGER = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ZOMBIE_VILLAGER); +} diff --git a/info.properties b/info.properties index aa277f59d..14a572f2f 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.3 +mod_version=3.2.4 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 02ac49602a2a04b1ab6fdd2a8b19822d9db00c58 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Apr 2025 13:11:43 +0900 Subject: [PATCH 456/617] [cp] fix boat --- .../midohra/entity/EntityTypes.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java index a7c65bbfe..c4a866ef0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java @@ -3,17 +3,17 @@ import net.minecraft.entity.EntityType; public class EntityTypes { - public static final EntityTypeWrapper BOAT = EntityTypeWrapper.of(EntityType.OAK_BOAT); - public static final EntityTypeWrapper ACACIA_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ACACIA_BOAT); - public static final EntityTypeWrapper ACACIA_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ACACIA_CHEST_BOAT); - public static final EntityTypeWrapper BIRCH_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BIRCH_BOAT); - public static final EntityTypeWrapper BIRCH_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BIRCH_CHEST_BOAT); - public static final EntityTypeWrapper DARK_OAK_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.DARK_OAK_BOAT); - public static final EntityTypeWrapper DARK_OAK_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.DARK_OAK_CHEST_BOAT); - public static final EntityTypeWrapper JUNGLE_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.JUNGLE_BOAT); - public static final EntityTypeWrapper JUNGLE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.JUNGLE_CHEST_BOAT); - public static final EntityTypeWrapper SPRUCE_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.SPRUCE_BOAT); - public static final EntityTypeWrapper SPRUCE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.SPRUCE_CHEST_BOAT); + public static final EntityTypeWrapper BOAT = EntityTypeWrapper.of(EntityType.BOAT); + public static final EntityTypeWrapper ACACIA_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); + public static final EntityTypeWrapper ACACIA_CHEST_BOAT = EntityTypeWrapper.of(EntityType.CHEST_BOAT); + public static final EntityTypeWrapper BIRCH_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); + public static final EntityTypeWrapper BIRCH_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_BOAT); + public static final EntityTypeWrapper DARK_OAK_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); + public static final EntityTypeWrapper DARK_OAK_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_BOAT); + public static final EntityTypeWrapper JUNGLE_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); + public static final EntityTypeWrapper JUNGLE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_BOAT); + public static final EntityTypeWrapper SPRUCE_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); + public static final EntityTypeWrapper SPRUCE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_BOAT); public static final EntityTypeWrapper FURNACE_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FURNACE_MINECART); public static final EntityTypeWrapper HOPPER_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.HOPPER_MINECART); public static final EntityTypeWrapper MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.MINECART); From 6be6078ec7c8c95f6575ce395354933e84f6154d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Apr 2025 13:14:31 +0900 Subject: [PATCH 457/617] [cp] set ITEM_DISPLAY to null --- .../java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java index c4a866ef0..bd69fe53d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java @@ -23,7 +23,7 @@ public class EntityTypes { public static final EntityTypeWrapper LLAMA = EntityTypeWrapper.of(net.minecraft.entity.EntityType.LLAMA); public static final EntityTypeWrapper ITEM = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ITEM); - public static final EntityTypeWrapper ITEM_DISPLAY = EntityTypeWrapper.of(EntityType.ITEM_DISPLAY); + public static final EntityTypeWrapper ITEM_DISPLAY = EntityTypeWrapper.of(); public static final EntityTypeWrapper ITEM_FRAME = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ITEM_FRAME); public static final EntityTypeWrapper GLOW_ITEM_FRAME = EntityTypeWrapper.of(EntityType.GLOW_ITEM_FRAME); public static final EntityTypeWrapper EXPERIENCE_BOTTLE = EntityTypeWrapper.of(EntityType.EXPERIENCE_BOTTLE); From 1f22992f4eddd204c70cb4ded5566011dbf9b203 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Apr 2025 13:27:51 +0900 Subject: [PATCH 458/617] fix entity --- .../midohra/entity/EntityTypes.java | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java index bd69fe53d..8c44b1a90 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypes.java @@ -1,41 +1,39 @@ package net.pitan76.mcpitanlib.midohra.entity; -import net.minecraft.entity.EntityType; - public class EntityTypes { - public static final EntityTypeWrapper BOAT = EntityTypeWrapper.of(EntityType.BOAT); + public static final EntityTypeWrapper BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); public static final EntityTypeWrapper ACACIA_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); - public static final EntityTypeWrapper ACACIA_CHEST_BOAT = EntityTypeWrapper.of(EntityType.CHEST_BOAT); + public static final EntityTypeWrapper ACACIA_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); public static final EntityTypeWrapper BIRCH_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); - public static final EntityTypeWrapper BIRCH_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_BOAT); + public static final EntityTypeWrapper BIRCH_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); public static final EntityTypeWrapper DARK_OAK_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); - public static final EntityTypeWrapper DARK_OAK_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_BOAT); + public static final EntityTypeWrapper DARK_OAK_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); public static final EntityTypeWrapper JUNGLE_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); - public static final EntityTypeWrapper JUNGLE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_BOAT); + public static final EntityTypeWrapper JUNGLE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); public static final EntityTypeWrapper SPRUCE_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); - public static final EntityTypeWrapper SPRUCE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_BOAT); + public static final EntityTypeWrapper SPRUCE_CHEST_BOAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BOAT); public static final EntityTypeWrapper FURNACE_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FURNACE_MINECART); public static final EntityTypeWrapper HOPPER_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.HOPPER_MINECART); public static final EntityTypeWrapper MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.MINECART); public static final EntityTypeWrapper TNT_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.TNT_MINECART); - public static final EntityTypeWrapper CHEST_MINECART = EntityTypeWrapper.of(EntityType.CHEST_MINECART); + public static final EntityTypeWrapper CHEST_MINECART = EntityTypeWrapper.of(net.minecraft.entity.EntityType.CHEST_MINECART); public static final EntityTypeWrapper HORSE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.HORSE); public static final EntityTypeWrapper LLAMA = EntityTypeWrapper.of(net.minecraft.entity.EntityType.LLAMA); public static final EntityTypeWrapper ITEM = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ITEM); public static final EntityTypeWrapper ITEM_DISPLAY = EntityTypeWrapper.of(); public static final EntityTypeWrapper ITEM_FRAME = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ITEM_FRAME); - public static final EntityTypeWrapper GLOW_ITEM_FRAME = EntityTypeWrapper.of(EntityType.GLOW_ITEM_FRAME); - public static final EntityTypeWrapper EXPERIENCE_BOTTLE = EntityTypeWrapper.of(EntityType.EXPERIENCE_BOTTLE); - public static final EntityTypeWrapper EXPERIENCE_ORB = EntityTypeWrapper.of(EntityType.EXPERIENCE_ORB); + public static final EntityTypeWrapper GLOW_ITEM_FRAME = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GLOW_ITEM_FRAME); + public static final EntityTypeWrapper EXPERIENCE_BOTTLE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.EXPERIENCE_BOTTLE); + public static final EntityTypeWrapper EXPERIENCE_ORB = EntityTypeWrapper.of(net.minecraft.entity.EntityType.EXPERIENCE_ORB); - public static final EntityTypeWrapper SNOWBALL = EntityTypeWrapper.of(EntityType.SNOWBALL); - public static final EntityTypeWrapper FIREBALL = EntityTypeWrapper.of(EntityType.FIREBALL); - public static final EntityTypeWrapper SMALL_FIREBALL = EntityTypeWrapper.of(EntityType.SMALL_FIREBALL); - public static final EntityTypeWrapper DRAGON_FIREBALL = EntityTypeWrapper.of(EntityType.DRAGON_FIREBALL); - public static final EntityTypeWrapper FIREWORK_ROCKET = EntityTypeWrapper.of(EntityType.FIREWORK_ROCKET); + public static final EntityTypeWrapper SNOWBALL = EntityTypeWrapper.of(net.minecraft.entity.EntityType.SNOWBALL); + public static final EntityTypeWrapper FIREBALL = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FIREBALL); + public static final EntityTypeWrapper SMALL_FIREBALL = EntityTypeWrapper.of(net.minecraft.entity.EntityType.SMALL_FIREBALL); + public static final EntityTypeWrapper DRAGON_FIREBALL = EntityTypeWrapper.of(net.minecraft.entity.EntityType.DRAGON_FIREBALL); + public static final EntityTypeWrapper FIREWORK_ROCKET = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FIREWORK_ROCKET); - public static final EntityTypeWrapper ALLAY = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ALLAY); + public static final EntityTypeWrapper ALLAY = EntityTypeWrapper.of(); public static final EntityTypeWrapper AXOLOTL = EntityTypeWrapper.of(net.minecraft.entity.EntityType.AXOLOTL); public static final EntityTypeWrapper BAT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BAT); public static final EntityTypeWrapper BEE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.BEE); @@ -54,7 +52,7 @@ public class EntityTypes { public static final EntityTypeWrapper ENDERMITE = EntityTypeWrapper.of(net.minecraft.entity.EntityType.ENDERMITE); public static final EntityTypeWrapper EVOKER = EntityTypeWrapper.of(net.minecraft.entity.EntityType.EVOKER); public static final EntityTypeWrapper FOX = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FOX); - public static final EntityTypeWrapper FROG = EntityTypeWrapper.of(net.minecraft.entity.EntityType.FROG); + public static final EntityTypeWrapper FROG = EntityTypeWrapper.of(); public static final EntityTypeWrapper GHAST = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GHAST); public static final EntityTypeWrapper GIANT = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GIANT); public static final EntityTypeWrapper GLOW_SQUID = EntityTypeWrapper.of(net.minecraft.entity.EntityType.GLOW_SQUID); From 7b0ec47fdb069fb7b7511abbb509581fccbebcf7 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Apr 2025 11:45:24 +0900 Subject: [PATCH 459/617] [cp] fix readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c513f1bad..2726ff33e 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ dependencies { `gradle.properties`に以下のように記述してください。 ```properties -# Example: mcpitanlib_version=+1.18.2:3.0.4 +# Example: mcpitanlib_version=+1.18.2:3.2.4 mcpitanlib_version=x.x.x ``` @@ -85,7 +85,7 @@ dependencies { Write as follows in `gradle.properties`. ```properties -# Example: mcpitanlib_version=+1.18.2:3.0.4 +# Example: mcpitanlib_version=+1.18.2:3.2.4 mcpitanlib_version=+x.x.x:x.x.x ``` From f5ed9726202ea2d84e1408491ddf25192d67da87 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 13 Apr 2025 14:27:20 +0900 Subject: [PATCH 460/617] [cp] add note --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2726ff33e..d1b8fb516 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ MCPitanLibはライブラリです。 1つのjarで複数のMCバージョンを - [FabricMC](https://fabricmc.net/) - [Minecraft Forge](https://files.minecraftforge.net/) - [NeoForge](https://neoforged.net/) -- [Architectury API (CurseForge)](https://www.curseforge.com/minecraft/mc-mods/architectury-api) +- Architectury API ([CurseForge](https://www.curseforge.com/minecraft/mc-mods/architectury-api) | [Modrinth](https://modrinth.com/mod/architectury-api)) ### ダウンロード - [CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch) @@ -56,7 +56,7 @@ I am creating it for my own use, so I don't expect others to use it much.
- [FabricMC](https://fabricmc.net/) - [Minecraft Forge](https://files.minecraftforge.net/) - [NeoForge](https://neoforged.net/) -- [Architectury API (CurseForge)](https://www.curseforge.com/minecraft/mc-mods/architectury-api) +- [Architectury API](https://www.curseforge.com/minecraft/mc-mods/architectury-api) ([CurseForge](https://www.curseforge.com/minecraft/mc-mods/architectury-api) | [Modrinth](https://modrinth.com/mod/architectury-api)) ### Download - [CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcpitanlibarch) @@ -93,3 +93,9 @@ Please check the version at [maven.pitan76.net](https://maven.pitan76.net/net/pi For MOD development using MCPitanLib, refer to "common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java". +## Note +### Auto Cherry-Pick (GitHub Actions) +コミットメッセージに [cp] を含むと、Actionsで自動的にCherry-Pickを行います。
+そのコミットしたブランチからそれより下位のバージョンのブランチにCherry-Pickし、コンフリを起こした場合はそこで停止し、PRを作成します。
+今のところ、そのPRは使えないので閉じる必要があります。(今後はissueにする予定です。) + From 3f4d576d8d58da28d0c2d948cf70638a6ee93cad Mon Sep 17 00:00:00 2001 From: Pitan <58260965+PTOM76@users.noreply.github.com> Date: Sun, 13 Apr 2025 22:56:17 +0900 Subject: [PATCH 461/617] [cp] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d1b8fb516..41a567d5a 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ dependencies { `gradle.properties`に以下のように記述してください。 ```properties # Example: mcpitanlib_version=+1.18.2:3.2.4 -mcpitanlib_version=x.x.x +mcpitanlib_version=+x.x.x:x.x.x ``` バージョンは[maven.pitan76.net](https://maven.pitan76.net/net/pitan76/)で確認してください。 From 6f3d6688eeeb6dcb110a4cc26ff45d3f4a8c9d18 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 15 Apr 2025 10:26:23 +0900 Subject: [PATCH 462/617] [cp] add RenderUtil v2 --- .../mcpitanlib/api/util/client/v2/RenderUtil.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/RenderUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/RenderUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/RenderUtil.java new file mode 100644 index 000000000..cc3313a48 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/RenderUtil.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.api.util.client.v2; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class RenderUtil extends net.pitan76.mcpitanlib.api.util.client.RenderUtil { + public static void setShaderTexture(int texture, CompatIdentifier id) { + setShaderTexture(texture, id.toMinecraft()); + } +} From fb48baa633e939a555c0fcfe984d1e7f303f2faa Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 16 Apr 2025 23:51:01 +0900 Subject: [PATCH 463/617] [cp] change readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 41a567d5a..d06519293 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # MCPitanLib +## License +- MIT License + ## 日本語 MCPitanLibはライブラリです。 1つのjarで複数のMCバージョンを対応させるためのものです。
開発中であるため、予告なく仕様が変更されることがあったり、不具合があるかもしれません。
From fe8575ff5aa03fc155a18d447920b596230704c1 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 17 Apr 2025 00:01:53 +0900 Subject: [PATCH 464/617] [cp] add api to ItemEntityUtil --- .../mcpitanlib/api/util/entity/ItemEntityUtil.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java index 083d0d00b..4562d3619 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ItemEntityUtil.java @@ -53,4 +53,16 @@ public static ItemStack getStack(ItemEntity entity) { public static List getEntities(World world, Box box) { return WorldUtil.getEntitiesByType(world, EntityType.ITEM, box); } + + public static ItemEntity createWithSpawn(World world, ItemStack stack, double x, double y, double z) { + ItemEntity itemEntity = create(world, x, y, z, stack); + setToDefaultPickupDelay(itemEntity); + setVelocity(itemEntity, 0.0D, 0.0D, 0.0D); + WorldUtil.spawnEntity(world, itemEntity); + return itemEntity; + } + + public static ItemEntity createWithSpawn(World world, ItemStack stack, BlockPos pos) { + return createWithSpawn(world, stack, pos.getX(), pos.getY(), pos.getZ()); + } } From d7d4ab07d6e2c3234c3fe8e8f00e4da5e0239443 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Apr 2025 00:10:59 +0900 Subject: [PATCH 465/617] [cp] add method to ItemBuilder --- .../midohra/easybuilder/ItemBuilder.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java index d503dc624..17b942291 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java @@ -7,6 +7,7 @@ import net.pitan76.mcpitanlib.api.item.v2.ItemSettingsBuilder; import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; +import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.CompatRarity; @@ -15,6 +16,8 @@ import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; +import java.util.ArrayList; +import java.util.List; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -144,4 +147,22 @@ public ItemBuilder onItemBarStep(Function onItemBarSte this.onItemBarStep = onItemBarStep; return this; } + + private final List tooltip = new ArrayList<>(); + + public ItemBuilder addTooltip(TextComponent text) { + if (tooltip.isEmpty()) + onAppendTooltip = e -> e.getTooltip().add(text.getText()); + else { + onAppendTooltip = e -> { + for (TextComponent t : tooltip) { + e.getTooltip().add(t.getText()); + } + e.getTooltip().add(text.getText()); + }; + } + + this.tooltip.add(text); + return this; + } } From e2c6f9b64c2585a8991c2376e2c5e09b04d90e4e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Apr 2025 14:29:03 +0900 Subject: [PATCH 466/617] [cp] fix builder --- .../midohra/easybuilder/BlockBuilder.java | 30 +++++++++++++++++++ .../midohra/easybuilder/ItemBuilder.java | 13 ++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java index 4ac919323..62790f0bc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -2,6 +2,7 @@ import net.minecraft.item.Item; import net.minecraft.util.shape.VoxelShape; +import net.pitan76.mcpitanlib.api.CommonModInitializer; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; import net.pitan76.mcpitanlib.api.block.ExtendBlock; @@ -19,6 +20,7 @@ import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; import net.pitan76.mcpitanlib.api.sound.CompatBlockSoundGroup; +import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.color.CompatDyeColor; @@ -31,6 +33,8 @@ import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; import java.util.function.*; public class BlockBuilder { @@ -79,6 +83,14 @@ public SupplierBlockWrapper build(CompatRegistryV2 registry, CompatIdentifier id return SupplierBlockWrapper.of(result::get); } + public SupplierBlockWrapper build(CommonModInitializer initializer) { + return build(initializer.registry); + } + + public SupplierBlockWrapper build(CommonModInitializer initializer, CompatIdentifier id) { + return build(initializer.registry, id); + } + public Pair buildWithItem(CompatRegistryV2 registry, CompatibleItemSettings settings) { SupplierBlockWrapper block = build(registry); @@ -211,4 +223,22 @@ public BlockBuilder setDefaultState(BlockState defaultState) { this.defaultState = defaultState; return this; } + + private final List tooltip = new ArrayList<>(); + + public BlockBuilder addTooltip(TextComponent text) { + if (tooltip.isEmpty()) { + onAppendTooltip = e -> e.getTooltip().add(text.getText()); + } else { + onAppendTooltip = e -> { + for (TextComponent t : tooltip) { + e.getTooltip().add(t.getText()); + } + e.getTooltip().add(text.getText()); + }; + } + + this.tooltip.add(text); + return this; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java index 17b942291..a7fee868a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.midohra.easybuilder; +import net.pitan76.mcpitanlib.api.CommonModInitializer; import net.pitan76.mcpitanlib.api.event.item.*; import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; @@ -63,6 +64,14 @@ public SupplierItemWrapper build(CompatRegistryV2 registry, CompatIdentifier id) return SupplierItemWrapper.of(result::get); } + public SupplierItemWrapper build(CommonModInitializer initializer) { + return build(initializer.registry); + } + + public SupplierItemWrapper build(CommonModInitializer initializer, CompatIdentifier id) { + return build(initializer.registry, id); + } + public ItemBuilder maxCount(int maxCount) { settingsBuilder.maxCount(maxCount); return this; @@ -151,9 +160,9 @@ public ItemBuilder onItemBarStep(Function onItemBarSte private final List tooltip = new ArrayList<>(); public ItemBuilder addTooltip(TextComponent text) { - if (tooltip.isEmpty()) + if (tooltip.isEmpty()) { onAppendTooltip = e -> e.getTooltip().add(text.getText()); - else { + } else { onAppendTooltip = e -> { for (TextComponent t : tooltip) { e.getTooltip().add(t.getText()); From 7350e01f6337c4a9b83e19af073cce2b0f0821eb Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Apr 2025 14:31:09 +0900 Subject: [PATCH 467/617] [cp] fix builder --- .../mcpitanlib/midohra/easybuilder/BlockBuilder.java | 8 ++++++++ .../midohra/easybuilder/BlockWithBlockEntityBuilder.java | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java index 62790f0bc..71c614fe2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -107,6 +107,14 @@ public Pair buildWithItem(CompatRegis return Pair.of(block, SupplierItemWrapper.of(result::get)); } + public Pair buildWithItem(CommonModInitializer initializer, CompatibleItemSettings settings) { + return buildWithItem(initializer.registry, settings); + } + + public Pair buildWithItem(CommonModInitializer initializer, CompatIdentifier id, CompatibleItemSettings settings) { + return buildWithItem(initializer.registry, id, settings); + } + public BlockBuilder material(CompatibleMaterial material) { settingsBuilder.material(material); return this; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java index 651b16a5c..283478bd3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.midohra.easybuilder; import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.api.CommonModInitializer; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.block.v2.BlockSettingsBuilder; import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; @@ -49,6 +50,14 @@ public SupplierBlockWrapper build(CompatRegistryV2 registry, CompatIdentifier id return SupplierBlockWrapper.of(result::get); } + public SupplierBlockWrapper build(CommonModInitializer initializer) { + return build(initializer.registry); + } + + public SupplierBlockWrapper build(CommonModInitializer initializer, CompatIdentifier id) { + return build(initializer.registry, id); + } + public static BlockWithBlockEntityBuilder of(CompatIdentifier id) { return new BlockWithBlockEntityBuilder(id); } From a191f14e18063fee41a24b70730d4d13fb4616ed Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Apr 2025 14:32:51 +0900 Subject: [PATCH 468/617] [cp] move to built package --- .../pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java | 1 + .../midohra/easybuilder/BlockWithBlockEntityBuilder.java | 1 + .../pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java | 1 + .../mcpitanlib/midohra/easybuilder/{ => built}/BuiltBlock.java | 3 ++- .../midohra/easybuilder/{ => built}/BuiltBlockWithEntity.java | 3 ++- .../mcpitanlib/midohra/easybuilder/{ => built}/BuiltItem.java | 3 ++- 6 files changed, 9 insertions(+), 3 deletions(-) rename common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/{ => built}/BuiltBlock.java (97%) rename common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/{ => built}/BuiltBlockWithEntity.java (88%) rename common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/{ => built}/BuiltItem.java (95%) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java index 71c614fe2..fd8a26ddc 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -30,6 +30,7 @@ import net.pitan76.mcpitanlib.midohra.block.BlockState; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; +import net.pitan76.mcpitanlib.midohra.easybuilder.built.BuiltBlock; import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java index 283478bd3..839bbda1f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java @@ -8,6 +8,7 @@ import net.pitan76.mcpitanlib.api.util.BlockEntityTypeUtil; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; +import net.pitan76.mcpitanlib.midohra.easybuilder.built.BuiltBlockWithEntity; import java.util.function.Supplier; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java index a7fee868a..e435ae37e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java @@ -13,6 +13,7 @@ import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.CompatRarity; import net.pitan76.mcpitanlib.api.util.StackActionResult; +import net.pitan76.mcpitanlib.midohra.easybuilder.built.BuiltItem; import net.pitan76.mcpitanlib.midohra.item.ItemGroupWrapper; import net.pitan76.mcpitanlib.midohra.item.ItemWrapper; import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlock.java similarity index 97% rename from common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java rename to common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlock.java index ea68267c5..3fca28d2a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlock.java @@ -1,4 +1,4 @@ -package net.pitan76.mcpitanlib.midohra.easybuilder; +package net.pitan76.mcpitanlib.midohra.easybuilder.built; import net.minecraft.util.shape.VoxelShape; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; @@ -16,6 +16,7 @@ import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.easybuilder.BlockBuilder; import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlockWithEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockWithEntity.java similarity index 88% rename from common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlockWithEntity.java rename to common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockWithEntity.java index d82ae53ff..9a83d588b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltBlockWithEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockWithEntity.java @@ -1,10 +1,11 @@ -package net.pitan76.mcpitanlib.midohra.easybuilder; +package net.pitan76.mcpitanlib.midohra.easybuilder.built; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.pitan76.mcpitanlib.api.block.ExtendBlockEntityProvider; import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.easybuilder.BlockWithBlockEntityBuilder; import org.jetbrains.annotations.Nullable; public class BuiltBlockWithEntity extends BuiltBlock implements ExtendBlockEntityProvider { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltItem.java similarity index 95% rename from common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java rename to common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltItem.java index 7e8dec9a9..bd7ff8330 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BuiltItem.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltItem.java @@ -1,4 +1,4 @@ -package net.pitan76.mcpitanlib.midohra.easybuilder; +package net.pitan76.mcpitanlib.midohra.easybuilder.built; import net.pitan76.mcpitanlib.api.event.item.*; import net.pitan76.mcpitanlib.api.item.v2.CompatItem; @@ -6,6 +6,7 @@ import net.pitan76.mcpitanlib.api.util.CompatActionResult; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.StackActionResult; +import net.pitan76.mcpitanlib.midohra.easybuilder.ItemBuilder; import java.util.function.Consumer; import java.util.function.Function; From 3298780acda5f6bd02d51bdad5dfa0fbddfa88b0 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Apr 2025 14:52:02 +0900 Subject: [PATCH 469/617] [cp] add share --- .../easybuilder/share/AbstractShare.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/share/AbstractShare.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/share/AbstractShare.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/share/AbstractShare.java new file mode 100644 index 000000000..9c6d93edf --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/share/AbstractShare.java @@ -0,0 +1,24 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder.share; + +public class AbstractShare { + + public T obj; + public S args; + + public AbstractShare(T object, S args) { + this.obj = object; + this.args = args; + } + + public T getObject() { + return obj; + } + + public S getArgs() { + return args; + } + + public boolean hasArgs() { + return args != null; + } +} From e4713ea78815c6eb0f1db61b3004d7b287365df4 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Apr 2025 16:31:51 +0900 Subject: [PATCH 470/617] [cp] rename isExit to isPresent --- .../net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java | 6 +++--- .../mcpitanlib/midohra/block/entity/BlockEntityWrapper.java | 6 +++++- .../pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java | 2 +- .../net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java | 6 +++--- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java index b75bc3ad4..fa1618e11 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java @@ -32,17 +32,17 @@ public static BlockWrapper of(CompatIdentifier id) { } public static BlockWrapper of(CompatIdentifier id, CompatIdentifier... ids) { - if (of(id).isExist()) return of(id); + if (of(id).isPresent()) return of(id); for (CompatIdentifier id1 : ids) { - if (of(id1).isExist()) + if (of(id1).isPresent()) return of(id1); } return of(); } - public boolean isExist() { + public boolean isPresent() { return !isEmpty(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityWrapper.java index e2c94d201..5b3ab35a0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityWrapper.java @@ -14,6 +14,10 @@ public class BlockEntityWrapper { public static final BlockEntityWrapper EMPTY = new BlockEntityWrapper(null); + protected BlockEntityWrapper() { + this.blockEntity = null; + } + protected BlockEntityWrapper(net.minecraft.block.entity.BlockEntity blockEntity) { this.blockEntity = blockEntity; } @@ -34,7 +38,7 @@ public BlockPos getPos() { return BlockPos.of(get().getPos()); } - public boolean isExist() { + public boolean isPresent() { return !isEmpty(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java index 8bab1ef4c..2773aaa7a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemGroupWrapper.java @@ -29,7 +29,7 @@ public static ItemGroupWrapper of() { return new ItemGroupWrapper(); } - public boolean isExist() { + public boolean isPresent() { return !isEmpty(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java index 7b648b1ea..c16fc5f0f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/item/ItemWrapper.java @@ -33,17 +33,17 @@ public static ItemWrapper of(CompatIdentifier id) { } public static ItemWrapper of(CompatIdentifier id, CompatIdentifier... ids) { - if (of(id).isExist()) return of(id); + if (of(id).isPresent()) return of(id); for (CompatIdentifier id1 : ids) { - if (of(id1).isExist()) + if (of(id1).isPresent()) return of(id1); } return of(); } - public boolean isExist() { + public boolean isPresent() { return !isEmpty(); } From 52e92c1f4ae97ef2646b079aeb24f40d0b461646 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Apr 2025 17:14:10 +0900 Subject: [PATCH 471/617] [cp] add BlockEntityBuilder --- .../block/entity/BlockEntityTypeWrapper.java | 58 +++++++++++++++ .../RewritableBlockEntityTypeWrapper.java | 32 +++++++++ .../SupplierBlockEntityTypeWrapper.java | 27 +++++++ .../entity/SupplierBlockEntityWrapper.java | 27 +++++++ .../easybuilder/BlockEntityBuilder.java | 72 +++++++++++++++++++ .../easybuilder/built/BuiltBlockEntity.java | 65 +++++++++++++++++ .../easybuilder/share/AbstractShare.java | 24 ------- 7 files changed, 281 insertions(+), 24 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityTypeWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/RewritableBlockEntityTypeWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/SupplierBlockEntityTypeWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/SupplierBlockEntityWrapper.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockEntityBuilder.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockEntity.java delete mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/share/AbstractShare.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityTypeWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityTypeWrapper.java new file mode 100644 index 000000000..0a066a984 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/BlockEntityTypeWrapper.java @@ -0,0 +1,58 @@ +package net.pitan76.mcpitanlib.midohra.block.entity; + +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.BlockView; + +public class BlockEntityTypeWrapper { + private final net.minecraft.block.entity.BlockEntityType type; + + public static final BlockEntityTypeWrapper EMPTY = new BlockEntityTypeWrapper(); + + protected BlockEntityTypeWrapper() { + this.type = null; + } + + protected BlockEntityTypeWrapper(net.minecraft.block.entity.BlockEntityType blockEntity) { + this.type = blockEntity; + } + + public static BlockEntityTypeWrapper of(net.minecraft.block.entity.BlockEntityType blockEntity) { + return new BlockEntityTypeWrapper(blockEntity); + } + + public static BlockEntityTypeWrapper of() { + return EMPTY; + } + + public net.minecraft.block.entity.BlockEntityType get() { + return type; + } + + public boolean isEmpty() { + return get() == null; + } + + public boolean isPresent() { + return get() != null; + } + + public boolean supports(BlockState state) { + return isPresent() && get().supports(state.toMinecraft()); + } + + public BlockEntityWrapper getBlockEntity(BlockView world, BlockPos pos) { + if (isEmpty()) + return BlockEntityWrapper.EMPTY; + + return SupplierBlockEntityWrapper.of(get().get(world.getRaw(), pos.toMinecraft())); + } + + public BlockEntityWrapper createBlockEntity(TileCreateEvent e) { + if (isEmpty()) + return BlockEntityWrapper.EMPTY; + + return SupplierBlockEntityWrapper.of(get().instantiate(e.getBlockPos(), e.getBlockState())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/RewritableBlockEntityTypeWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/RewritableBlockEntityTypeWrapper.java new file mode 100644 index 000000000..c8f5b38cf --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/RewritableBlockEntityTypeWrapper.java @@ -0,0 +1,32 @@ +package net.pitan76.mcpitanlib.midohra.block.entity; + +import net.minecraft.block.entity.BlockEntityType; + +public class RewritableBlockEntityTypeWrapper extends BlockEntityTypeWrapper { + private BlockEntityType type; + + protected RewritableBlockEntityTypeWrapper(BlockEntityType type) { + this.type = type; + } + + protected RewritableBlockEntityTypeWrapper() { + + } + + public static RewritableBlockEntityTypeWrapper of(BlockEntityType type) { + return new RewritableBlockEntityTypeWrapper(type); + } + + public static RewritableBlockEntityTypeWrapper of() { + return new RewritableBlockEntityTypeWrapper(); + } + + public void set(BlockEntityType type) { + this.type = type; + } + + @Override + public BlockEntityType get() { + return type; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/SupplierBlockEntityTypeWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/SupplierBlockEntityTypeWrapper.java new file mode 100644 index 000000000..c0ea96ed4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/SupplierBlockEntityTypeWrapper.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.midohra.block.entity; + +import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; + +import java.util.function.Supplier; + +public class SupplierBlockEntityTypeWrapper extends BlockEntityTypeWrapper { + private final Supplier> supplier; + + protected SupplierBlockEntityTypeWrapper(Supplier> supplier) { + this.supplier = supplier; + } + + public static SupplierBlockEntityTypeWrapper of(Supplier> supplier) { + return new SupplierBlockEntityTypeWrapper(supplier); + } + + public static SupplierBlockEntityTypeWrapper of(RegistryResult> result) { + return new SupplierBlockEntityTypeWrapper(result::get); + } + + @Override + public BlockEntityType get() { + return supplier.get(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/SupplierBlockEntityWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/SupplierBlockEntityWrapper.java new file mode 100644 index 000000000..202a0d31a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/entity/SupplierBlockEntityWrapper.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.midohra.block.entity; + +import net.minecraft.block.entity.BlockEntity; +import net.pitan76.mcpitanlib.api.registry.result.RegistryResult; + +import java.util.function.Supplier; + +public class SupplierBlockEntityWrapper extends BlockEntityWrapper { + private final Supplier supplier; + + protected SupplierBlockEntityWrapper(Supplier supplier) { + this.supplier = supplier; + } + + public static SupplierBlockEntityWrapper of(Supplier supplier) { + return new SupplierBlockEntityWrapper(supplier); + } + + public static SupplierBlockEntityWrapper of(RegistryResult result) { + return new SupplierBlockEntityWrapper(result::get); + } + + @Override + public BlockEntity get() { + return supplier.get(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockEntityBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockEntityBuilder.java new file mode 100644 index 000000000..2405c1dd6 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockEntityBuilder.java @@ -0,0 +1,72 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder; + +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.registry.result.SupplierResult; +import net.pitan76.mcpitanlib.api.registry.v2.CompatRegistryV2; +import net.pitan76.mcpitanlib.api.tile.BlockEntityTypeBuilder; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityTypeWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.RewritableBlockEntityTypeWrapper; +import net.pitan76.mcpitanlib.midohra.easybuilder.built.BuiltBlockEntity; + +import java.util.Arrays; +import java.util.function.BiConsumer; + +public class BlockEntityBuilder { + + public BiConsumer onWriteNbt; + public BiConsumer onReadNbt; + public BiConsumer onInit; + + public CompatIdentifier id; + + public BlockEntityBuilder(CompatIdentifier id) { + this.id = id; + } + + public static BlockEntityBuilder of(CompatIdentifier id) { + return new BlockEntityBuilder(id); + } + + public BlockEntityTypeWrapper build(CompatRegistryV2 registry, CompatIdentifier id, BlockWrapper... blocks) { + RewritableBlockEntityTypeWrapper type = RewritableBlockEntityTypeWrapper.of(); + BlockEntityBuilder builder = this; + + SupplierResult> result = registry.registerBlockEntityType(id, BlockEntityTypeBuilder.create( + e -> new BuiltBlockEntity(type, builder, e), + Arrays.stream(blocks).map(BlockWrapper::get).toArray(Block[]::new) + )); + + type.set(result.get()); + + return type; + } + + public BlockEntityTypeWrapper build(CompatRegistryV2 registry, BlockWrapper... blocks) { + if (id == null) + throw new IllegalStateException("BlockEntity id is not set. hint: use build(CompatRegistryV2, CompatIdentifier, BlockWrapper...)"); + + return build(registry, id, blocks); + } + + public BlockEntityBuilder onInit(BiConsumer onInit) { + this.onInit = onInit; + return this; + } + + public BlockEntityBuilder onWriteNbt(BiConsumer onWriteNbt) { + this.onWriteNbt = onWriteNbt; + return this; + } + + public BlockEntityBuilder onReadNbt(BiConsumer onReadNbt) { + this.onReadNbt = onReadNbt; + return this; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockEntity.java new file mode 100644 index 000000000..4143b69e7 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockEntity.java @@ -0,0 +1,65 @@ +package net.pitan76.mcpitanlib.midohra.easybuilder.built; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.BlockPos; +import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityTypeWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.easybuilder.BlockEntityBuilder; + +import java.util.function.BiConsumer; + +public class BuiltBlockEntity extends CompatBlockEntity { + + public BiConsumer onWriteNbt; + public BiConsumer onReadNbt; + + public BuiltBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + public BuiltBlockEntity(BlockEntityType type, TileCreateEvent e) { + super(type, e); + } + + public BuiltBlockEntity(BlockEntityTypeWrapper type, TileCreateEvent e) { + super(type.get(), e); + } + + public BuiltBlockEntity(BlockEntityTypeWrapper type, BlockEntityBuilder builder, TileCreateEvent e) { + this(type, e); + init(builder); + } + + protected void init(BlockEntityBuilder builder) { + this.onWriteNbt = builder.onWriteNbt; + this.onReadNbt = builder.onReadNbt; + + if (builder.onInit != null) + builder.onInit.accept(_wrap(), builder); + } + + @Override + public void writeNbt(WriteNbtArgs args) { + super.writeNbt(args); + if (onWriteNbt != null) { + onWriteNbt.accept(_wrap(), args); + } + } + + @Override + public void readNbt(ReadNbtArgs args) { + super.readNbt(args); + if (onReadNbt != null) { + onReadNbt.accept(_wrap(), args); + } + } + + public BlockEntityWrapper _wrap() { + return BlockEntityWrapper.of(this); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/share/AbstractShare.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/share/AbstractShare.java deleted file mode 100644 index 9c6d93edf..000000000 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/share/AbstractShare.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.pitan76.mcpitanlib.midohra.easybuilder.share; - -public class AbstractShare { - - public T obj; - public S args; - - public AbstractShare(T object, S args) { - this.obj = object; - this.args = args; - } - - public T getObject() { - return obj; - } - - public S getArgs() { - return args; - } - - public boolean hasArgs() { - return args != null; - } -} From 41552e61f1bb6d59c00128b90f4612414f12e063 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 22 Apr 2025 20:01:18 +0900 Subject: [PATCH 472/617] [cp] add api to block builder --- .../midohra/easybuilder/BlockBuilder.java | 14 ++++++++++++++ .../midohra/easybuilder/built/BuiltBlock.java | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java index fd8a26ddc..ffc16e8c3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -14,6 +14,7 @@ import net.pitan76.mcpitanlib.api.block.v2.BlockSettingsBuilder; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; +import net.pitan76.mcpitanlib.api.event.block.DroppedStacksArgs; import net.pitan76.mcpitanlib.api.event.block.StateReplacedEvent; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.item.v2.CompatibleItemSettings; @@ -31,6 +32,7 @@ import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; import net.pitan76.mcpitanlib.midohra.easybuilder.built.BuiltBlock; +import net.pitan76.mcpitanlib.midohra.item.ItemStack; import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; import org.jetbrains.annotations.Nullable; @@ -52,6 +54,7 @@ public class BlockBuilder { public Function onRenderType; public Function onPlacementState; public Function onStateForNeighborUpdate; + public Function> onDroppedStacks; public BlockBuilder(BlockSettingsBuilder settingsBuilder) { this.settingsBuilder = settingsBuilder; @@ -250,4 +253,15 @@ public BlockBuilder addTooltip(TextComponent text) { this.tooltip.add(text); return this; } + + public BlockBuilder onDroppedStacksRaw(Function> onDroppedStacks) { + this.onDroppedStacks = onDroppedStacks; + return this; + } + + public BlockBuilder onDroppedStacks(Function> onDroppedStacks) { + return onDroppedStacksRaw(e -> onDroppedStacks.apply(e).stream() + .map(ItemStack::toMinecraft) + .toList()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlock.java index 3fca28d2a..c74686013 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlock.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.midohra.easybuilder.built; +import net.minecraft.item.ItemStack; import net.minecraft.util.shape.VoxelShape; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; @@ -11,6 +12,7 @@ import net.pitan76.mcpitanlib.api.block.v2.CompatibleBlockSettings; import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; import net.pitan76.mcpitanlib.api.event.block.BlockUseEvent; +import net.pitan76.mcpitanlib.api.event.block.DroppedStacksArgs; import net.pitan76.mcpitanlib.api.event.block.StateReplacedEvent; import net.pitan76.mcpitanlib.api.event.item.ItemAppendTooltipEvent; import net.pitan76.mcpitanlib.api.util.CompatActionResult; @@ -19,6 +21,7 @@ import net.pitan76.mcpitanlib.midohra.easybuilder.BlockBuilder; import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.function.Consumer; import java.util.function.Function; @@ -33,6 +36,7 @@ public class BuiltBlock extends CompatBlock { protected Function onRenderType; protected Function onPlacementState; protected Function onStateForNeighborUpdate; + protected Function> onDroppedStacks; public BuiltBlock(CompatibleBlockSettings settings) { super(settings); @@ -131,4 +135,12 @@ public BlockState getStateForNeighborUpdate(StateForNeighborUpdateArgs args) { return super.getStateForNeighborUpdate(args); } + + @Override + public List getDroppedStacks(DroppedStacksArgs args) { + if (onDroppedStacks != null) + return onDroppedStacks.apply(args); + + return super.getDroppedStacks(args); + } } From b7bb8f747c6feace319e60a3efb45851ec2a1acf Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 22 Apr 2025 20:08:15 +0900 Subject: [PATCH 473/617] [cp] fix api to block builder --- .../midohra/easybuilder/BlockBuilder.java | 24 +++++- .../midohra/util/shape/VoxelShape.java | 76 +++++++++++++++++++ 2 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java index ffc16e8c3..53625f5f5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -1,7 +1,6 @@ package net.pitan76.mcpitanlib.midohra.easybuilder; import net.minecraft.item.Item; -import net.minecraft.util.shape.VoxelShape; import net.pitan76.mcpitanlib.api.CommonModInitializer; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.CompatibleMaterial; @@ -34,6 +33,7 @@ import net.pitan76.mcpitanlib.midohra.easybuilder.built.BuiltBlock; import net.pitan76.mcpitanlib.midohra.item.ItemStack; import net.pitan76.mcpitanlib.midohra.item.SupplierItemWrapper; +import net.pitan76.mcpitanlib.midohra.util.shape.VoxelShape; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -49,8 +49,8 @@ public class BlockBuilder { public Consumer onAppendProperties; public BlockState defaultState; public BiConsumer onInit; - public Function onOutlineShape; - public Function onCollisionShape; + public Function onOutlineShape; + public Function onCollisionShape; public Function onRenderType; public Function onPlacementState; public Function onStateForNeighborUpdate; @@ -190,11 +190,19 @@ public BlockBuilder onAppendProperties(Consumer onAppendPr } public BlockBuilder onOutlineShape(Function onOutlineShape) { + return onOutlineShapeRaw(e -> onOutlineShape.apply(e).raw()); + } + + public BlockBuilder onCollisionShape(Function onCollisionShape) { + return onCollisionShapeRaw(e -> onCollisionShape.apply(e).raw()); + } + + public BlockBuilder onOutlineShapeRaw(Function onOutlineShape) { this.onOutlineShape = onOutlineShape; return this; } - public BlockBuilder onCollisionShape(Function onCollisionShape) { + public BlockBuilder onCollisionShapeRaw(Function onCollisionShape) { this.onCollisionShape = onCollisionShape; return this; } @@ -222,6 +230,14 @@ public BlockBuilder setCollisionShape(VoxelShape shape) { return onCollisionShape(e -> shape); } + public BlockBuilder setOutlineShape(net.minecraft.util.shape.VoxelShape shape) { + return onOutlineShapeRaw(e -> shape); + } + + public BlockBuilder setCollisionShape(net.minecraft.util.shape.VoxelShape shape) { + return onCollisionShapeRaw(e -> shape); + } + public BlockBuilder setRenderType(CompatBlockRenderType renderType) { return onRenderType(e -> renderType); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java new file mode 100644 index 000000000..a0e536955 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java @@ -0,0 +1,76 @@ +package net.pitan76.mcpitanlib.midohra.util.shape; + +import net.pitan76.mcpitanlib.midohra.util.math.Direction; + +public class VoxelShape { + private final net.minecraft.util.shape.VoxelShape voxelShape; + + public static final VoxelShape EMPTY = of(net.minecraft.util.shape.VoxelShapes.empty()); + public static final VoxelShape FULL_CUBE = of(net.minecraft.util.shape.VoxelShapes.fullCube()); + + public VoxelShape(net.minecraft.util.shape.VoxelShape voxelShape) { + this.voxelShape = voxelShape; + } + + public static VoxelShape of(net.minecraft.util.shape.VoxelShape shape) { + return new VoxelShape(shape); + } + + @Deprecated + public net.minecraft.util.shape.VoxelShape raw() { + return voxelShape; + } + + public boolean isEmpty() { + return raw().isEmpty(); + } + + public VoxelShape union(VoxelShape other) { + return of(net.minecraft.util.shape.VoxelShapes.union(this.raw(), other.raw())); + } + + public VoxelShape asCuboid() { + return of(raw().asCuboid()); + } + + public VoxelShape offset(double x, double y, double z) { + return of(raw().offset(x, y, z)); + } + + public VoxelShape getFace(Direction direction) { + return of(raw().getFace(direction.toMinecraft())); + } + + public VoxelShape simplify() { + return of(raw().simplify()); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof VoxelShape)) return false; + VoxelShape other = (VoxelShape) obj; + return this.raw().equals(other.raw()); + } + + @Override + public int hashCode() { + return raw().hashCode(); + } + + public static VoxelShape empty() { + return EMPTY; + } + + public static VoxelShape fullCube() { + return FULL_CUBE; + } + + public static VoxelShape union(VoxelShape... shapes) { + net.minecraft.util.shape.VoxelShape result = net.minecraft.util.shape.VoxelShapes.empty(); + for (VoxelShape shape : shapes) { + result = net.minecraft.util.shape.VoxelShapes.union(result, shape.raw()); + } + return of(result); + } +} From 1c0915867e5a7e8c99d02d8ae6b17a40b399b12e Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:41:39 +0900 Subject: [PATCH 474/617] [cp] fix #33 --- fabric/build.gradle | 3 ++- forge/build.gradle | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index e8af491ff..e39189e5f 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -29,7 +29,6 @@ dependencies { shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } shadowCommon 'org.yaml:snakeyaml:2.0' - include 'org.yaml:snakeyaml:2.0' modApi("me.shedaniel.cloth:cloth-config-fabric:${rootProject.cloth_config_version}") { exclude(group: "net.fabricmc.fabric-api") @@ -48,6 +47,8 @@ processResources { } shadowJar { + relocate "org.yaml.snakeyaml", "net.pitan76.mcpitanlib.shadow.yaml.snakeyaml" + exclude "architectury.common.json" configurations = [project.configurations.shadowCommon] diff --git a/forge/build.gradle b/forge/build.gradle index aa3e3fc81..abe093c85 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -35,7 +35,6 @@ dependencies { shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } shadowCommon 'org.yaml:snakeyaml:2.0' - compileOnly 'org.yaml:snakeyaml:2.0' modApi("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") { exclude(group: "net.fabricmc.fabric-api") @@ -54,6 +53,8 @@ processResources { } shadowJar { + relocate "org.yaml.snakeyaml", "net.pitan76.mcpitanlib.shadow.yaml.snakeyaml" + exclude "fabric.mod.json" configurations = [project.configurations.shadowCommon] From b7f894a9b4c8f73b203226a5b91b474f4fd7829a Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 22 Apr 2025 23:02:55 +0900 Subject: [PATCH 475/617] [cp] ascuboid --- .../net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java index a0e536955..677e504c4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/shape/VoxelShape.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.midohra.util.shape; +import net.minecraft.util.shape.VoxelShapes; import net.pitan76.mcpitanlib.midohra.util.math.Direction; public class VoxelShape { @@ -30,7 +31,7 @@ public VoxelShape union(VoxelShape other) { } public VoxelShape asCuboid() { - return of(raw().asCuboid()); + return of(VoxelShapes.cuboid(raw().getBoundingBox())); } public VoxelShape offset(double x, double y, double z) { From 8cdc976725d0b163a0de9ee2555ffbac42ec8e8f Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 23 Apr 2025 22:37:17 +0900 Subject: [PATCH 476/617] [cp] add isEmpty() in SimpleInventoryUtil --- .../net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java index 1d6cbc6f7..b9ffb899c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/SimpleInventoryUtil.java @@ -32,4 +32,8 @@ public static void clear(SimpleInventory inventory) { public static int size(SimpleInventory inventory) { return inventory.size(); } + + public static boolean isEmpty(SimpleInventory inventory) { + return inventory.isEmpty(); + } } From c4a43883a6ab3e7fbcfaa202d4e110d68644dd92 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 26 Apr 2025 22:24:31 +0900 Subject: [PATCH 477/617] [cp] change info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 14a572f2f..bf021eaf4 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.4 +mod_version=3.2.5 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From dac7aa66fb08a0c29da1661aad926db114f456ab Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 27 Apr 2025 16:45:33 +0900 Subject: [PATCH 478/617] [cp] Add CompatWaterloggable --- .../api/block/CompatWaterloggable.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatWaterloggable.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatWaterloggable.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatWaterloggable.java new file mode 100644 index 000000000..0402b719d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/CompatWaterloggable.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.block; + +import net.minecraft.block.Waterloggable; +import net.minecraft.sound.SoundEvent; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; + +import java.util.Optional; + +public interface CompatWaterloggable extends Waterloggable { + + @Override + default Optional getBucketFillSound() { + return getCompactBucketFillSound() + .map(CompatSoundEvent::get); + } + + default Optional getCompactBucketFillSound() { + return Waterloggable.super.getBucketFillSound() + .map(CompatSoundEvent::of); + } +} From 2494b4e151d8caa088c259a1ee3a71bf92b48a8d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 27 Apr 2025 16:47:43 +0900 Subject: [PATCH 479/617] [cp] add isClient() to StateForNeighborUpdateArgs --- .../api/block/args/v2/StateForNeighborUpdateArgs.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/StateForNeighborUpdateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/StateForNeighborUpdateArgs.java index 5c39c24b7..c6d7a6845 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/StateForNeighborUpdateArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/StateForNeighborUpdateArgs.java @@ -90,4 +90,8 @@ public BlockEntityWrapper getBlockEntity() { public BlockEntity getRawBlockEntity() { return world.getBlockEntity(pos); } + + public boolean isClient() { + return world.isClient(); + } } From 079fbb3bffa29a6ce09b356670232d314ea0d651 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 28 Apr 2025 22:10:36 +0900 Subject: [PATCH 480/617] [cp] add apis to easybuilder --- .../api/block/v2/BlockSettingsBuilder.java | 52 ++++++++++++++++++- .../api/item/v2/ItemSettingsBuilder.java | 28 ++++++++++ .../midohra/easybuilder/BlockBuilder.java | 25 +++++++++ .../easybuilder/BlockEntityBuilder.java | 16 ++++++ .../BlockWithBlockEntityBuilder.java | 16 ++++++ .../midohra/easybuilder/ItemBuilder.java | 20 +++++++ 6 files changed, 156 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java index dffeee616..95b2afca6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/BlockSettingsBuilder.java @@ -7,6 +7,7 @@ import net.pitan76.mcpitanlib.api.util.color.CompatDyeColor; import net.pitan76.mcpitanlib.api.util.color.CompatMapColor; import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import java.util.function.ToIntFunction; @@ -23,6 +24,8 @@ public class BlockSettingsBuilder { public boolean dropsNothing; public ToIntFunction luminance; + protected BlockWrapper copyFromBlock = null; + public BlockSettingsBuilder(CompatIdentifier id) { this.id = id; } @@ -91,8 +94,14 @@ public AbstractBlock.Settings _build() { } public CompatibleBlockSettings build(CompatIdentifier id) { + CompatibleBlockSettings settings; + + if (copyFromBlock != null) { + settings = CompatibleBlockSettings.copy(id, copyFromBlock.get()); + } else { + settings = CompatibleBlockSettings.of(id); + } - CompatibleBlockSettings settings = CompatibleBlockSettings.of(id); if (material != null) settings = CompatibleBlockSettings.of(id, material); @@ -117,4 +126,45 @@ public CompatibleBlockSettings build(CompatIdentifier id) { public AbstractBlock.Settings _build(CompatIdentifier id) { return build(id).build(); } + + public BlockSettingsBuilder copy(CompatIdentifier id) { + BlockSettingsBuilder builder = new BlockSettingsBuilder(); + + builder.copyFromBlock = this.copyFromBlock; + + builder.id = id; + builder.hardness = this.hardness; + builder.resistance = this.resistance; + builder.blockSoundGroup = this.blockSoundGroup; + builder.material = this.material; + builder.mapColor = this.mapColor; + builder.dyeColor = this.dyeColor; + builder.requiresTool = this.requiresTool; + builder.dropsNothing = this.dropsNothing; + builder.luminance = this.luminance; + return builder; + } + + public BlockSettingsBuilder copy() { + return copy(this.id); + } + + public static BlockSettingsBuilder of(CompatIdentifier id) { + return new BlockSettingsBuilder(id); + } + + public static BlockSettingsBuilder of() { + return new BlockSettingsBuilder(); + } + + public static BlockSettingsBuilder copyBlock(BlockWrapper block) { + BlockSettingsBuilder builder = new BlockSettingsBuilder(block.getId()); + builder.copyFromBlock = block; + + return builder; + } + + public static BlockSettingsBuilder copyBlock(CompatIdentifier id) { + return copyBlock(BlockWrapper.of(id)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java index 6100b0839..a980204e6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/ItemSettingsBuilder.java @@ -122,4 +122,32 @@ public CompatibleItemSettings build(CompatIdentifier id) { public ExtendSettings _build(CompatIdentifier id) { return build(id).build(); } + + public ItemSettingsBuilder copy(CompatIdentifier id) { + ItemSettingsBuilder builder = new ItemSettingsBuilder(); + builder.id = id; + builder.maxCount = this.maxCount; + builder.maxDamage = this.maxDamage; + builder.maxDamageIfAbsent = this.maxDamageIfAbsent; + builder.enchantability = this.enchantability; + builder.repairIngredientTag = this.repairIngredientTag; + builder.foodComponent = this.foodComponent; + builder.rarity = this.rarity; + builder.recipeRemainder = this.recipeRemainder; + builder.itemGroupWrapper = this.itemGroupWrapper; + builder.itemGroupBuilder = this.itemGroupBuilder; + return builder; + } + + public ItemSettingsBuilder copy() { + return copy(this.id); + } + + public static ItemSettingsBuilder of(CompatIdentifier id) { + return new ItemSettingsBuilder(id); + } + + public static ItemSettingsBuilder of() { + return new ItemSettingsBuilder(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java index 53625f5f5..587531855 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockBuilder.java @@ -280,4 +280,29 @@ public BlockBuilder onDroppedStacks(Function> .map(ItemStack::toMinecraft) .toList()); } + + public BlockBuilder write(BlockBuilder copy) { + copy.onRightClick = onRightClick; + copy.onStateReplaced = onStateReplaced; + copy.onAppendTooltip = onAppendTooltip; + copy.onAppendProperties = onAppendProperties; + copy.defaultState = defaultState; + copy.onInit = onInit; + copy.onOutlineShape = onOutlineShape; + copy.onCollisionShape = onCollisionShape; + copy.onRenderType = onRenderType; + copy.onPlacementState = onPlacementState; + copy.onStateForNeighborUpdate = onStateForNeighborUpdate; + copy.onDroppedStacks = onDroppedStacks; + + return copy; + } + + public BlockBuilder copy(BlockSettingsBuilder settingsBuilder) { + return write(new BlockBuilder(settingsBuilder)); + } + + public BlockBuilder copy() { + return copy(this.settingsBuilder.copy()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockEntityBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockEntityBuilder.java index 2405c1dd6..b85331534 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockEntityBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockEntityBuilder.java @@ -69,4 +69,20 @@ public BlockEntityBuilder onReadNbt(BiConsumer this.onReadNbt = onReadNbt; return this; } + + public BlockEntityBuilder write(BlockEntityBuilder copy) { + copy.onInit = this.onInit; + copy.onWriteNbt = this.onWriteNbt; + copy.onReadNbt = this.onReadNbt; + + return copy; + } + + public BlockEntityBuilder copy(CompatIdentifier id) { + return write(new BlockEntityBuilder(id)); + } + + public BlockEntityBuilder copy() { + return copy(this.id); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java index 839bbda1f..434cc295c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java @@ -83,4 +83,20 @@ public BlockBuilder applyBlockEntity(BlockEntityType blockEntityType) { public BlockBuilder applyBlockEntity(CompatIdentifier id) { return applyBlockEntity(BlockEntityTypeUtil.fromId(id)); } + + public BlockWithBlockEntityBuilder write(BlockWithBlockEntityBuilder copy) { + copy.settingsBuilder = this.settingsBuilder; + copy.blockEntityType = this.blockEntityType; + super.write(copy); + + return copy; + } + + public BlockWithBlockEntityBuilder copy(BlockSettingsBuilder settingsBuilder) { + return write(new BlockWithBlockEntityBuilder(settingsBuilder)); + } + + public BlockWithBlockEntityBuilder copy() { + return copy(this.settingsBuilder.copy()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java index e435ae37e..14c4b6a1b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/ItemBuilder.java @@ -175,4 +175,24 @@ public ItemBuilder addTooltip(TextComponent text) { this.tooltip.add(text); return this; } + + public ItemBuilder write(ItemBuilder copy) { + copy.settingsBuilder = this.settingsBuilder; + copy.onRightClick = this.onRightClick; + copy.onRightClickOnBlock = this.onRightClickOnBlock; + copy.onRightClickOnEntity = this.onRightClickOnEntity; + copy.onAppendTooltip = this.onAppendTooltip; + copy.onItemBarColor = this.onItemBarColor; + copy.onItemBarStep = this.onItemBarStep; + + return copy; + } + + public ItemBuilder copy(ItemSettingsBuilder builder) { + return write(new ItemBuilder(builder)); + } + + public ItemBuilder copy() { + return copy(this.settingsBuilder.copy()); + } } From 51b74ec35dd49556f3fca3ba98d9934064bcc408 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 8 May 2025 11:38:35 +0900 Subject: [PATCH 481/617] [cp] add lang api --- .../api/util/client/LanguageUtil.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java new file mode 100644 index 000000000..89ce635d4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java @@ -0,0 +1,47 @@ +package net.pitan76.mcpitanlib.api.util.client; + +import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.resource.language.LanguageManager; +import net.pitan76.mcpitanlib.midohra.resource.ResourceManager; + +public class LanguageUtil { + public static boolean hasTranslation(String key) { + return I18n.hasTranslation(key); + } + + public static String translate(String key) { + return I18n.translate(key); + } + + public static String translate(String key, Object... args) { + return I18n.translate(key, args); + } + + public static String translateWithFallback(String key, String fallback) { + return I18n.hasTranslation(key) ? I18n.translate(key) : fallback; + } + + public static String translateWithFallback(String key, String fallback, Object... args) { + return I18n.hasTranslation(key) ? I18n.translate(key, args) : fallback; + } + + public static LanguageManager getLanguageManager() { + return ClientUtil.getClient().getLanguageManager(); + } + + public static String getLanguage() { + return getLanguageManager().getLanguage(); + } + + public static void setLanguage(String language) { + getLanguageManager().setLanguage(language); + } + + public static void reload(net.minecraft.resource.ResourceManager resourceManager) { + getLanguageManager().reload(resourceManager); + } + + public static void reload(ResourceManager resourceManager) { + reload(resourceManager.getRaw()); + } +} From 228543093622c2a3409978045b57c8e5cdeeac1d Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 23 May 2025 22:02:34 +0900 Subject: [PATCH 482/617] [cp] add apis rendering v2 --- .../entity/CompatBlockEntityRenderer.java | 19 +++++++++++++++++++ .../entity/event/BlockEntityRenderEvent.java | 10 ++++++++++ .../api/util/client/MatrixStackUtil.java | 4 ++++ 3 files changed, 33 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java index bdb78967b..22589bd1c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java @@ -15,4 +15,23 @@ default void render(T entity, float tickDelta, MatrixStack matrices, VertexConsu render(new BlockEntityRenderEvent<>(entity, tickDelta, matrices, vertexConsumers, light, overlay)); } + default boolean rendersOutsideBoundingBoxOverride(T blockEntity) { + return BlockEntityRenderer.super.rendersOutsideBoundingBox(blockEntity); + } + + default int getRenderDistanceOverride() { + return BlockEntityRenderer.super.getRenderDistance(); + } + + @Deprecated + @Override + default boolean rendersOutsideBoundingBox(T blockEntity) { + return rendersOutsideBoundingBoxOverride(blockEntity); + } + + @Deprecated + @Override + default int getRenderDistance() { + return getRenderDistanceOverride(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java index 5d7536490..bec1bce85 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java @@ -5,6 +5,8 @@ import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; +import net.pitan76.mcpitanlib.api.client.render.CompatRenderLayer; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; import net.pitan76.mcpitanlib.api.util.MathUtil; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; @@ -51,6 +53,10 @@ public VertexConsumer getVertexConsumer(RenderLayer layer) { return vertexConsumers.getBuffer(layer); } + public VertexConsumer getVertexConsumer(CompatRenderLayer layer) { + return getVertexConsumer(layer.raw()); + } + public VertexConsumerProvider getVertexConsumers() { return vertexConsumers; } @@ -82,4 +88,8 @@ public ItemRenderer getItemRenderer() { public boolean isRemoved() { return blockEntity.isRemoved(); } + + public DrawObjectMV getDrawObject(CompatRenderLayer layer) { + return new DrawObjectMV(getMatrices(), getVertexConsumer(layer)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java index cb3c46d85..52a5d0a56 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/MatrixStackUtil.java @@ -25,4 +25,8 @@ public static void translate(MatrixStack matrices, double x, double y, double z) public static void scale(MatrixStack matrices, float x, float y, float z) { matrices.scale(x, y, z); } + + public static MatrixStack.Entry peek(MatrixStack matrices) { + return matrices.peek(); + } } From ef7108bd43f0ee6c328f506993143b41b13280c3 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Fri, 23 May 2025 22:05:55 +0900 Subject: [PATCH 483/617] [cp] add apis rendering --- .../api/client/render/CompatRenderLayer.java | 47 +++++++++++ .../api/client/render/DrawObjectMV.java | 63 ++++++++++++++ .../client/render/VertexConsumerUtil.java | 83 +++++++++++++++++++ .../client/render/VertexRenderingUtil.java | 32 +++++++ 4 files changed, 225 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java new file mode 100644 index 000000000..ec9585275 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java @@ -0,0 +1,47 @@ +package net.pitan76.mcpitanlib.api.client.render; + +import net.minecraft.client.render.RenderLayer; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class CompatRenderLayer { + public static final CompatRenderLayer CUTOUT = new CompatRenderLayer(RenderLayer.getCutout()); + public static final CompatRenderLayer CUTOUT_MIPPED = new CompatRenderLayer(RenderLayer.getCutoutMipped()); + public static final CompatRenderLayer TRANSLUCENT = new CompatRenderLayer(RenderLayer.getTranslucent()); + public static final CompatRenderLayer TRANSLUCENT_MOVING_BLOCK = new CompatRenderLayer(RenderLayer.getTranslucentMovingBlock()); + public static final CompatRenderLayer SOLID = new CompatRenderLayer(RenderLayer.getSolid()); + public static final CompatRenderLayer LINES = new CompatRenderLayer(RenderLayer.getLines()); + public static final CompatRenderLayer LINE_STRIP = new CompatRenderLayer(RenderLayer.getLineStrip()); + public static final CompatRenderLayer GLINT = new CompatRenderLayer(RenderLayer.getGlint()); + public static final CompatRenderLayer DEBUG_FILLED_BOX = new CompatRenderLayer(RenderLayer.getDebugFilledBox()); + public static final CompatRenderLayer DEBUG_QUADS = new CompatRenderLayer(RenderLayer.getDebugQuads()); + + public final RenderLayer layer; + + public CompatRenderLayer(RenderLayer layer) { + this.layer = layer; + } + + public RenderLayer raw() { + return layer; + } + + public static CompatRenderLayer getEntityCutout(CompatIdentifier id) { + return new CompatRenderLayer(RenderLayer.getEntityCutout(id.toMinecraft())); + } + + public static CompatRenderLayer getEntityCutoutNoCull(CompatIdentifier id) { + return new CompatRenderLayer(RenderLayer.getEntityCutoutNoCull(id.toMinecraft())); + } + + public static CompatRenderLayer getEntityTranslucent(CompatIdentifier id) { + return new CompatRenderLayer(RenderLayer.getEntityTranslucent(id.toMinecraft())); + } + + public static CompatRenderLayer getArmorCutoutNoCull(CompatIdentifier id) { + return new CompatRenderLayer(RenderLayer.getArmorCutoutNoCull(id.toMinecraft())); + } + + public static CompatRenderLayer getCrosshair(CompatIdentifier id) { + return new CompatRenderLayer(RenderLayer.getCrosshair(id.toMinecraft())); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java new file mode 100644 index 000000000..8a9540182 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java @@ -0,0 +1,63 @@ +package net.pitan76.mcpitanlib.api.client.render; + +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.util.math.MatrixStack; +import net.pitan76.mcpitanlib.api.util.client.render.VertexConsumerUtil; + +public class DrawObjectMV { + private final MatrixStack stack; + private final VertexConsumer buffer; + + public DrawObjectMV(MatrixStack stack, VertexConsumer buffer) { + this.stack = stack; + this.buffer = buffer; + } + + public DrawObjectMV(MatrixStack stack) { + this(stack, null); + } + + public DrawObjectMV(VertexConsumer buffer) { + this(null, buffer); + } + + public MatrixStack getStack() { + return stack; + } + + public VertexConsumer getBuffer() { + return buffer; + } + + public DrawObjectMV vertex(float x, float y, float z) { + return VertexConsumerUtil.vertex(this, x, y, z); + } + + public DrawObjectMV normal(float x, float y, float z) { + return VertexConsumerUtil.normal(this, x, y, z); + } + + public DrawObjectMV color(float red, float green, float blue, float alpha) { + return VertexConsumerUtil.color(this, red, green, blue, alpha); + } + + public DrawObjectMV color(int red, int green, int blue, int alpha) { + return VertexConsumerUtil.color(this, red, green, blue, alpha); + } + + public DrawObjectMV colorARGB(int argb) { + return VertexConsumerUtil.colorARGB(this, argb); + } + + public DrawObjectMV colorRGB(int rgb) { + return VertexConsumerUtil.colorRGB(this, rgb); + } + + public DrawObjectMV light(int light) { + return VertexConsumerUtil.light(this, light); + } + + public DrawObjectMV overlay(int overlay) { + return VertexConsumerUtil.overlay(this, overlay); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java new file mode 100644 index 000000000..b1248789e --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java @@ -0,0 +1,83 @@ +package net.pitan76.mcpitanlib.api.util.client.render; + +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.util.math.MatrixStack; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; + +public class VertexConsumerUtil { + public static VertexConsumer vertex(VertexConsumer vertexConsumer, float x, float y, float z) { + return vertexConsumer.vertex(x, y, z); + } + + public static VertexConsumer vertex(VertexConsumer vertexConsumer, MatrixStack stack, float x, float y, float z) { + return vertexConsumer.vertex(stack.peek(), x, y, z); + } + + public static VertexConsumer normal(VertexConsumer vertexConsumer, float x, float y, float z) { + return vertexConsumer.normal(x, y, z); + } + + public static VertexConsumer color(VertexConsumer vertexConsumer, float red, float green, float blue, float alpha) { + return vertexConsumer.color(red, green, blue, alpha); + } + + public static VertexConsumer color(VertexConsumer vertexConsumer, int red, int green, int blue, int alpha) { + return vertexConsumer.color(red, green, blue, alpha); + } + + public static VertexConsumer colorARGB(VertexConsumer vertexConsumer, int argb) { + return vertexConsumer.color(argb); + } + + public static VertexConsumer colorRGB(VertexConsumer vertexConsumer, int rgb) { + return vertexConsumer.colorRgb(rgb); + } + + public static VertexConsumer light(VertexConsumer vertexConsumer, int light) { + return vertexConsumer.light(light); + } + + public static VertexConsumer overlay(VertexConsumer vertexConsumer, int overlay) { + return vertexConsumer.overlay(overlay); + } + + public static DrawObjectMV vertex(DrawObjectMV drawObject, float x, float y, float z) { + vertex(drawObject.getBuffer(), drawObject.getStack(), x, y, z); + return drawObject; + } + + public static DrawObjectMV normal(DrawObjectMV drawObject, float x, float y, float z) { + normal(drawObject.getBuffer(), x, y, z); + return drawObject; + } + + public static DrawObjectMV color(DrawObjectMV drawObject, float red, float green, float blue, float alpha) { + color(drawObject.getBuffer(), red, green, blue, alpha); + return drawObject; + } + + public static DrawObjectMV color(DrawObjectMV drawObject, int red, int green, int blue, int alpha) { + color(drawObject.getBuffer(), red, green, blue, alpha); + return drawObject; + } + + public static DrawObjectMV colorARGB(DrawObjectMV drawObject, int argb) { + colorARGB(drawObject.getBuffer(), argb); + return drawObject; + } + + public static DrawObjectMV colorRGB(DrawObjectMV drawObject, int rgb) { + colorRGB(drawObject.getBuffer(), rgb); + return drawObject; + } + + public static DrawObjectMV light(DrawObjectMV drawObject, int light) { + light(drawObject.getBuffer(), light); + return drawObject; + } + + public static DrawObjectMV overlay(DrawObjectMV drawObject, int overlay) { + overlay(drawObject.getBuffer(), overlay); + return drawObject; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java new file mode 100644 index 000000000..dd2ba2542 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java @@ -0,0 +1,32 @@ +package net.pitan76.mcpitanlib.api.util.client.render; + +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexRendering; +import net.minecraft.client.util.math.MatrixStack; +import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; + +public class VertexRenderingUtil { + public static void drawBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { + VertexRendering.drawBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + } + + public static void drawBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha, float xAxisRed, float yAxisGreen, float zAxisBlue) { + VertexRendering.drawBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha, xAxisRed, yAxisGreen, zAxisBlue); + } + + public static void drawFilledBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { + VertexRendering.drawFilledBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + } + + public static void drawBox(DrawObjectMV drawObject, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { + drawBox(drawObject.getStack(), drawObject.getBuffer(), minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + } + + public static void drawBox(DrawObjectMV drawObject, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha, float xAxisRed, float yAxisGreen, float zAxisBlue) { + drawBox(drawObject.getStack(), drawObject.getBuffer(), minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha, xAxisRed, yAxisGreen, zAxisBlue); + } + + public static void drawFilledBox(DrawObjectMV drawObject, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { + drawFilledBox(drawObject.getStack(), drawObject.getBuffer(), minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + } +} From 7b270f05af47014336ecb8f4e3b173d0c1c3ed69 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 16:22:21 +0900 Subject: [PATCH 484/617] [cp] change VertexRendering calls to WorldRenderer --- .../api/util/client/render/VertexRenderingUtil.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java index dd2ba2542..c7d071534 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java @@ -1,21 +1,21 @@ package net.pitan76.mcpitanlib.api.util.client.render; import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexRendering; +import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.util.math.MatrixStack; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; public class VertexRenderingUtil { public static void drawBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { - VertexRendering.drawBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + WorldRenderer.drawBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); } public static void drawBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha, float xAxisRed, float yAxisGreen, float zAxisBlue) { - VertexRendering.drawBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha, xAxisRed, yAxisGreen, zAxisBlue); + WorldRenderer.drawBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha, xAxisRed, yAxisGreen, zAxisBlue); } public static void drawFilledBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { - VertexRendering.drawFilledBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + WorldRenderer.renderFilledBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); } public static void drawBox(DrawObjectMV drawObject, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { From d6eae2ab9b49c8ceab3e34190cf52aa32378e80c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 16:33:07 +0900 Subject: [PATCH 485/617] [cp] fix VertexConsumerUtil --- .../api/util/client/render/VertexConsumerUtil.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java index b1248789e..42bef2875 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java @@ -10,7 +10,7 @@ public static VertexConsumer vertex(VertexConsumer vertexConsumer, float x, floa } public static VertexConsumer vertex(VertexConsumer vertexConsumer, MatrixStack stack, float x, float y, float z) { - return vertexConsumer.vertex(stack.peek(), x, y, z); + return vertexConsumer.vertex(stack.peek().getPositionMatrix(), x, y, z); } public static VertexConsumer normal(VertexConsumer vertexConsumer, float x, float y, float z) { @@ -30,7 +30,8 @@ public static VertexConsumer colorARGB(VertexConsumer vertexConsumer, int argb) } public static VertexConsumer colorRGB(VertexConsumer vertexConsumer, int rgb) { - return vertexConsumer.colorRgb(rgb); + int argb = (rgb & 0xFF0000) | ((rgb & 0x00FF00) >> 8) | ((rgb & 0x0000FF) << 8) | (rgb & 0xFF000000); + return colorARGB(vertexConsumer, argb); } public static VertexConsumer light(VertexConsumer vertexConsumer, int light) { From b1a7d43cd932fe9cf10d6adffe05f94031237e2e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 16:38:16 +0900 Subject: [PATCH 486/617] [cp] delete render layer --- .../mcpitanlib/api/client/render/CompatRenderLayer.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java index ec9585275..03be9441e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java @@ -12,8 +12,6 @@ public class CompatRenderLayer { public static final CompatRenderLayer LINES = new CompatRenderLayer(RenderLayer.getLines()); public static final CompatRenderLayer LINE_STRIP = new CompatRenderLayer(RenderLayer.getLineStrip()); public static final CompatRenderLayer GLINT = new CompatRenderLayer(RenderLayer.getGlint()); - public static final CompatRenderLayer DEBUG_FILLED_BOX = new CompatRenderLayer(RenderLayer.getDebugFilledBox()); - public static final CompatRenderLayer DEBUG_QUADS = new CompatRenderLayer(RenderLayer.getDebugQuads()); public final RenderLayer layer; @@ -40,8 +38,4 @@ public static CompatRenderLayer getEntityTranslucent(CompatIdentifier id) { public static CompatRenderLayer getArmorCutoutNoCull(CompatIdentifier id) { return new CompatRenderLayer(RenderLayer.getArmorCutoutNoCull(id.toMinecraft())); } - - public static CompatRenderLayer getCrosshair(CompatIdentifier id) { - return new CompatRenderLayer(RenderLayer.getCrosshair(id.toMinecraft())); - } } From 39d2eff4477fb6a54d821e994270b6bb1b4694b5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 16:46:56 +0900 Subject: [PATCH 487/617] [cp] use method_3258 --- .../mcpitanlib/api/util/client/render/VertexRenderingUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java index c7d071534..630b905a4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java @@ -15,7 +15,7 @@ public static void drawBox(MatrixStack matrices, VertexConsumer buffer, double m } public static void drawFilledBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { - WorldRenderer.renderFilledBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + WorldRenderer.method_3258(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); } public static void drawBox(DrawObjectMV drawObject, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { From 18b06b311df3085db0e2b76091507b0615891187 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 16:50:35 +0900 Subject: [PATCH 488/617] [cp] fix LangUtil --- .../net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java index 89ce635d4..daba99b68 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/LanguageUtil.java @@ -30,11 +30,11 @@ public static LanguageManager getLanguageManager() { } public static String getLanguage() { - return getLanguageManager().getLanguage(); + return getLanguageManager().getLanguage().getCode(); } public static void setLanguage(String language) { - getLanguageManager().setLanguage(language); + getLanguageManager().setLanguage(getLanguageManager().getLanguage(language)); } public static void reload(net.minecraft.resource.ResourceManager resourceManager) { From 7653ae65f6229400513802b7aef9ad3d3f505385 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 16:53:02 +0900 Subject: [PATCH 489/617] [cp] drawFilledBox to use WorldRenderer.drawBox --- .../mcpitanlib/api/util/client/render/VertexRenderingUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java index 630b905a4..f34bb6d11 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java @@ -14,8 +14,9 @@ public static void drawBox(MatrixStack matrices, VertexConsumer buffer, double m WorldRenderer.drawBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha, xAxisRed, yAxisGreen, zAxisBlue); } + // TODO: fix public static void drawFilledBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { - WorldRenderer.method_3258(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + WorldRenderer.drawBox(matrices, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); } public static void drawBox(DrawObjectMV drawObject, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { From bef27aa270ac8c0ea632e861234838bd969224a1 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 17:04:28 +0900 Subject: [PATCH 490/617] [cp] info --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index bf021eaf4..935597ba3 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.5 +mod_version=3.2.6 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 49d6ef016a7656d865bf83259f1e62cc2dfd1ebb Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 17:50:37 +0900 Subject: [PATCH 491/617] [cp] add null checks in ItemStack creation methods --- .../java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java index 086d06099..2bfbc2a4e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ItemStackUtil.java @@ -136,22 +136,27 @@ public static ItemStack empty() { } public static ItemStack create(Item item) { + if (item == null) return empty(); return new ItemStack(item); } public static ItemStack create(Item item, int count) { + if (item == null) return empty(); return new ItemStack(item, count); } public static ItemStack create(ItemConvertible item) { + if (item == null) return empty(); return new ItemStack(item); } public static ItemStack create(ItemConvertible item, int count) { + if (item == null) return empty(); return new ItemStack(item, count); } public static boolean isEmpty(ItemStack stack) { + if (stack == null) return true; return stack.isEmpty(); } From aba44b2bd9995f4f21917a42db6e1882b30732e1 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 24 May 2025 17:51:02 +0900 Subject: [PATCH 492/617] [cp] bump mod version to 3.2.7 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 935597ba3..6dd81eed0 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.6 +mod_version=3.2.7 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From c47e3eb9a650e8a5c6be3ddbe05a020910bf878b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 1 Jun 2025 17:54:05 +0900 Subject: [PATCH 493/617] [cp] fix CompatInventory --- .../mcpitanlib/api/util/inventory/CompatInventory.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java index 39340c49b..160b5ac6e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java @@ -40,6 +40,10 @@ public final ItemStack superRemoveStack(int slot, int amount) { @Override public ItemStack removeStack(int slot, int amount) { + return callRemoveStack(slot, amount); + } + + public ItemStack callRemoveStack(int slot, int amount) { return super.removeStack(slot, amount); } From f53ab247c692b92481c380a7f31695b18ad9692f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 1 Jun 2025 21:05:38 +0900 Subject: [PATCH 494/617] [cp] dump version 3.2.8 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 6dd81eed0..69e0b33d7 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.7 +mod_version=3.2.8 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 536fa6d1ccd25eaa632d8f512310c49943617e12 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 7 Jun 2025 14:13:44 +0900 Subject: [PATCH 495/617] [cp] add GameOptionsWrapper --- .../api/client/option/GameOptionsWrapper.java | 19 +++++++++++++++++++ .../api/util/client/ClientUtil.java | 13 +++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/option/GameOptionsWrapper.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/GameOptionsWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/GameOptionsWrapper.java new file mode 100644 index 000000000..3bdfa6bfe --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/GameOptionsWrapper.java @@ -0,0 +1,19 @@ +package net.pitan76.mcpitanlib.api.client.option; + +import net.minecraft.client.option.GameOptions; + +public class GameOptionsWrapper { + public final GameOptions raw; + + public GameOptionsWrapper(GameOptions options) { + this.raw = options; + } + + public GameOptions getRaw() { + return raw; + } + + public void write() { + raw.write(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java index fbe70af06..db00498ac 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/ClientUtil.java @@ -15,6 +15,7 @@ import net.minecraft.resource.ResourceManager; import net.minecraft.util.hit.HitResult; import net.minecraft.util.profiler.Profiler; +import net.pitan76.mcpitanlib.api.client.option.GameOptionsWrapper; import net.pitan76.mcpitanlib.api.entity.Player; import java.io.File; @@ -102,4 +103,16 @@ public static Window getWindow() { public static Mouse getMouse() { return getClient().mouse; } + + public static boolean isInSingleplayer() { + return getClient().isInSingleplayer(); + } + + public static boolean isPaused() { + return getClient().isPaused(); + } + + public static GameOptionsWrapper getOptions() { + return new GameOptionsWrapper(getClient().options); + } } From f3a6bfe5b7826374d2d576978f42384b3cfc24c8 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 00:24:58 +0900 Subject: [PATCH 496/617] [cp] add Midohra method --- .../net/pitan76/mcpitanlib/api/entity/Player.java | 4 ++++ .../api/network/v2/args/ServerReceiveEvent.java | 14 ++++++++++++++ .../pitan76/mcpitanlib/api/util/ServerUtil.java | 4 ++++ .../mcpitanlib/midohra/server/MCServer.java | 4 ++++ 4 files changed, 26 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index f0f3b8ca1..47fc394fe 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -500,4 +500,8 @@ public float getBlockBreakingSpeed(BlockState state) { public boolean canHarvest(BlockState state) { return getEntity().canHarvest(state); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(getWorld()); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java index b1afedc0d..bcf0e7a27 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java @@ -3,7 +3,9 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.midohra.server.MCServer; public class ServerReceiveEvent { public MinecraftServer server; @@ -33,4 +35,16 @@ public MinecraftServer getServer() { public PacketByteBuf getBuf() { return buf; } + + public World world () { + return getPlayer().getWorld(); + } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world()); + } + + public MCServer getMidohraServer() { + return MCServer.of(server); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java index 84db97e6d..6718b610d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/ServerUtil.java @@ -57,4 +57,8 @@ public static PlayerManager getPlayerManager(MinecraftServer server) { public static MinecraftServer getServer(Player player) { return getServer(player.getWorld()); } + + public static void execute(MinecraftServer server, Runnable runnable) { + server.execute(runnable); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java index d6f30f6b5..997dafb98 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/server/MCServer.java @@ -89,4 +89,8 @@ public ServerWorld getEnd() { public ResourceManager getResourceManager() { return ResourceManager.of(server.getResourceManager()); } + + public void execute(Runnable runnable) { + ServerUtil.execute(getRaw(), runnable); + } } From 28db0878eaa1502d9f908faad2b58d3f17ff4aeb Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 00:45:41 +0900 Subject: [PATCH 497/617] [cp] add apis --- .../api/client/render/DrawObjectMV.java | 117 ++++++++++++++++++ .../entity/event/BlockEntityRenderEvent.java | 19 +++ .../pitan76/mcpitanlib/api/entity/Player.java | 4 + .../client/render/VertexConsumerUtil.java | 18 +++ 4 files changed, 158 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java index 8a9540182..810d9ef4c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java @@ -3,6 +3,8 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import net.pitan76.mcpitanlib.api.util.client.render.VertexConsumerUtil; +import org.joml.Matrix3f; +import org.joml.Matrix4f; public class DrawObjectMV { private final MatrixStack stack; @@ -60,4 +62,119 @@ public DrawObjectMV light(int light) { public DrawObjectMV overlay(int overlay) { return VertexConsumerUtil.overlay(this, overlay); } + + public Matrix4f matrix4f; + public Matrix3f matrix3f; + + public Matrix4f getMatrix4f() { + if (matrix4f == null) + matrix4f = stack.peek().getPositionMatrix(); + + return matrix4f; + } + + public Matrix3f getMatrix3f() { + if (matrix3f == null) + matrix3f = stack.peek().getNormalMatrix(); + + return matrix3f; + } + + DrawObjectMV vertexWithMatrix4f(float x, float y, float z) { + VertexConsumerUtil.vertex(buffer, getMatrix4f(), x, y, z); + return this; + } + + DrawObjectMV vertexWithMatrix(float x, float y, float z) { + VertexConsumerUtil.vertex(buffer, stack, x, y, z); + return this; + } + + DrawObjectMV normalWithMatrix(float x, float y, float z) { + VertexConsumerUtil.normal(buffer, stack, x, y, z); + return this; + } + + DrawObjectMV texture(float u, float v) { + VertexConsumerUtil.texture(buffer, u, v); + return this; + } + + DrawObjectMV next() { + VertexConsumerUtil.next(buffer); + return this; + } + + private void renderQuad(float x1, float y1, float z1, float x2, float y2, float z2, + float normalX, float normalY, float normalZ, int r, int g, int b) { + + if (Math.abs(normalY) > 0.5f) { + float y = y1; + + if (normalY > 0) { + vertexWithMatrix4f(x1, y, z1).color(r, g, b, 255).texture(0, 0) + .light(15728880).normalWithMatrix(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x1, y, z2).color(r, g, b, 255).texture(0, 0) + .light(15728880).normalWithMatrix(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x2, y, z2).color(r, g, b, 255).texture(0, 0) + .light(15728880).normalWithMatrix(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x2, y, z1).color(r, g, b, 255).texture(0, 0) + .light(15728880).normalWithMatrix(normalX, normalY, normalZ).next(); + } else { + vertexWithMatrix4f(x1, y, z1).color(r, g, b, 255).texture(0, 0) + .light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x2, y, z1).color(r, g, b, 255).texture(0, 0) + .light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x2, y, z2).color(r, g, b, 255).texture(0, 0) + .light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x1, y, z2).color(r, g, b, 255).texture(0, 0) + .light(15728880).normal(normalX, normalY, normalZ).next(); + } + + } else if (Math.abs(normalZ) > 0.5f) { + float z = z1; + + if (normalZ > 0) { + // TODO: Fix + vertexWithMatrix4f(x1, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x1, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x2, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + + vertexWithMatrix4f(x2, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x1, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x2, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + + } else { + vertexWithMatrix4f(x1, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x2, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x1, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + + vertexWithMatrix4f(x2, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x2, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x1, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + } + + } else if (Math.abs(normalX) > 0.5f) { + float x = x1; + + if (normalX > 0) { + vertexWithMatrix4f(x, y1, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x, y2, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x, y1, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + + vertexWithMatrix4f(x, y1, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x, y2, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x, y2, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + + } else { + vertexWithMatrix4f(x, y1, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x, y1, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x, y2, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + + vertexWithMatrix4f(x, y1, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x, y2, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + vertexWithMatrix4f(x, y2, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); + } + } + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java index bec1bce85..d21a4d34b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java @@ -11,6 +11,8 @@ import net.pitan76.mcpitanlib.api.util.MathUtil; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import net.pitan76.mcpitanlib.api.util.client.MatrixStackUtil; +import org.joml.Matrix3f; +import org.joml.Matrix4f; public class BlockEntityRenderEvent { public T blockEntity; @@ -92,4 +94,21 @@ public boolean isRemoved() { public DrawObjectMV getDrawObject(CompatRenderLayer layer) { return new DrawObjectMV(getMatrices(), getVertexConsumer(layer)); } + + public Matrix4f matrix4f; + public Matrix3f matrix3f; + + public Matrix4f getMatrix4f() { + if (matrix4f == null) + matrix4f = matrices.peek().getPositionMatrix(); + + return matrix4f; + } + + public Matrix3f getMatrix3f() { + if (matrix3f == null) + matrix3f = matrices.peek().getNormalMatrix(); + + return matrix3f; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 47fc394fe..bbdaccb58 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -504,4 +504,8 @@ public boolean canHarvest(BlockState state) { public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { return net.pitan76.mcpitanlib.midohra.world.World.of(getWorld()); } + + public void eatFood(ItemStack stack, CompatFoodComponent foodComponent) { + getEntity().getHungerManager().eat(foodComponent.build()); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java index 42bef2875..f263f6371 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java @@ -3,6 +3,8 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; +import org.joml.Matrix3f; +import org.joml.Matrix4f; public class VertexConsumerUtil { public static VertexConsumer vertex(VertexConsumer vertexConsumer, float x, float y, float z) { @@ -81,4 +83,20 @@ public static DrawObjectMV overlay(DrawObjectMV drawObject, int overlay) { overlay(drawObject.getBuffer(), overlay); return drawObject; } + + public static VertexConsumer texture(VertexConsumer vertexConsumer, float u, float v) { + return vertexConsumer.texture(u, v); + } + + public static VertexConsumer vertex(VertexConsumer vertexConsumer, Matrix4f matrix4f, float x, float y, float z) { + return vertexConsumer.vertex(matrix4f, x, y, z); + } + + public static VertexConsumer normal(VertexConsumer vertexConsumer, MatrixStack stack, float x, float y, float z) { + return vertexConsumer.normal(stack.peek(), x, y, z); + } + + public static VertexConsumer next(VertexConsumer vertexConsumer) { + return vertexConsumer; + } } From 9a536243515a61fb29fa2e0d0156f844b0f6b78d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 01:42:43 +0900 Subject: [PATCH 498/617] [cp] refactor: change blockEntityType to Supplier in BlockWithBlockEntityBuilder and related classes --- .../entity/event/BlockEntityRenderEvent.java | 9 +++++++++ .../BlockWithBlockEntityBuilder.java | 19 ++++++++++++------- .../built/BuiltBlockWithEntity.java | 9 +++++++-- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java index d21a4d34b..7b0a172e0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java @@ -5,6 +5,7 @@ import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.BlockPos; import net.pitan76.mcpitanlib.api.client.render.CompatRenderLayer; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; @@ -111,4 +112,12 @@ public Matrix3f getMatrix3f() { return matrix3f; } + + public BlockPos getPos() { + return blockEntity.callGetPos(); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getPos()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java index 434cc295c..16ce75a16 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/BlockWithBlockEntityBuilder.java @@ -14,7 +14,7 @@ public class BlockWithBlockEntityBuilder extends BlockBuilder { - public BlockEntityType blockEntityType; + public Supplier> blockEntityType; public BlockWithBlockEntityBuilder(BlockSettingsBuilder settingsBuilder) { super(settingsBuilder); @@ -24,12 +24,12 @@ public BlockWithBlockEntityBuilder(CompatIdentifier id) { super(id); } - public BlockWithBlockEntityBuilder(BlockSettingsBuilder settingsBuilder, BlockEntityType blockEntityType) { + public BlockWithBlockEntityBuilder(BlockSettingsBuilder settingsBuilder, Supplier> blockEntityType) { super(settingsBuilder); this.blockEntityType = blockEntityType; } - public BlockWithBlockEntityBuilder(CompatIdentifier id, BlockEntityType blockEntityType) { + public BlockWithBlockEntityBuilder(CompatIdentifier id, Supplier> blockEntityType) { super(id); this.blockEntityType = blockEntityType; } @@ -67,20 +67,25 @@ public static BlockWithBlockEntityBuilder of(BlockSettingsBuilder settingsBuilde return new BlockWithBlockEntityBuilder(settingsBuilder); } - public static BlockWithBlockEntityBuilder of(CompatIdentifier id, BlockEntityType blockEntityType) { + public static BlockWithBlockEntityBuilder of(CompatIdentifier id, Supplier> blockEntityType) { return new BlockWithBlockEntityBuilder(id, blockEntityType); } - public static BlockWithBlockEntityBuilder of(BlockSettingsBuilder settingsBuilder, BlockEntityType blockEntityType) { + public static BlockWithBlockEntityBuilder of(BlockSettingsBuilder settingsBuilder, Supplier> blockEntityType) { return new BlockWithBlockEntityBuilder(settingsBuilder, blockEntityType); } - public BlockBuilder applyBlockEntity(BlockEntityType blockEntityType) { + public BlockWithBlockEntityBuilder applyBlockEntity(Supplier> blockEntityType) { this.blockEntityType = blockEntityType; return this; } - public BlockBuilder applyBlockEntity(CompatIdentifier id) { + public BlockWithBlockEntityBuilder applyBlockEntity(BlockEntityType blockEntityType) { + this.blockEntityType = () -> blockEntityType; + return this; + } + + public BlockWithBlockEntityBuilder applyBlockEntity(CompatIdentifier id) { return applyBlockEntity(BlockEntityTypeUtil.fromId(id)); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockWithEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockWithEntity.java index 9a83d588b..6297eb9c0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockWithEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/easybuilder/built/BuiltBlockWithEntity.java @@ -8,9 +8,11 @@ import net.pitan76.mcpitanlib.midohra.easybuilder.BlockWithBlockEntityBuilder; import org.jetbrains.annotations.Nullable; +import java.util.function.Supplier; + public class BuiltBlockWithEntity extends BuiltBlock implements ExtendBlockEntityProvider { - public BlockEntityType blockEntityType; + public Supplier> blockEntityType; public BuiltBlockWithEntity(CompatibleBlockSettings settings) { super(settings); @@ -30,6 +32,9 @@ public BuiltBlockWithEntity(BlockWithBlockEntityBuilder builder, CompatIdentifie @Override public @Nullable BlockEntityType getBlockEntityType() { - return (BlockEntityType) blockEntityType; + if (blockEntityType == null) + return null; + + return (BlockEntityType) blockEntityType.get(); } } From e74d5330e60309e4e744506e70b90cda2d678b49 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 01:44:19 +0900 Subject: [PATCH 499/617] [cp] bump version to 3.2.9 and update copyright years in LICENSE --- LICENSE | 2 +- info.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index 1263235d6..21068a6f0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Pitan +Copyright (c) 2022-2025 Pitan Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/info.properties b/info.properties index 69e0b33d7..4f3136664 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.8 +mod_version=3.2.9 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From b2824b439ac798121d07bfdee08383b313d39de3 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 16:39:18 +0900 Subject: [PATCH 500/617] [cp] feat: add CompatPacketByteBuf and enhance networking methods for compatibility --- .../api/network/v2/ClientNetworking.java | 10 ++ .../api/network/v2/ServerNetworking.java | 42 +++++++ .../network/v2/args/ClientReceiveEvent.java | 14 +++ .../network/v2/args/ServerReceiveEvent.java | 13 +- .../midohra/network/CompatPacketByteBuf.java | 116 ++++++++++++++++++ 5 files changed, 193 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/network/CompatPacketByteBuf.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ClientNetworking.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ClientNetworking.java index 92c660eaf..67fef00ce 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ClientNetworking.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/ClientNetworking.java @@ -1,8 +1,10 @@ package net.pitan76.mcpitanlib.api.network.v2; import net.minecraft.network.PacketByteBuf; +import net.pitan76.mcpitanlib.api.network.PacketByteUtil; import net.pitan76.mcpitanlib.api.network.v2.args.ClientReceiveEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.network.CompatPacketByteBuf; import java.util.function.Consumer; @@ -16,4 +18,12 @@ public static void registerReceiver(CompatIdentifier id, Consumer players, CompatIdentifier id, CompatPacketByteBuf buf) { + send(players, id, buf.getRaw()); + } + + public static void sendAll(MinecraftServer server, CompatIdentifier id, CompatPacketByteBuf buf) { + sendAll(server, id, buf.getRaw()); + } + + public static void sendAll(World world, CompatIdentifier id, CompatPacketByteBuf buf) { + sendAll(world.getServer(), id, buf.getRaw()); + } + + public static void send(ServerPlayerEntity serverPlayerEntity, CompatIdentifier id) { + send(serverPlayerEntity, id, PacketByteUtil.create()); + } + + public static void send(Player player, CompatIdentifier id) { + send(player, id, PacketByteUtil.create()); + } + + public static void send(Iterable players, CompatIdentifier id) { + send(players, id, PacketByteUtil.create()); + } + + public static void sendAll(MinecraftServer server, CompatIdentifier id) { + sendAll(server, id, PacketByteUtil.create()); + } + + public static void sendAll(World world, CompatIdentifier id) { + sendAll(world.getServer(), id, PacketByteUtil.create()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ClientReceiveEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ClientReceiveEvent.java index a2de5923e..568c74d07 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ClientReceiveEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ClientReceiveEvent.java @@ -3,7 +3,9 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.network.PacketByteBuf; +import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.midohra.network.CompatPacketByteBuf; public class ClientReceiveEvent { public MinecraftClient client; @@ -33,4 +35,16 @@ public MinecraftClient getClient() { public PacketByteBuf getBuf() { return buf; } + + public CompatPacketByteBuf getCompatBuf() { + return CompatPacketByteBuf.of(buf); + } + + public World getWorld() { + return getPlayer().getWorld(); + } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(getWorld()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java index bcf0e7a27..3fbe2834e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/network/v2/args/ServerReceiveEvent.java @@ -5,6 +5,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.midohra.network.CompatPacketByteBuf; import net.pitan76.mcpitanlib.midohra.server.MCServer; public class ServerReceiveEvent { @@ -36,15 +37,23 @@ public PacketByteBuf getBuf() { return buf; } - public World world () { + public World getWorld() { return getPlayer().getWorld(); } public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { - return net.pitan76.mcpitanlib.midohra.world.World.of(world()); + return net.pitan76.mcpitanlib.midohra.world.World.of(getWorld()); } public MCServer getMidohraServer() { return MCServer.of(server); } + + public CompatPacketByteBuf getCompatBuf() { + return CompatPacketByteBuf.of(buf); + } + + public void execute(Runnable runnable) { + server.execute(runnable); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/network/CompatPacketByteBuf.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/network/CompatPacketByteBuf.java new file mode 100644 index 000000000..c2c5566fe --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/network/CompatPacketByteBuf.java @@ -0,0 +1,116 @@ +package net.pitan76.mcpitanlib.midohra.network; + +import net.minecraft.network.PacketByteBuf; +import net.pitan76.mcpitanlib.api.network.PacketByteUtil; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; + +public class CompatPacketByteBuf extends PacketByteBuf { + public CompatPacketByteBuf(PacketByteBuf buf) { + super(buf); + } + + public CompatPacketByteBuf() { + super(PacketByteUtil.create()); + } + + public static CompatPacketByteBuf create() { + return new CompatPacketByteBuf(); + } + + public static CompatPacketByteBuf of(PacketByteBuf buf) { + return new CompatPacketByteBuf(buf); + } + + public PacketByteBuf getRaw() { + return this; + } + + public CompatPacketByteBuf writeInt(int value) { + super.writeInt(value); + return this; + } + + public int readInt() { + return super.readInt(); + } + + public CompatPacketByteBuf writeLong(long value) { + super.writeLong(value); + return this; + } + + public long readLong() { + return super.readLong(); + } + + public CompatPacketByteBuf writeBoolean(boolean value) { + super.writeBoolean(value); + return this; + } + + public boolean readBoolean() { + return super.readBoolean(); + } + + public CompatPacketByteBuf writeFloat(float value) { + super.writeFloat(value); + return this; + } + + public float readFloat() { + return super.readFloat(); + } + + public CompatPacketByteBuf writeDouble(double value) { + super.writeDouble(value); + return this; + } + + public double readDouble() { + return super.readDouble(); + } + + public CompatPacketByteBuf writeShort(short value) { + super.writeShort(value); + return this; + } + + public short readShort() { + return super.readShort(); + } + + public CompatPacketByteBuf writeByteArray(byte[] array) { + super.writeByteArray(array); + return this; + } + + public byte[] readByteArray() { + return super.readByteArray(); + } + + public CompatPacketByteBuf writeString(String string) { + super.writeString(string); + return this; + } + + public String readString() { + return super.readString(); + } + + public CompatPacketByteBuf writeBlockPos(net.minecraft.util.math.BlockPos pos) { + super.writeBlockPos(pos); + return this; + } + + public net.minecraft.util.math.BlockPos readBlockPos() { + return super.readBlockPos(); + } + + public CompatPacketByteBuf writeBlockPos(BlockPos pos) { + return writeBlockPos(pos.toMinecraft()); + } + + public BlockPos readBlockPosMidohra() { + return BlockPos.of(readBlockPos()); + } +} From 64e503675b62dd5950585e97c1801fba4d7b1c31 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 17:07:20 +0900 Subject: [PATCH 501/617] [cp] feat: enhance rendering utilities and add WorldRendererUtil for lightmap coordinates --- .../api/client/render/CompatRenderLayer.java | 14 +++ .../api/client/render/DrawObjectMV.java | 79 ++------------ .../client/render/VertexConsumerUtil.java | 102 ++++++++++++++++++ .../client/render/VertexRenderingUtil.java | 10 ++ .../util/client/render/WorldRendererUtil.java | 15 +++ .../midohra/util/math/BlockPos.java | 4 + 6 files changed, 154 insertions(+), 70 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/WorldRendererUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java index 03be9441e..07bab9634 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java @@ -1,5 +1,7 @@ package net.pitan76.mcpitanlib.api.client.render; +import com.mojang.blaze3d.pipeline.RenderPipeline; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.RenderLayer; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; @@ -38,4 +40,16 @@ public static CompatRenderLayer getEntityTranslucent(CompatIdentifier id) { public static CompatRenderLayer getArmorCutoutNoCull(CompatIdentifier id) { return new CompatRenderLayer(RenderLayer.getArmorCutoutNoCull(id.toMinecraft())); } + + public static CompatRenderLayer getEntitySolid(CompatIdentifier id) { + return new CompatRenderLayer(RenderLayer.getEntitySolid(id.toMinecraft())); + } + + public static CompatRenderLayer create(String name, int size, boolean hasCrumbling, boolean translucent, RenderPipeline pipeline, RenderLayer.MultiPhaseParameters params) { + return new CompatRenderLayer(RenderLayer.of(name, size, hasCrumbling, translucent, pipeline, params)); + } + + public void draw(BuiltBuffer buffer) { + layer.draw(buffer); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java index 810d9ef4c..c27273748 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.client.render; +import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import net.pitan76.mcpitanlib.api.util.client.render.VertexConsumerUtil; @@ -63,6 +64,10 @@ public DrawObjectMV overlay(int overlay) { return VertexConsumerUtil.overlay(this, overlay); } + public DrawObjectMV overlayDefaultUV() { + return VertexConsumerUtil.overlayDefaultUV(this); + } + public Matrix4f matrix4f; public Matrix3f matrix3f; @@ -106,75 +111,9 @@ DrawObjectMV next() { } private void renderQuad(float x1, float y1, float z1, float x2, float y2, float z2, - float normalX, float normalY, float normalZ, int r, int g, int b) { - - if (Math.abs(normalY) > 0.5f) { - float y = y1; - - if (normalY > 0) { - vertexWithMatrix4f(x1, y, z1).color(r, g, b, 255).texture(0, 0) - .light(15728880).normalWithMatrix(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x1, y, z2).color(r, g, b, 255).texture(0, 0) - .light(15728880).normalWithMatrix(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x2, y, z2).color(r, g, b, 255).texture(0, 0) - .light(15728880).normalWithMatrix(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x2, y, z1).color(r, g, b, 255).texture(0, 0) - .light(15728880).normalWithMatrix(normalX, normalY, normalZ).next(); - } else { - vertexWithMatrix4f(x1, y, z1).color(r, g, b, 255).texture(0, 0) - .light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x2, y, z1).color(r, g, b, 255).texture(0, 0) - .light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x2, y, z2).color(r, g, b, 255).texture(0, 0) - .light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x1, y, z2).color(r, g, b, 255).texture(0, 0) - .light(15728880).normal(normalX, normalY, normalZ).next(); - } - - } else if (Math.abs(normalZ) > 0.5f) { - float z = z1; - - if (normalZ > 0) { - // TODO: Fix - vertexWithMatrix4f(x1, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x1, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x2, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - - vertexWithMatrix4f(x2, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x1, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x2, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - - } else { - vertexWithMatrix4f(x1, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x2, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x1, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - - vertexWithMatrix4f(x2, y1, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x2, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x1, y2, z).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - } - - } else if (Math.abs(normalX) > 0.5f) { - float x = x1; - - if (normalX > 0) { - vertexWithMatrix4f(x, y1, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x, y2, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x, y1, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - - vertexWithMatrix4f(x, y1, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x, y2, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x, y2, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - - } else { - vertexWithMatrix4f(x, y1, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x, y1, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x, y2, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - - vertexWithMatrix4f(x, y1, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x, y2, z2).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - vertexWithMatrix4f(x, y2, z1).color(r, g, b, 255).texture(0, 0).light(15728880).normal(normalX, normalY, normalZ).next(); - } - } + float normalX, float normalY, float normalZ, int r, int g, int b, int alpha, int u, int v, int overlay, int light) { + VertexConsumerUtil.renderQuad(buffer, stack, getMatrix4f(), getMatrix3f(), + x1, y1, z1, x2, y2, z2, + normalX, normalY, normalZ, r, g, b, alpha, u, v, overlay, light); } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java index f263f6371..9c958b27c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.util.client.render; +import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; @@ -44,6 +45,10 @@ public static VertexConsumer overlay(VertexConsumer vertexConsumer, int overlay) return vertexConsumer.overlay(overlay); } + public static VertexConsumer overlayDefaultUV(VertexConsumer vertexConsumer) { + return vertexConsumer.overlay(OverlayTexture.DEFAULT_UV); + } + public static DrawObjectMV vertex(DrawObjectMV drawObject, float x, float y, float z) { vertex(drawObject.getBuffer(), drawObject.getStack(), x, y, z); return drawObject; @@ -84,6 +89,11 @@ public static DrawObjectMV overlay(DrawObjectMV drawObject, int overlay) { return drawObject; } + public static DrawObjectMV overlayDefaultUV(DrawObjectMV drawObject) { + overlayDefaultUV(drawObject.getBuffer()); + return drawObject; + } + public static VertexConsumer texture(VertexConsumer vertexConsumer, float u, float v) { return vertexConsumer.texture(u, v); } @@ -99,4 +109,96 @@ public static VertexConsumer normal(VertexConsumer vertexConsumer, MatrixStack s public static VertexConsumer next(VertexConsumer vertexConsumer) { return vertexConsumer; } + + public static void renderQuad(VertexConsumer vertexConsumer, MatrixStack stack, Matrix4f matrix4f, Matrix3f matrix3f, + float x1, float y1, float z1, float x2, float y2, float z2, + float normalX, float normalY, float normalZ, int r, int g, int b, int alpha, int u, int v, int overlay, int light) { + + float[][] vertexes = new float[4][3]; + + if (Math.abs(normalY) > 0.5f) { + if (normalY > 0) { + vertexes = new float[][]{ + {x1, y1, z1}, + {x1, y1, z2}, + {x2, y1, z2}, + {x2, y1, z1} + }; + + } else { + vertexes = new float[][]{ + {x1, y1, z1}, + {x2, y1, z1}, + {x2, y1, z2}, + {x1, y1, z2} + }; + } + } else if (Math.abs(normalZ) > 0.5f) { + if (normalZ > 0) { + vertexes = new float[][]{ + {x1, y1, z1}, + {x2, y1, z1}, + {x2, y2, z1}, + {x1, y2, z1} + }; + } else { + vertexes = new float[][]{ + {x1, y1, z1}, + {x1, y2, z1}, + {x2, y2, z1}, + {x2, y1, z1} + }; + } + } else if (Math.abs(normalX) > 0.5f) { + if (normalX > 0) { + vertexes = new float[][]{ + {x1, y1, z1}, + {x1, y2, z1}, + {x1, y2, z2}, + {x1, y1, z2} + }; + } else { + vertexes = new float[][]{ + {x1, y1, z1}, + {x1, y1, z2}, + {x1, y2, z2}, + {x1, y2, z1} + }; + } + } + + for (float[] vertex : vertexes) { + if (vertex.length != 3) continue; + + vertex(vertexConsumer, matrix4f, vertex[0], vertex[1], vertex[2]); + color(vertexConsumer, r, g, b, alpha); + texture(vertexConsumer, u, v); + light(vertexConsumer, light); + normal(vertexConsumer, stack, normalX, normalY, normalZ); + next(vertexConsumer); + } + } + + public static void renderQuad(DrawObjectMV drawObject, Matrix4f matrix4f, Matrix3f matrix3f, + float x1, float y1, float z1, float x2, float y2, float z2, + float normalX, float normalY, float normalZ, int r, int g, int b, int alpha, int u, int v, int overlay, int light) { + renderQuad(drawObject.getBuffer(), drawObject.getStack(), matrix4f, matrix3f, + x1, y1, z1, x2, y2, z2, + normalX, normalY, normalZ, r, g, b, alpha, u, v, overlay, light); + + } + + public static void renderQuad(DrawObjectMV drawObject, + float x1, float y1, float z1, float x2, float y2, float z2, + float normalX, float normalY, float normalZ, int r, int g, int b, int alpha, int u, int v, int overlay, int light) { + + Matrix4f matrix4f = drawObject.getMatrix4f(); + Matrix3f matrix3f = drawObject.getMatrix3f(); + + renderQuad(drawObject.getBuffer(), drawObject.getStack(), matrix4f, matrix3f, + x1, y1, z1, x2, y2, z2, + normalX, normalY, normalZ, r, g, b, alpha, u, v, overlay, light); + + } } + diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java index f34bb6d11..aaddf3c82 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java @@ -4,6 +4,8 @@ import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.util.math.MatrixStack; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; +import org.joml.Matrix3f; +import org.joml.Matrix4f; public class VertexRenderingUtil { public static void drawBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { @@ -30,4 +32,12 @@ public static void drawBox(DrawObjectMV drawObject, double minX, double minY, do public static void drawFilledBox(DrawObjectMV drawObject, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { drawFilledBox(drawObject.getStack(), drawObject.getBuffer(), minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); } + + public static void renderQuad(VertexConsumer vertexConsumer, MatrixStack stack, Matrix4f matrix4f, Matrix3f matrix3f, float x1, float y1, float z1, float x2, float y2, float z2, float normalX, float normalY, float normalZ, int r, int g, int b, int alpha, int u, int v, int overlay, int light) { + VertexConsumerUtil.renderQuad(vertexConsumer, stack, matrix4f, matrix3f, x1, y1, z1, x2, y2, z2, normalX, normalY, normalZ, r, g, b, alpha, u, v, overlay, light); + } + + public static void renderQuad(DrawObjectMV drawObject, float x1, float y1, float z1, float x2, float y2, float z2, float normalX, float normalY, float normalZ, int r, int g, int b, int alpha, int u, int v, int overlay, int light) { + renderQuad(drawObject.getBuffer(), drawObject.getStack(), drawObject.getMatrix4f(), drawObject.getMatrix3f(), x1, y1, z1, x2, y2, z2, normalX, normalY, normalZ, r, g, b, alpha, u, v, overlay, light); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/WorldRendererUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/WorldRendererUtil.java new file mode 100644 index 000000000..8160f8ba9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/WorldRendererUtil.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.util.client.render; + +import net.minecraft.client.render.WorldRenderer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class WorldRendererUtil { + public static int getLightmapCoordinates(World world, BlockPos pos) { + return WorldRenderer.getLightmapCoordinates(world, pos); + } + + public static int getLightmapCoordinates(net.pitan76.mcpitanlib.midohra.world.World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { + return getLightmapCoordinates(world.getRaw(), pos.toMinecraft()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java index ea83adead..129da5856 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java @@ -33,6 +33,10 @@ public net.minecraft.util.math.BlockPos toMinecraft() { return blockPos; } + public net.minecraft.util.math.BlockPos toRaw() { + return toMinecraft(); + } + public BlockPos add(int x, int y, int z) { return new BlockPos(blockPos.add(x, y, z)); } From 650f1d3def57c322200374ba55b684df442e161f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 17:14:48 +0900 Subject: [PATCH 502/617] [cp] remove create method in CompatRenderLayer --- .../mcpitanlib/api/client/render/CompatRenderLayer.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java index 07bab9634..bf2cb9ca8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.client.render; -import com.mojang.blaze3d.pipeline.RenderPipeline; import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.RenderLayer; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; @@ -45,10 +44,6 @@ public static CompatRenderLayer getEntitySolid(CompatIdentifier id) { return new CompatRenderLayer(RenderLayer.getEntitySolid(id.toMinecraft())); } - public static CompatRenderLayer create(String name, int size, boolean hasCrumbling, boolean translucent, RenderPipeline pipeline, RenderLayer.MultiPhaseParameters params) { - return new CompatRenderLayer(RenderLayer.of(name, size, hasCrumbling, translucent, pipeline, params)); - } - public void draw(BuiltBuffer buffer) { layer.draw(buffer); } From 9a76606aa34fed464146915b5e85818b109c23dd Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 17:24:25 +0900 Subject: [PATCH 503/617] [cp] remove draw method from CompatRenderLayer --- .../mcpitanlib/api/client/render/CompatRenderLayer.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java index bf2cb9ca8..69c3fc968 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/CompatRenderLayer.java @@ -1,6 +1,5 @@ package net.pitan76.mcpitanlib.api.client.render; -import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.render.RenderLayer; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; @@ -43,8 +42,4 @@ public static CompatRenderLayer getArmorCutoutNoCull(CompatIdentifier id) { public static CompatRenderLayer getEntitySolid(CompatIdentifier id) { return new CompatRenderLayer(RenderLayer.getEntitySolid(id.toMinecraft())); } - - public void draw(BuiltBuffer buffer) { - layer.draw(buffer); - } } From 73f94e7611af331746a6e495e9caef0d9e5681b2 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 17:27:08 +0900 Subject: [PATCH 504/617] [cp] fix --- .../src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java | 2 +- .../mcpitanlib/api/util/client/render/VertexConsumerUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index bbdaccb58..d660c04b9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -506,6 +506,6 @@ public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { } public void eatFood(ItemStack stack, CompatFoodComponent foodComponent) { - getEntity().getHungerManager().eat(foodComponent.build()); + getEntity().eatFood(getWorld(), stack); } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java index 9c958b27c..1d251223c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java @@ -103,7 +103,7 @@ public static VertexConsumer vertex(VertexConsumer vertexConsumer, Matrix4f matr } public static VertexConsumer normal(VertexConsumer vertexConsumer, MatrixStack stack, float x, float y, float z) { - return vertexConsumer.normal(stack.peek(), x, y, z); + return vertexConsumer.normal(stack.peek().getNormalMatrix(), x, y, z); } public static VertexConsumer next(VertexConsumer vertexConsumer) { From 052d2e58e807712ea74bd83b4e53745816b257b2 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 17:38:39 +0900 Subject: [PATCH 505/617] [cp] fix-1192: replace joml Matrix imports with Minecraft's Matrix classes --- .../pitan76/mcpitanlib/api/client/render/DrawObjectMV.java | 5 ++--- .../render/block/entity/event/BlockEntityRenderEvent.java | 4 ++-- .../api/util/client/render/VertexConsumerUtil.java | 4 ++-- .../api/util/client/render/VertexRenderingUtil.java | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java index c27273748..d1bc3bff2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java @@ -1,11 +1,10 @@ package net.pitan76.mcpitanlib.api.client.render; -import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.Matrix3f; +import net.minecraft.util.math.Matrix4f; import net.pitan76.mcpitanlib.api.util.client.render.VertexConsumerUtil; -import org.joml.Matrix3f; -import org.joml.Matrix4f; public class DrawObjectMV { private final MatrixStack stack; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java index 7b0a172e0..dac9b8cb5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java @@ -6,14 +6,14 @@ import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Matrix3f; +import net.minecraft.util.math.Matrix4f; import net.pitan76.mcpitanlib.api.client.render.CompatRenderLayer; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; import net.pitan76.mcpitanlib.api.util.MathUtil; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import net.pitan76.mcpitanlib.api.util.client.MatrixStackUtil; -import org.joml.Matrix3f; -import org.joml.Matrix4f; public class BlockEntityRenderEvent { public T blockEntity; diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java index 1d251223c..b61349d1f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java @@ -3,9 +3,9 @@ import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.Matrix3f; +import net.minecraft.util.math.Matrix4f; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; -import org.joml.Matrix3f; -import org.joml.Matrix4f; public class VertexConsumerUtil { public static VertexConsumer vertex(VertexConsumer vertexConsumer, float x, float y, float z) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java index aaddf3c82..9c220bb62 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexRenderingUtil.java @@ -3,9 +3,9 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.Matrix3f; +import net.minecraft.util.math.Matrix4f; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; -import org.joml.Matrix3f; -import org.joml.Matrix4f; public class VertexRenderingUtil { public static void drawBox(MatrixStack matrices, VertexConsumer buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) { From 4359347fc2f1e28b8f2ca718c3ab100373c7511f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 19:28:51 +0900 Subject: [PATCH 506/617] [cp] fix: update next method in VertexConsumerUtil to return the next VertexConsumer --- .../mcpitanlib/api/util/client/render/VertexConsumerUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java index b61349d1f..8e05ca8fd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/VertexConsumerUtil.java @@ -107,6 +107,7 @@ public static VertexConsumer normal(VertexConsumer vertexConsumer, MatrixStack s } public static VertexConsumer next(VertexConsumer vertexConsumer) { + vertexConsumer.next(); return vertexConsumer; } From f55d8b0087848eaf49c32182f398fe3a42d5b142 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 14 Jun 2025 19:30:01 +0900 Subject: [PATCH 507/617] [cp] bump version to 3.3.0 in info.properties --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 4f3136664..ba4ef1c6c 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.2.9 +mod_version=3.3.0 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 207b47c94990cd583fceee46ac286eb2c1a1e320 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 15 Jun 2025 14:07:49 +0900 Subject: [PATCH 508/617] [cp] feat: update DrawObjectMV methods to public and add ScreenUtil for screen management --- .../api/client/render/DrawObjectMV.java | 16 +++++------ .../api/util/client/v2/ScreenUtil.java | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java index d1bc3bff2..284703320 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/DrawObjectMV.java @@ -84,32 +84,32 @@ public Matrix3f getMatrix3f() { return matrix3f; } - DrawObjectMV vertexWithMatrix4f(float x, float y, float z) { + public DrawObjectMV vertexWithMatrix4f(float x, float y, float z) { VertexConsumerUtil.vertex(buffer, getMatrix4f(), x, y, z); return this; } - DrawObjectMV vertexWithMatrix(float x, float y, float z) { + public DrawObjectMV vertexWithMatrix(float x, float y, float z) { VertexConsumerUtil.vertex(buffer, stack, x, y, z); return this; } - DrawObjectMV normalWithMatrix(float x, float y, float z) { + public DrawObjectMV normalWithMatrix(float x, float y, float z) { VertexConsumerUtil.normal(buffer, stack, x, y, z); return this; } - - DrawObjectMV texture(float u, float v) { + + public DrawObjectMV texture(float u, float v) { VertexConsumerUtil.texture(buffer, u, v); return this; } - - DrawObjectMV next() { + + public DrawObjectMV next() { VertexConsumerUtil.next(buffer); return this; } - private void renderQuad(float x1, float y1, float z1, float x2, float y2, float z2, + public void renderQuad(float x1, float y1, float z1, float x2, float y2, float z2, float normalX, float normalY, float normalZ, int r, int g, int b, int alpha, int u, int v, int overlay, int light) { VertexConsumerUtil.renderQuad(buffer, stack, getMatrix4f(), getMatrix3f(), x1, y1, z1, x2, y2, z2, diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java new file mode 100644 index 000000000..9fba30150 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.util.client.v2; + +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.screen.Screen; + +public class ScreenUtil extends net.pitan76.mcpitanlib.api.util.client.ScreenUtil { + + public static void setFocus(Screen screen, boolean focus) { + screen.setFocused(focus); + } + + public static void setFocus(Screen screen, Element element) { + screen.setFocused(element); + } + + public static boolean isFocused(Screen screen) { + return screen.isFocused(); + } + + public static void setDragging(Screen screen, boolean dragging) { + screen.setDragging(dragging); + } + + public static boolean isDragging(Screen screen) { + return screen.isDragging(); + } +} From 1fc18e2a9f7ac06906c38ff1f3f2ab91ac910a5d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 15 Jun 2025 14:27:11 +0900 Subject: [PATCH 509/617] [cp] feat: add BlockEntityTypeBuilder for flexible block entity type creation --- .../api/tile/v2/BlockEntityTypeBuilder.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java new file mode 100644 index 000000000..af90ff0c0 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java @@ -0,0 +1,69 @@ +package net.pitan76.mcpitanlib.api.tile.v2; + +import com.mojang.datafixers.types.Type; +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.midohra.block.SupplierBlockWrapper; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class BlockEntityTypeBuilder extends net.pitan76.mcpitanlib.api.tile.BlockEntityTypeBuilder { + private final Factory factory; + private final Consumer> consumer; + + public BlockEntityTypeBuilder(Factory factory, Consumer> blocks) { + super(null, null); + + this.factory = factory; + this.consumer = blocks; + } + + @Deprecated + public static BlockEntityTypeBuilder create(Factory factory, Block... blocks) { + throw new IllegalStateException("Use create(Factory, Consumer>) instead"); + } + + public static BlockEntityTypeBuilder create(BlockEntityTypeBuilder.Factory factory, Consumer> blocks) { + return new BlockEntityTypeBuilder<>(factory, blocks); + } + + public static BlockEntityTypeBuilder createA(BlockEntityTypeBuilder.Factory factory, Supplier block) { + return new BlockEntityTypeBuilder<>(factory, blocks -> { + blocks.add(block.get()); + }); + } + + public static BlockEntityTypeBuilder create(BlockEntityTypeBuilder.Factory factory, SupplierBlockWrapper wrapper) { + return new BlockEntityTypeBuilder<>(factory, blocks -> { + blocks.add(wrapper.get()); + }); + } + + @Override + @Deprecated + public BlockEntityTypeBuilder addBlock(Block block) { + return this; + } + + @Override + @Deprecated + public BlockEntityTypeBuilder addBlocks(Block... blocks) { + return this; + } + + public BlockEntityType build() { + return build(null); + } + + public BlockEntityType build(Type type) { + List blocks = new ArrayList<>(); + if (consumer != null) + consumer.accept(blocks); + + return build(type, factory, blocks.toArray(new Block[0])); + } +} From 614b10931db115d1b1989656a8a825d1c7fcfe42 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 15 Jun 2025 14:28:12 +0900 Subject: [PATCH 510/617] [cp] feat: add getWidth and getHeight methods to ScreenUtil for screen dimension retrieval --- .../pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java index 9fba30150..ac619fbdd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java @@ -24,4 +24,12 @@ public static void setDragging(Screen screen, boolean dragging) { public static boolean isDragging(Screen screen) { return screen.isDragging(); } + + public static int getWidth(Screen screen) { + return screen.width; + } + + public static int getHeight(Screen screen) { + return screen.height; + } } From 9c8a15da2851d82696dfb89fc25b9abe8efc0705 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 15 Jun 2025 14:29:01 +0900 Subject: [PATCH 511/617] [cp] bump version to 3.3.1 in info.properties --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index ba4ef1c6c..13530334c 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.0 +mod_version=3.3.1 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 43c5023ad5b297b2dc254c763804be0a341ff135 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 15 Jun 2025 15:00:01 +0900 Subject: [PATCH 512/617] [cp] fix --- .../pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java index af90ff0c0..b2c0b1a98 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/v2/BlockEntityTypeBuilder.java @@ -64,6 +64,6 @@ public BlockEntityType build(Type type) { if (consumer != null) consumer.accept(blocks); - return build(type, factory, blocks.toArray(new Block[0])); + return BlockEntityType.Builder.create(factory::create, blocks.toArray(new Block[0])).build(type); } } From 70d62ecac6da9d9db2078866eb60beab78024de9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 15 Jun 2025 15:10:00 +0900 Subject: [PATCH 513/617] [cp] fix-2 --- .../net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java index ac619fbdd..a041c3c34 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/v2/ScreenUtil.java @@ -6,7 +6,6 @@ public class ScreenUtil extends net.pitan76.mcpitanlib.api.util.client.ScreenUtil { public static void setFocus(Screen screen, boolean focus) { - screen.setFocused(focus); } public static void setFocus(Screen screen, Element element) { @@ -14,7 +13,7 @@ public static void setFocus(Screen screen, Element element) { } public static boolean isFocused(Screen screen) { - return screen.isFocused(); + return false; } public static void setDragging(Screen screen, boolean dragging) { From 5d112c53ff910147aeb208ad45c8280e7428eff3 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:33:00 +0900 Subject: [PATCH 514/617] [cp] fix CompatActionResult --- .../api/util/CompatActionResult.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatActionResult.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatActionResult.java index ec615e0b9..426389c42 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatActionResult.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatActionResult.java @@ -71,11 +71,44 @@ public static CompatActionResult of(EventResult result) { return PASS; } + @Deprecated public static CompatActionResult create(ActionResult result, EventResult eventResult) { return new CompatActionResult(result, eventResult); } + /** + * @deprecated Use {@link #of(ActionResult)} instead. + */ + @Deprecated public static CompatActionResult create(ActionResult result) { + return of(result); + } + + @Deprecated + public static CompatActionResult create2(ActionResult result) { return create(result, EventResult.stop()); } + + @Override + public boolean equals(Object obj) { + if (super.equals(obj)) return true; + if (!(obj instanceof CompatActionResult)) return false; + if (actionResult.equals(((CompatActionResult) obj).actionResult)) { + return eventResult.equals(((CompatActionResult) obj).eventResult); + } + + return false; + } + + public String getName() { + if (this == SUCCESS) return "SUCCESS"; + if (this == PASS) return "PASS"; + if (this == FAIL) return "FAIL"; + if (this == CONSUME) return "CONSUME"; + if (this == PASS_TO_DEFAULT_BLOCK_ACTION) return "PASS_TO_DEFAULT_BLOCK_ACTION"; + if (this == SUCCESS_SERVER) return "SUCCESS_SERVER"; + if (this == STOP) return "STOP"; + + return "UNKNOWN"; + } } From 92c1031eb07accdcc12518fd372abf61ad9c9aea Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:35:34 +0900 Subject: [PATCH 515/617] [cp] add of(List) to ItemStackList --- .../mcpitanlib/api/util/collection/ItemStackList.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java index bdf49d742..a90693d47 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java @@ -203,4 +203,12 @@ public static ItemStackList of(net.pitan76.mcpitanlib.midohra.item.ItemStack sta public static ItemStackList of(net.pitan76.mcpitanlib.midohra.item.ItemStack stack, int size) { return ItemStackList.ofSize(size, stack.toMinecraft()); } + + public static ItemStackList of(List stacks) { + ItemStackList list = ItemStackList.ofSize(stacks.size()); + for (int i = 0; i < stacks.size(); i++) + list.set(i, stacks.get(i)); + + return list; + } } From 01add80e54fb95bcb0942ccb65909f487b607e97 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:36:14 +0900 Subject: [PATCH 516/617] [cp] bump version to 3.3.2 in info.properties --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 13530334c..5b3cd70da 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.1 +mod_version=3.3.2 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 0361aa31d602f913acc67bf361795db35917a4e6 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:46:11 +0900 Subject: [PATCH 517/617] [cp] refactor: rename of method to of2 for clarity in ItemStackList --- .../pitan76/mcpitanlib/api/util/collection/ItemStackList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java index a90693d47..83dc23c95 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ItemStackList.java @@ -204,7 +204,7 @@ public static ItemStackList of(net.pitan76.mcpitanlib.midohra.item.ItemStack sta return ItemStackList.ofSize(size, stack.toMinecraft()); } - public static ItemStackList of(List stacks) { + public static ItemStackList of2(List stacks) { ItemStackList list = ItemStackList.ofSize(stacks.size()); for (int i = 0; i < stacks.size(); i++) list.set(i, stacks.get(i)); From d8a00034744dfae5abf0a7cefc2d2cf2090e3e9b Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 19 Jun 2025 14:41:33 +0900 Subject: [PATCH 518/617] [cp] add copyFrom in NbtUtil --- .../main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java index e227eefc0..04a6600e4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/NbtUtil.java @@ -548,4 +548,8 @@ public static NbtByte createByte(byte value) { public static NbtShort createShort(short value) { return NbtShort.of(value); } + + public static void copyFrom(NbtCompound target, NbtCompound source) { + target.copyFrom(source); + } } From 6e387e26c22b076a476e537327c7cde10b8f3260 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 19 Jun 2025 22:40:43 +0900 Subject: [PATCH 519/617] [cp] add NbtRWUtil --- .../mcpitanlib/api/util/nbt/NbtRWUtil.java | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java new file mode 100644 index 000000000..0cf22dacd --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java @@ -0,0 +1,137 @@ +package net.pitan76.mcpitanlib.api.util.nbt; + +import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.event.nbt.NbtRWArgs; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.util.NbtUtil; + +public class NbtRWUtil { + + public static void putBoolean(WriteNbtArgs args, String key, boolean value) { + NbtUtil.putBoolean(args.getNbt(), key, value); + } + + public static boolean getBoolean(ReadNbtArgs args, String key) { + return NbtUtil.getBoolean(args.getNbt(), key); + } + + public static void putByte(WriteNbtArgs args, String key, byte value) { + NbtUtil.putByte(args.getNbt(), key, value); + } + + public static byte getByte(ReadNbtArgs args, String key) { + return NbtUtil.getByte(args.getNbt(), key); + } + + public static void putInt(WriteNbtArgs args, String key, int value) { + NbtUtil.putInt(args.getNbt(), key, value); + } + + public static int getInt(ReadNbtArgs args, String key) { + return NbtUtil.getInt(args.getNbt(), key); + } + + public static void putLong(WriteNbtArgs args, String key, long value) { + NbtUtil.putLong(args.getNbt(), key, value); + } + + public static long getLong(ReadNbtArgs args, String key) { + return NbtUtil.getLong(args.getNbt(), key); + } + + public static void putShort(WriteNbtArgs args, String key, short value) { + NbtUtil.putShort(args.getNbt(), key, value); + } + + public static short getShort(ReadNbtArgs args, String key) { + return NbtUtil.getShort(args.getNbt(), key); + } + + public static void putFloat(WriteNbtArgs args, String key, float value) { + NbtUtil.putFloat(args.getNbt(), key, value); + } + + public static float getFloat(ReadNbtArgs args, String key) { + return NbtUtil.getFloat(args.getNbt(), key); + } + + public static void putDouble(WriteNbtArgs args, String key, double value) { + NbtUtil.putDouble(args.getNbt(), key, value); + } + + public static double getDouble(ReadNbtArgs args, String key) { + return NbtUtil.getDouble(args.getNbt(), key); + } + public static void putString(WriteNbtArgs args, String key, String value) { + NbtUtil.putString(args.getNbt(), key, value); + } + + public static String getString(ReadNbtArgs args, String key) { + return NbtUtil.getString(args.getNbt(), key); + } + + public static void putIntArray(WriteNbtArgs args, String key, int[] value) { + args.getNbt().putIntArray(key, value); + } + + public static int[] getIntArray(ReadNbtArgs args, String key) { + return args.nbt.getIntArray(key).get(); + } + + public static boolean getBooleanOrDefault(ReadNbtArgs args, String key, boolean defaultValue) { + return NbtUtil.getBooleanOrDefault(args.getNbt(), key, defaultValue); + } + + public static byte getByteOrDefault(ReadNbtArgs args, String key, byte defaultValue) { + return NbtUtil.getByteOrDefault(args.getNbt(), key, defaultValue); + } + + public static int getIntOrDefault(ReadNbtArgs args, String key, int defaultValue) { + return NbtUtil.getIntOrDefault(args.getNbt(), key, defaultValue); + } + + public static long getLongOrDefault(ReadNbtArgs args, String key, long defaultValue) { + return NbtUtil.getLongOrDefault(args.getNbt(), key, defaultValue); + } + + public static short getShortOrDefault(ReadNbtArgs args, String key, short defaultValue) { + return NbtUtil.getShortOrDefault(args.getNbt(), key, defaultValue); + } + + public static float getFloatOrDefault(ReadNbtArgs args, String key, float defaultValue) { + return NbtUtil.getFloatOrDefault(args.getNbt(), key, defaultValue); + } + + public static double getDoubleOrDefault(ReadNbtArgs args, String key, double defaultValue) { + return NbtUtil.getDoubleOrDefault(args.getNbt(), key, defaultValue); + } + + public static String getStringOrDefault(ReadNbtArgs args, String key, String defaultValue) { + return NbtUtil.getStringOrDefault(args.getNbt(), key, defaultValue); + } + + public static int[] getIntArrayOrDefault(ReadNbtArgs args, String key, int[] defaultValue) { + return args.nbt.getIntArray(key).orElse(defaultValue); + } + + public static boolean isEmpty(NbtRWArgs args) { + return args.nbt.isEmpty(); + } + + public static void put(WriteNbtArgs args, String key, NbtRWArgs other) { + putCompound(args, key, other.nbt); + } + + public static NbtRWArgs get(ReadNbtArgs args, String key) { + return new NbtRWArgs(getCompound(args, key)); + } + + public static void putCompound(WriteNbtArgs args, String key, NbtCompound other) { + NbtUtil.put(args.nbt, key, other); + } + + public static NbtCompound getCompound(ReadNbtArgs args, String key) { + return NbtUtil.get(args.nbt, key); + } +} From 8c01d8a8452f67dab5e03a6ceb94d04a4782bd04 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 19 Jun 2025 22:51:52 +0900 Subject: [PATCH 520/617] [cp] bump version 3.3.3 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 5b3cd70da..86868d838 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.2 +mod_version=3.3.3 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From d1fc3f1cf355768ef44c0fc697b53f2f5f9f909d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Jun 2025 02:27:23 +0900 Subject: [PATCH 521/617] [cp] feat: implement NbtRWUtil for enhanced NBT read/write operations --- .../mcpitanlib/api/util/nbt/InvRWUtil.java | 26 +++++ .../mcpitanlib/api/util/nbt/v2/NbtRWUtil.java | 107 ++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/InvRWUtil.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/InvRWUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/InvRWUtil.java new file mode 100644 index 000000000..65eb6c244 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/InvRWUtil.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.util.nbt; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.util.InventoryUtil; +import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; + +public class InvRWUtil { + public static void putInv(WriteNbtArgs args, DefaultedList stacks) { + InventoryUtil.writeNbt(args.getRegistryLookup(), args.getNbt(), stacks); + } + + public static void getInv(ReadNbtArgs args, DefaultedList stacks) { + InventoryUtil.readNbt(args.getRegistryLookup(), args.getNbt(), stacks); + } + + public static void putInv(WriteNbtArgs args, ItemStackList stacks) { + putInv(args, (DefaultedList) stacks); + } + + public static void getInv(ReadNbtArgs args, ItemStackList stacks) { + getInv(args, (DefaultedList) stacks); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java new file mode 100644 index 000000000..1c2b441ec --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java @@ -0,0 +1,107 @@ +package net.pitan76.mcpitanlib.api.util.nbt.v2; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; +import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.util.NbtUtil; +import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; +import net.pitan76.mcpitanlib.api.util.math.PosUtil; +import net.pitan76.mcpitanlib.api.util.math.Vec3dUtil; +import net.pitan76.mcpitanlib.api.util.math.Vec3iUtil; +import net.pitan76.mcpitanlib.api.util.nbt.InvRWUtil; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; + +public class NbtRWUtil extends net.pitan76.mcpitanlib.api.util.nbt.NbtRWUtil { + public static void putInv(WriteNbtArgs args, ItemStackList stacks) { + InvRWUtil.putInv(args, stacks); + } + + public static void getInv(ReadNbtArgs args, ItemStackList stacks) { + InvRWUtil.getInv(args, stacks); + } + + public static WriteNbtArgs create(CompatRegistryLookup registryLookup) { + return new WriteNbtArgs(NbtUtil.create(), registryLookup); + } + + public static WriteNbtArgs create() { + return create(null); + } + + public static void put(WriteNbtArgs parent, WriteNbtArgs child, String key) { + NbtUtil.put(parent.nbt, key, child.nbt); + } + + public static WriteNbtArgs putWithCreate(WriteNbtArgs parent, String key) { + NbtCompound nbt = NbtUtil.create(); + NbtUtil.put(parent.nbt, key, nbt); + + return new WriteNbtArgs(nbt, parent.registryLookup); + } + + public static ReadNbtArgs get(ReadNbtArgs parent, String key) { + NbtCompound nbt = NbtUtil.get(parent.nbt, key); + return new ReadNbtArgs(nbt, parent.registryLookup); + } + + public static ReadNbtArgs getOrDefault(ReadNbtArgs parent, String key, ReadNbtArgs defaultValue) { + return NbtUtil.has(parent.nbt, key) ? get(parent, key) : defaultValue; + } + + public static void putPos3i(WriteNbtArgs args, String key, int x, int y, int z) { + WriteNbtArgs args2 = putWithCreate(args, key); + putInt(args2, "x", x); + putInt(args2, "y", y); + putInt(args2, "z", z); + } + + public static void putPos3d(WriteNbtArgs args, String key, double x, double y, double z) { + WriteNbtArgs args2 = putWithCreate(args, key); + putDouble(args2, "x", x); + putDouble(args2, "y", y); + putDouble(args2, "z", z); + } + + public static Vec3i getPos3i(ReadNbtArgs args, String key) { + ReadNbtArgs args2 = get(args, key); + int x = getInt(args2, "x"); + int y = getInt(args2, "y"); + int z = getInt(args2, "z"); + return Vec3iUtil.create(x, y, z); + } + + public static Vec3d getPos3d(ReadNbtArgs args, String key) { + ReadNbtArgs args2 = get(args, key); + double x = getDouble(args2, "x"); + double y = getDouble(args2, "y"); + double z = getDouble(args2, "z"); + return Vec3dUtil.create(x, y, z); + } + + public static void putBlockPos(WriteNbtArgs args, String key, BlockPos pos) { + putPos3i(args, key, pos.getX(), pos.getY(), pos.getZ()); + } + + public static BlockPos getBlockPos(ReadNbtArgs args, String key) { + ReadNbtArgs args2 = get(args, key); + int x = getInt(args2, "x"); + int y = getInt(args2, "y"); + int z = getInt(args2, "z"); + return BlockPos.of(x, y, z); + } + + public static void putBlockPos(WriteNbtArgs args, String key, net.minecraft.util.math.BlockPos pos) { + putPos3i(args, key, PosUtil.x(pos), PosUtil.y(pos), PosUtil.z(pos)); + } + + public static net.minecraft.util.math.BlockPos getBlockPosV(ReadNbtArgs args, String key) { + ReadNbtArgs args2 = get(args, key); + int x = getInt(args2, "x"); + int y = getInt(args2, "y"); + int z = getInt(args2, "z"); + return PosUtil.flooredBlockPos(x, y, z); + } +} From d27a96858e3992c30bd497e74c5d4fb37d30e7f4 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Jun 2025 10:40:00 +0900 Subject: [PATCH 522/617] [cp] feat: add methods to register render types for blocks and fluids in CompatRegistryClient --- .../api/client/registry/CompatRegistryClient.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index 637f1756c..ffd532b46 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -40,6 +40,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.MCPitanLib; +import net.pitan76.mcpitanlib.api.client.render.CompatRenderLayer; import net.pitan76.mcpitanlib.api.client.render.EntityModelLayerContext; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; @@ -199,4 +200,12 @@ public static void registerCompatBlockEntityRenderer(Blo ctx.getRenderDispatcher(), ctx.getRenderManager(), ClientUtil.getItemRenderer(), ClientUtil.getClient().getEntityRenderDispatcher(), ctx.getLayerRenderDispatcher(), ctx.getTextRenderer() ))); } + + public static void registerRenderTypeBlock(CompatRenderLayer layer, Block block) { + registerRenderTypeBlock(layer.layer, block); + } + + public static void registerRenderTypeFluid(CompatRenderLayer layer, Fluid fluid) { + registerRenderTypeFluid(layer.layer, fluid); + } } From 57e7341f7714bb985be9403fe84c04bbbf87e6b1 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Jun 2025 10:35:43 +0900 Subject: [PATCH 523/617] [cp] fix: implement BlockStatePropertyHolder in BlockScheduledTickEvent for improved block state handling --- .../api/event/block/BlockScheduledTickEvent.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java index c0e89ff67..58eb5048b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/BlockScheduledTickEvent.java @@ -7,10 +7,11 @@ import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.WorldUtil; import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; +import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; import java.util.Random; -public class BlockScheduledTickEvent extends BaseEvent { +public class BlockScheduledTickEvent extends BaseEvent implements BlockStatePropertyHolder { public BlockState state; public ServerWorld world; public BlockPos pos; @@ -42,4 +43,9 @@ public CompatRandom getRandom() { public BlockEntity getBlockEntity() { return WorldUtil.getBlockEntity(getWorld(), getPos()); } + + @Override + public net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } } From 119b080dba478de01692b4fcfbf5e865471853de Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Jun 2025 10:46:44 +0900 Subject: [PATCH 524/617] [cp] fix-1214 --- .../java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java index 0cf22dacd..4cfd30313 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/NbtRWUtil.java @@ -76,7 +76,7 @@ public static void putIntArray(WriteNbtArgs args, String key, int[] value) { } public static int[] getIntArray(ReadNbtArgs args, String key) { - return args.nbt.getIntArray(key).get(); + return args.nbt.getIntArray(key); } public static boolean getBooleanOrDefault(ReadNbtArgs args, String key, boolean defaultValue) { @@ -112,7 +112,8 @@ public static String getStringOrDefault(ReadNbtArgs args, String key, String def } public static int[] getIntArrayOrDefault(ReadNbtArgs args, String key, int[] defaultValue) { - return args.nbt.getIntArray(key).orElse(defaultValue); + if (!NbtUtil.has(args.nbt, key)) return defaultValue; + return args.nbt.getIntArray(key); } public static boolean isEmpty(NbtRWArgs args) { From 6b2d293a2945e57ad306213861f48a97b4a5b60f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Jun 2025 11:48:09 +0900 Subject: [PATCH 525/617] [cp] add bat --- publish.bat | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++ pull.bat | 54 +++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 publish.bat create mode 100644 pull.bat diff --git a/publish.bat b/publish.bat new file mode 100644 index 000000000..c470e0edf --- /dev/null +++ b/publish.bat @@ -0,0 +1,105 @@ +git fetch origin + +git checkout 1.16.5 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :forge:modrinth + +git checkout 1.18.2 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :forge:modrinth + +git checkout 1.19.2 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :forge:modrinth + +git checkout 1.20.1 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :forge:modrinth + +git checkout 1.20.4 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenForgePublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenNeoForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :forge:modrinth +call gradlew.bat :neoforge:modrinth + +git checkout 1.21.1 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenNeoForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :neoforge:modrinth + +git checkout 1.21.3 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenNeoForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :neoforge:modrinth + +git checkout 1.21.4 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenNeoForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :neoforge:modrinth + +git checkout 1.21.5 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenNeoForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :neoforge:modrinth + +git checkout 1.21.6 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenNeoForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :neoforge:modrinth + +pause \ No newline at end of file diff --git a/pull.bat b/pull.bat new file mode 100644 index 000000000..25011ab99 --- /dev/null +++ b/pull.bat @@ -0,0 +1,54 @@ +git fetch origin +git checkout 1.21.6 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.21.5 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.21.4 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.21.3 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.21.1 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.20.4 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.20.1 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.19.2 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.18.2 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.16.5 +timeout /T 1 +git pull + +git fetch origin +git checkout 1.21.6 + +pause \ No newline at end of file From 09eef79b4abc69318ad9e4d8f927b7568bfffec3 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Jun 2025 11:57:51 +0900 Subject: [PATCH 526/617] [cp] fix: update artifactId and add GitHub Packages repository configuration in build.gradle --- common/build.gradle | 12 ++++++++++-- fabric/build.gradle | 12 ++++++++++-- forge/build.gradle | 12 ++++++++++-- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index b67017b0b..32d9569b3 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -17,13 +17,21 @@ loom { publishing { publications { mavenCommon(MavenPublication) { - artifactId = info.archives_base_name + artifactId = info.archives_base_name + "-" + project.name + "-" + rootProject.minecraft_version + version = info.mod_version from components.java } } // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // Add repositories to publish to here. + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/PTOM76/maven") + credentials { + username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_ACTOR") + password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") + } + } } } \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index e39189e5f..c334a1cca 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -81,13 +81,21 @@ components.java { publishing { publications { mavenFabric(MavenPublication) { - artifactId = info.archives_base_name + "-" + project.name + artifactId = info.archives_base_name + "-" + project.name + "-" + rootProject.minecraft_version + version = info.mod_version from components.java } } // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // Add repositories to publish to here. + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/PTOM76/maven") + credentials { + username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_ACTOR") + password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") + } + } } } \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index abe093c85..7210a58f3 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -86,13 +86,21 @@ components.java { publishing { publications { mavenForge(MavenPublication) { - artifactId = info.archives_base_name + "-" + project.name + artifactId = info.archives_base_name + "-" + project.name + "-" + rootProject.minecraft_version + version = info.mod_version from components.java } } // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // Add repositories to publish to here. + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/PTOM76/maven") + credentials { + username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_ACTOR") + password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") + } + } } } \ No newline at end of file From f873a7fe73389b05bfc38ca253a21261792e54b0 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Mon, 23 Jun 2025 20:42:44 +0900 Subject: [PATCH 527/617] [cp] docs: update version references to include GitHub Packages for clarity --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d06519293..ca3eaecdb 100644 --- a/README.md +++ b/README.md @@ -41,11 +41,11 @@ dependencies { `gradle.properties`に以下のように記述してください。 ```properties -# Example: mcpitanlib_version=+1.18.2:3.2.4 +# Example: mcpitanlib_version=+1.18.2:3.3.3 mcpitanlib_version=+x.x.x:x.x.x ``` -バージョンは[maven.pitan76.net](https://maven.pitan76.net/net/pitan76/)で確認してください。 +バージョンは[GitHub Packages](https://github.com/PTOM76/maven/packages/?q=net.pitan76.mcpitanlib) (3.3.3以降) or [maven.pitan76.net](https://maven.pitan76.net/net/pitan76/) (3.3.3以前)で確認してください。 MCPitanLibを用いたMOD開発は「common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java」を参考にしてください。 @@ -92,7 +92,7 @@ Write as follows in `gradle.properties`. mcpitanlib_version=+x.x.x:x.x.x ``` -Please check the version at [maven.pitan76.net](https://maven.pitan76.net/net/pitan76/). +Please check the version at [GitHub Packages](https://github.com/PTOM76/maven/packages/?q=net.pitan76.mcpitanlib) (for versions 3.3.3 and later) or [maven.pitan76.net](https://maven.pitan76.net/net/pitan76/) (for versions before 3.3.3). For MOD development using MCPitanLib, refer to "common/src/main/java/net/pitan76/mcpitanlib/test/ExampleMod.java". From a6db2713374b499ca422bfd0022ffaea4bd05736 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:03:57 +0900 Subject: [PATCH 528/617] [cp] feat: add methods to check emptiness and copy NbtRWArgs in NbtRWArgs, ReadNbtArgs, and WriteNbtArgs --- .../mcpitanlib/api/event/nbt/NbtRWArgs.java | 16 ++++++++++++++++ .../mcpitanlib/api/event/nbt/ReadNbtArgs.java | 10 ++++++++++ .../mcpitanlib/api/event/nbt/WriteNbtArgs.java | 10 ++++++++++ 3 files changed, 36 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java index fa66d8d53..a1b0fc2fd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/NbtRWArgs.java @@ -27,4 +27,20 @@ public CompatRegistryLookup getRegistryLookup() { public boolean hasRegistryLookup() { return registryLookup != null; } + + public boolean isNbtEmpty() { + return nbt != null && !nbt.isEmpty(); + } + + public boolean isViewEmpty() { + return false; + } + + public boolean isEmpty() { + return isNbtEmpty() || isViewEmpty(); + } + + public NbtRWArgs copy() { + return new NbtRWArgs(nbt.copy(), registryLookup); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java index 22259251c..e4eeade63 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/ReadNbtArgs.java @@ -12,4 +12,14 @@ public ReadNbtArgs(NbtCompound nbt) { public ReadNbtArgs(NbtCompound nbt, CompatRegistryLookup registryLookup) { super(nbt, registryLookup); } + + @Override + public boolean isViewEmpty() { + return false; + } + + @Override + public NbtRWArgs copy() { + return new ReadNbtArgs(nbt.copy(), registryLookup); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java index 8295cc754..01c510792 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/nbt/WriteNbtArgs.java @@ -12,4 +12,14 @@ public WriteNbtArgs(NbtCompound nbt, CompatRegistryLookup registryLookup) { public WriteNbtArgs(NbtCompound nbt) { super(nbt); } + + @Override + public boolean isViewEmpty() { + return false; + } + + @Override + public NbtRWArgs copy() { + return new WriteNbtArgs(nbt.copy(), registryLookup); + } } From 09dadfbae95cb4ec950a4fc0f4cc4b6210ce4b96 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 28 Jun 2025 00:58:41 +0900 Subject: [PATCH 529/617] [cp] feat: add ClippedInventory and ClippedItemStackList for inventory management --- .../util/collection/ClippedItemStackList.java | 100 ++++++++++++++++++ .../api/util/inventory/ClippedInventory.java | 91 ++++++++++++++++ .../api/util/inventory/ICompatInventory.java | 60 +++++++++++ 3 files changed, 251 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ClippedItemStackList.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ClippedInventory.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ICompatInventory.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ClippedItemStackList.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ClippedItemStackList.java new file mode 100644 index 000000000..432caf05f --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/collection/ClippedItemStackList.java @@ -0,0 +1,100 @@ +package net.pitan76.mcpitanlib.api.util.collection; + +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.util.inventory.ClippedInventory; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; +import org.jetbrains.annotations.NotNull; + +public class ClippedItemStackList extends ItemStackList { + + public final ItemStackList list; + public final int start; + public final int end; + + public ClippedItemStackList(ItemStackList list, int start, int end) { + super(null, null); + this.list = list; + if (start < 0 || end > list.size() || start >= end) { + throw new IllegalArgumentException("Invalid start or end indices for clipping item stack list."); + } + this.start = start; + this.end = end; + } + + public static ClippedItemStackList of(ItemStackList list, int start, int end) { + return new ClippedItemStackList(list, start, end); + } + + public static ClippedItemStackList of(ItemStackList list) { + return of(list, 0, list.size()); + } + + public static ClippedItemStackList of(ItemStackList list, int start) { + return of(list, start, list.size()); + } + + @Override + public int size() { + return end - start; + } + + @Override + public Inventory toInventory() { + return ClippedInventory.of(list.toInventory(), start, end); + } + + @Override + public DefaultedList defaultedList() { + DefaultedList clippedList = DefaultedList.ofSize(size(), ItemStackUtil.empty()); + for (int i = 0; i < size(); i++) + clippedList.set(i, get(i)); + + return clippedList; + } + + @Override + public @NotNull ItemStack get(int index) { + return list.get(start + index); + } + + @Override + public ItemStack set(int index, ItemStack element) { + return list.set(start + index, element); + } + + @Override + public ItemStack remove(int index) { + return list.remove(start + index); + } + + @Override + public boolean contains(Object o) { + for (int i = start; i < end; i++) { + if (list.get(i).equals(o)) { + return true; + } + } + return false; + } + + @Override + public boolean isEmpty() { + for (int i = start; i < end; i++) { + if (!list.get(i).isEmpty()) { + return false; + } + } + return true; + } + + @Override + public void clear() { + for (int i = start; i < end; i++) { + list.set(i, ItemStackUtil.empty()); + } + } + + +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ClippedInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ClippedInventory.java new file mode 100644 index 000000000..49bcbc196 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ClippedInventory.java @@ -0,0 +1,91 @@ +package net.pitan76.mcpitanlib.api.util.inventory; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.util.ItemStackUtil; + +public class ClippedInventory implements Inventory, ICompatInventory { + + private final Inventory inventory; + private final int start; + private final int end; + + public static ClippedInventory of(Inventory inventory, int start, int end) { + if (start < 0 || end > inventory.size() || start >= end) { + throw new IllegalArgumentException("Invalid start or end indices for clipping inventory."); + } + return new ClippedInventory(inventory, start, end); + } + + public static ClippedInventory of(Inventory inventory) { + return of(inventory, 0, inventory.size()); + } + + public static ClippedInventory of(Inventory inventory, int start) { + return of(inventory, start, inventory.size()); + } + + public ClippedInventory(Inventory inventory, int start, int end) { + this.inventory = inventory; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return end - start; + } + + @Override + public boolean isEmpty() { + for (int i = start; i < end; i++) { + if (!inventory.getStack(i).isEmpty()) { + return false; + } + } + return true; + } + + @Override + public ItemStack getStack(int slot) { + return inventory.getStack(start + slot); + } + + @Override + public ItemStack removeStack(int slot, int amount) { + return inventory.removeStack(start + slot, amount); + } + + @Override + public ItemStack removeStack(int slot) { + return inventory.removeStack(start + slot); + } + + @Override + public void setStack(int slot, ItemStack stack) { + inventory.setStack(start + slot, stack); + } + + @Override + public void markDirty() { + inventory.markDirty(); + } + + @Override + public boolean canPlayerUse(PlayerEntity player) { + return inventory.canPlayerUse(player); + } + + @Override + public void clear() { + for (int i = start; i < end; i++) { + inventory.setStack(i, ItemStackUtil.empty()); + } + } + + @Override + public int getMaxCountPerStack() { + return inventory.getMaxCountPerStack(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ICompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ICompatInventory.java new file mode 100644 index 000000000..b33afd6be --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/ICompatInventory.java @@ -0,0 +1,60 @@ +package net.pitan76.mcpitanlib.api.util.inventory; + +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.entity.Player; + +public interface ICompatInventory extends Inventory { + default void callSetStack(int slot, ItemStack stack) { + setStack(slot, stack); + } + + default ItemStack callGetStack(int slot) { + return getStack(slot); + } + + default int callSize() { + return size(); + } + + default boolean callIsEmpty() { + return isEmpty(); + } + + default ItemStack callRemoveStack(int slot, int amount) { + return removeStack(slot, amount); + } + + default ItemStack callRemoveStack(int slot) { + return removeStack(slot); + } + + default void callClear() { + clear(); + } + + default void callMarkDirty() { + markDirty(); + } + + default boolean callCanPlayerUse(net.minecraft.entity.player.PlayerEntity player) { + return canPlayerUse(player); + } + + default boolean canPlayerUse(Player player) { + return canPlayerUse(player.getEntity()); + } + + + default void callSetStack(int slot, net.pitan76.mcpitanlib.midohra.item.ItemStack stack) { + setStack(slot, stack.toMinecraft()); + } + + default net.pitan76.mcpitanlib.midohra.item.ItemStack callGetStackAsMidohra(int slot) { + return net.pitan76.mcpitanlib.midohra.item.ItemStack.of(getStack(slot)); + } + + default int callGetMaxCountPerStack() { + return getMaxCountPerStack(); + } +} From 141b515bad8e87df9622c986e2fd3dc1efe65337 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 28 Jun 2025 23:31:56 +0900 Subject: [PATCH 530/617] [cp] bump version 3.3.4 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 86868d838..841eb2094 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.3 +mod_version=3.3.4 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 43622e8ce55aaa7325e91b80b911cda62a7bec1c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 5 Jul 2025 18:53:47 +0900 Subject: [PATCH 531/617] [cp] bump version 3.3.5 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 841eb2094..c97c52827 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.4 +mod_version=3.3.5 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 48e7bae5c26598952777c2ad59f70498f150d7ff Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 5 Jul 2025 23:12:20 +0900 Subject: [PATCH 532/617] [cp] bump version 3.3.6 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index c97c52827..40ebd3d03 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.5 +mod_version=3.3.6 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 206b41c79108421c782316b94b6e2a581f03610c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 10:39:01 +0900 Subject: [PATCH 533/617] [cp] fix readNbt method to use ReadNbtArgs --- .../mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java | 7 ++++++- .../api/transfer/fluid/v1/fabric/FabricFluidStorage.java | 4 ++-- .../api/transfer/fluid/v1/forge/ForgeFluidStorage.java | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java b/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java index be5e27766..bc44b3d05 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/IFluidStorage.java @@ -3,6 +3,7 @@ import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.nbt.NbtCompound; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.midohra.fluid.FluidWrapper; @@ -22,7 +23,11 @@ public interface IFluidStorage { void writeNbt(WriteNbtArgs args); - void readNbt(WriteNbtArgs args); + void readNbt(ReadNbtArgs args); + + default void readNbt(WriteNbtArgs args) { + readNbt(new ReadNbtArgs(args.getNbt(), args.getRegistryLookup())); + } default long insert(IFluidVariant variant, long maxAmount) { return insert(variant, maxAmount, false); diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java index 91cd250ed..c1f837a5c 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/fabric/FabricFluidStorage.java @@ -2,6 +2,7 @@ import net.fabricmc.fabric.api.transfer.v1.fluid.base.SingleFluidStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; import net.pitan76.mcpitanlib.api.extra.transfer.util.FluidStorageUtil; import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; @@ -73,8 +74,7 @@ public void writeNbt(WriteNbtArgs args) { } @Override - public void readNbt(WriteNbtArgs args) { + public void readNbt(ReadNbtArgs args) { FluidStorageUtil.readNbt(storage, args); - } } diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidStorage.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidStorage.java index fc53ff942..52ef074e5 100644 --- a/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidStorage.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/transfer/fluid/v1/forge/ForgeFluidStorage.java @@ -3,6 +3,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidStorage; import net.pitan76.mcpitanlib.api.transfer.fluid.v1.IFluidVariant; @@ -73,7 +74,7 @@ public void writeNbt(WriteNbtArgs args) { } @Override - public void readNbt(WriteNbtArgs args) { + public void readNbt(ReadNbtArgs args) { storage.readFromNBT(args.nbt); } } From 969a8fd0ed31a71da7cc2ef877bdeb914d80db1f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 10:40:21 +0900 Subject: [PATCH 534/617] [cp] fix: handle null Identifier in fromMinecraft method --- .../java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java index dafd1d855..999fa63cd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/CompatIdentifier.java @@ -142,6 +142,7 @@ public Identifier toMinecraft() { * @return The Identifier. */ public static CompatIdentifier fromMinecraft(Identifier id) { + if (id == null) return EMPTY; return of(id.toString()); } From 13164c391f3708398548fbbb0eedc4984c5029d0 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 10:42:40 +0900 Subject: [PATCH 535/617] [cp] feat: add toString and getName methods to Direction class --- .../pitan76/mcpitanlib/midohra/util/math/Direction.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java index 2ae99c417..c334c25ef 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java @@ -97,4 +97,12 @@ public Direction rotateYCounterclockwise() { return of(getRaw().rotateYCounterclockwise()); } + @Override + public String toString() { + return getRaw().toString(); + } + + public String getName() { + return getRaw().name(); + } } From 9b85d5f73d36e9c29d7efe61e6932fdba7c1af8f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 10:52:50 +0900 Subject: [PATCH 536/617] [cp] feat: add ChunkManagerUtil for chunk update management --- .../api/util/world/ChunkManagerUtil.java | 26 +++++++++++++++++++ .../api/util/world/ServerWorldUtil.java | 5 ++++ .../world/chunk/ServerChunkManager.java | 6 +++++ 3 files changed, 37 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ChunkManagerUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ChunkManagerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ChunkManagerUtil.java new file mode 100644 index 000000000..436192e5d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ChunkManagerUtil.java @@ -0,0 +1,26 @@ +package net.pitan76.mcpitanlib.api.util.world; + +import net.minecraft.server.world.ServerChunkManager; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; + +public class ChunkManagerUtil { + + public static void markForUpdate(ServerChunkManager manager, BlockPos pos) { + markForUpdate(manager, pos.toRaw()); + } + + public static void markForUpdate(ServerChunkManager manager, net.minecraft.util.math.BlockPos pos) { + manager.markForUpdate(pos); + } + + public static void markForUpdate(ServerWorld world, net.minecraft.util.math.BlockPos pos) { + markForUpdate(ServerWorldUtil.getChunkManager(world), pos); + } + + public static void markForUpdate(World world, net.minecraft.util.math.BlockPos pos) { + if (!(world instanceof ServerWorld)) return; + markForUpdate((ServerWorld) world, pos); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java index 2b1202093..5d1097d1d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/ServerWorldUtil.java @@ -6,6 +6,7 @@ import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.particle.ParticleEffect; +import net.minecraft.server.world.ServerChunkManager; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.pitan76.mcpitanlib.api.entity.Player; @@ -36,4 +37,8 @@ public static List getDroppedStacksOnBlock(BlockState state, ServerWo public static List getDroppedStacksOnBlock(BlockState state, ServerWorld world, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity entity, ItemStack stack) { return Block.getDroppedStacks(state, world, pos, blockEntity, entity, stack); } + + public static ServerChunkManager getChunkManager(ServerWorld world) { + return world.getChunkManager(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ServerChunkManager.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ServerChunkManager.java index f4d438620..281c72dbb 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ServerChunkManager.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ServerChunkManager.java @@ -1,5 +1,7 @@ package net.pitan76.mcpitanlib.midohra.world.chunk; +import net.pitan76.mcpitanlib.api.util.world.ChunkManagerUtil; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; import net.pitan76.mcpitanlib.midohra.util.math.ChunkPos; import net.pitan76.mcpitanlib.midohra.world.ServerWorld; import net.pitan76.mcpitanlib.midohra.world.World; @@ -42,4 +44,8 @@ public void addTicket(ChunkTicketType ticketType, ChunkPos pos, int radiu public void removeTicket(ChunkTicketType ticketType, ChunkPos pos, int radius, T argument) { getRaw().removeTicket(ticketType.getRaw(), pos.getRaw(), radius, argument); } + + public void markForUpdate(BlockPos pos) { + ChunkManagerUtil.markForUpdate(getRaw(), pos); + } } From 4727a2538e6f1ce26ea2e9a626a55ae575da1445 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 12:29:25 +0900 Subject: [PATCH 537/617] [cp] feat: add BlockColorEvent and related classes for block color management --- .../api/client/color/BlockColorEvent.java | 83 +++++++++++++++++++ .../color/CompatBlockColorProvider.java | 15 ++++ .../client/registry/CompatRegistryClient.java | 11 +++ .../api/tile/RenderDataBlockEntity.java | 14 ++++ .../color/fabric/BlockColorEventImpl.java | 18 ++++ .../fabric/CompatRegistryClientImpl.java | 16 ++++ .../api/tile/RenderAttachmentBlockEntity.java | 21 +++++ .../fabric/RenderDataBlockEntityImpl.java | 14 ++++ .../forge/CompatRegistryClientImpl.java | 38 +++++++++ 9 files changed, 230 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/color/BlockColorEvent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/color/CompatBlockColorProvider.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderDataBlockEntity.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/client/color/fabric/BlockColorEventImpl.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/client/registry/fabric/CompatRegistryClientImpl.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderAttachmentBlockEntity.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/fabric/RenderDataBlockEntityImpl.java create mode 100644 forge/src/main/java/net/pitan76/mcpitanlib/api/client/registry/forge/CompatRegistryClientImpl.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/color/BlockColorEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/color/BlockColorEvent.java new file mode 100644 index 000000000..7e2873166 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/color/BlockColorEvent.java @@ -0,0 +1,83 @@ +package net.pitan76.mcpitanlib.api.client.color; + +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockRenderView; +import net.pitan76.mcpitanlib.midohra.world.BlockView; +import org.jetbrains.annotations.Nullable; + +public class BlockColorEvent { + private final BlockState state; + private final BlockRenderView world; + private final BlockPos pos; + private final int tintIndex; + + public BlockColorEvent(BlockState state, @Nullable BlockRenderView world, @Nullable BlockPos pos, int tintIndex) { + this.state = state; + this.world = world; + this.pos = pos; + this.tintIndex = tintIndex; + } + + public BlockState getState() { + return state; + } + + public BlockRenderView getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public int getTintIndex() { + return tintIndex; + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getPos()); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getState()); + } + + public boolean hasWorld() { + return getWorld() != null; + } + + public boolean hasPos() { + return getPos() != null; + } + + public BlockView getMidohraWorld() { + if (!hasWorld()) return null; + return net.pitan76.mcpitanlib.midohra.world.BlockView.of(getWorld()); + } + + public BlockEntity getBlockEntity() { + if (!hasWorld() || !hasPos()) return null; + return getWorld().getBlockEntity(getPos()); + } + + public int getDefaultColor() { + return 0xFFFFFF; + } + + public Object getRenderData() { + if (!hasWorld() || !hasPos()) return null; + return getRenderDataD(getBlockEntity()); + } + + @ExpectPlatform + protected static Object getRenderDataD(BlockEntity blockEntity) { + if (blockEntity instanceof net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) { + return ((net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) blockEntity).getCompatRenderData(); + } + + return null; + } +} \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/color/CompatBlockColorProvider.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/color/CompatBlockColorProvider.java new file mode 100644 index 000000000..50ceb12f4 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/color/CompatBlockColorProvider.java @@ -0,0 +1,15 @@ +package net.pitan76.mcpitanlib.api.client.color; + +import net.minecraft.block.BlockState; +import net.minecraft.client.color.block.BlockColorProvider; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockRenderView; +import org.jetbrains.annotations.Nullable; + +public interface CompatBlockColorProvider extends BlockColorProvider { + default int getColor(BlockState state, @Nullable BlockRenderView world, @Nullable BlockPos pos, int tintIndex) { + return getColor(new BlockColorEvent(state, world, pos, tintIndex)); + } + + int getColor(BlockColorEvent e); +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index ffd532b46..b735c8558 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -11,6 +11,7 @@ import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.client.color.block.BlockColorProvider; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; @@ -40,6 +41,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.MCPitanLib; +import net.pitan76.mcpitanlib.api.client.color.CompatBlockColorProvider; import net.pitan76.mcpitanlib.api.client.render.CompatRenderLayer; import net.pitan76.mcpitanlib.api.client.render.EntityModelLayerContext; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; @@ -208,4 +210,13 @@ public static void registerRenderTypeBlock(CompatRenderLayer layer, Block block) public static void registerRenderTypeFluid(CompatRenderLayer layer, Fluid fluid) { registerRenderTypeFluid(layer.layer, fluid); } + + @ExpectPlatform + public static void registerColorProviderBlock(BlockColorProvider provider, Block... blocks) { + throw new AssertionError("This method should be replaced by the platform implementation"); + } + + public static void registerColorProviderBlock(CompatBlockColorProvider provider, Block... blocks) { + registerColorProviderBlock((BlockColorProvider) provider, blocks); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderDataBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderDataBlockEntity.java new file mode 100644 index 000000000..4ce375ada --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderDataBlockEntity.java @@ -0,0 +1,14 @@ +package net.pitan76.mcpitanlib.api.tile; + +import org.jetbrains.annotations.Nullable; + +@Deprecated +public interface RenderDataBlockEntity { + + @Nullable + Object getCompatRenderData(); + + default boolean hasCompatRenderData() { + return getCompatRenderData() != null; + } +} diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/color/fabric/BlockColorEventImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/color/fabric/BlockColorEventImpl.java new file mode 100644 index 000000000..a4eef8c36 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/color/fabric/BlockColorEventImpl.java @@ -0,0 +1,18 @@ +package net.pitan76.mcpitanlib.api.client.color.fabric; + +import net.minecraft.block.entity.BlockEntity; +import net.pitan76.mcpitanlib.api.tile.RenderAttachmentBlockEntity; + +public class BlockColorEventImpl { + public static Object getRenderDataD(BlockEntity blockEntity) { + if (blockEntity instanceof RenderAttachmentBlockEntity) { + return ((RenderAttachmentBlockEntity) blockEntity).getCompatRenderData(); + } + + if (blockEntity instanceof net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) { + return ((net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) blockEntity).getCompatRenderData(); + } + + return blockEntity.getRenderData(); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/registry/fabric/CompatRegistryClientImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/registry/fabric/CompatRegistryClientImpl.java new file mode 100644 index 000000000..386e88ac2 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/registry/fabric/CompatRegistryClientImpl.java @@ -0,0 +1,16 @@ +package net.pitan76.mcpitanlib.api.client.registry.fabric; + +import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; +import net.minecraft.block.Block; +import net.minecraft.client.color.block.BlockColorProvider; + +public class CompatRegistryClientImpl { + + public static void registerColorProviderBlock(BlockColorProvider provider, Block... blocks) { + if (blocks == null || blocks.length == 0) { + ColorProviderRegistry.BLOCK.register(provider); + } else { + ColorProviderRegistry.BLOCK.register(provider, blocks); + } + } +} diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderAttachmentBlockEntity.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderAttachmentBlockEntity.java new file mode 100644 index 000000000..94bf987ba --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderAttachmentBlockEntity.java @@ -0,0 +1,21 @@ +package net.pitan76.mcpitanlib.api.tile; + +import net.fabricmc.fabric.api.blockview.v2.RenderDataBlockEntity; +import org.jetbrains.annotations.Nullable; + +public interface RenderAttachmentBlockEntity extends RenderDataBlockEntity { + + @Override + @Nullable + @Deprecated + default Object getRenderData() { + return getCompatRenderData(); + } + + default boolean hasCompatRenderData() { + return getCompatRenderData() != null; + } + + @Nullable + Object getCompatRenderData(); +} diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/fabric/RenderDataBlockEntityImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/fabric/RenderDataBlockEntityImpl.java new file mode 100644 index 000000000..45966b733 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/fabric/RenderDataBlockEntityImpl.java @@ -0,0 +1,14 @@ +package net.pitan76.mcpitanlib.api.tile.fabric; + +import net.fabricmc.fabric.api.blockview.v2.RenderDataBlockEntity; + +@Deprecated +public interface RenderDataBlockEntityImpl extends RenderDataBlockEntity { + + default Object getRenderData() { + if (this instanceof net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) { + return ((net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) this).getCompatRenderData(); + } + return null; + } +} diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/registry/forge/CompatRegistryClientImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/registry/forge/CompatRegistryClientImpl.java new file mode 100644 index 000000000..b8690e2dd --- /dev/null +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/registry/forge/CompatRegistryClientImpl.java @@ -0,0 +1,38 @@ +package net.pitan76.mcpitanlib.api.client.registry.forge; + +import net.minecraft.block.Block; +import net.minecraft.client.color.block.BlockColorProvider; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterColorHandlersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.pitan76.mcpitanlib.MCPitanLib; + +import java.util.HashMap; +import java.util.Map; + +@Mod.EventBusSubscriber(modid = MCPitanLib.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) +public class CompatRegistryClientImpl { + + public static Map blockColorProviders = new HashMap<>(); + + public static void registerColorProviderBlock(BlockColorProvider provider, Block... blocks) { + blockColorProviders.put(provider, blocks); + } + + @SubscribeEvent + public static void registerBlockColors(RegisterColorHandlersEvent.Block event){ + if (blockColorProviders.isEmpty()) return; + + for (Map.Entry entry : blockColorProviders.entrySet()) { + BlockColorProvider provider = entry.getKey(); + Block[] blocks = entry.getValue(); + + if (blocks == null || blocks.length == 0) { + event.register(provider); + } else { + event.register(provider, blocks); + } + } + } +} From 3aef4f5cb9d1914576a5c63ef9ec47f63d8c9c5b Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 12:31:56 +0900 Subject: [PATCH 538/617] [cp] feat: add ExpectPlatform annotation for compatibility management --- .../mcpitanlib/api/client/registry/CompatRegistryClient.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java index b735c8558..e790dd77a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/CompatRegistryClient.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.client.registry; +import dev.architectury.injectables.annotations.ExpectPlatform; import dev.architectury.registry.client.level.entity.EntityModelLayerRegistry; import dev.architectury.registry.client.level.entity.EntityRendererRegistry; import dev.architectury.registry.client.particle.ParticleProviderRegistry; From 8802522d98698cc250ed51d48b0f84907848092e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 12:36:25 +0900 Subject: [PATCH 539/617] [cp] fix RenderAttachmentBlockEntity and RenderDataBlockEntityImpl for new rendering API --- .../mcpitanlib/api/tile/RenderAttachmentBlockEntity.java | 5 ++--- .../api/tile/fabric/RenderDataBlockEntityImpl.java | 9 ++++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderAttachmentBlockEntity.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderAttachmentBlockEntity.java index 94bf987ba..9f454629e 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderAttachmentBlockEntity.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/RenderAttachmentBlockEntity.java @@ -1,14 +1,13 @@ package net.pitan76.mcpitanlib.api.tile; -import net.fabricmc.fabric.api.blockview.v2.RenderDataBlockEntity; import org.jetbrains.annotations.Nullable; -public interface RenderAttachmentBlockEntity extends RenderDataBlockEntity { +public interface RenderAttachmentBlockEntity extends net.fabricmc.fabric.api.rendering.data.v1.RenderAttachmentBlockEntity { @Override @Nullable @Deprecated - default Object getRenderData() { + default Object getRenderAttachmentData() { return getCompatRenderData(); } diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/fabric/RenderDataBlockEntityImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/fabric/RenderDataBlockEntityImpl.java index 45966b733..f2001f114 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/fabric/RenderDataBlockEntityImpl.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/tile/fabric/RenderDataBlockEntityImpl.java @@ -1,11 +1,14 @@ package net.pitan76.mcpitanlib.api.tile.fabric; -import net.fabricmc.fabric.api.blockview.v2.RenderDataBlockEntity; +import net.fabricmc.fabric.api.rendering.data.v1.RenderAttachmentBlockEntity; +import org.jetbrains.annotations.Nullable; @Deprecated -public interface RenderDataBlockEntityImpl extends RenderDataBlockEntity { +public interface RenderDataBlockEntityImpl extends RenderAttachmentBlockEntity { - default Object getRenderData() { + @Override + @Nullable + default Object getRenderAttachmentData() { if (this instanceof net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) { return ((net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) this).getCompatRenderData(); } From 5cd3ce90a624d4e5b355cfa7f36274d845b0e88e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 12:37:06 +0900 Subject: [PATCH 540/617] [cp] fix RenderAttachmentBlockEntity and RenderDataBlockEntityImpl for new rendering API-2 --- .../api/client/color/fabric/BlockColorEventImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/color/fabric/BlockColorEventImpl.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/color/fabric/BlockColorEventImpl.java index a4eef8c36..672b1ec76 100644 --- a/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/color/fabric/BlockColorEventImpl.java +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/client/color/fabric/BlockColorEventImpl.java @@ -13,6 +13,10 @@ public static Object getRenderDataD(BlockEntity blockEntity) { return ((net.pitan76.mcpitanlib.api.tile.RenderDataBlockEntity) blockEntity).getCompatRenderData(); } - return blockEntity.getRenderData(); + if (blockEntity instanceof net.fabricmc.fabric.api.rendering.data.v1.RenderAttachmentBlockEntity) { + return ((net.fabricmc.fabric.api.rendering.data.v1.RenderAttachmentBlockEntity) blockEntity).getRenderAttachmentData(); + } + + return null; } } \ No newline at end of file From 2372f05161fcae8496214bde36d82220ac4126be Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 15:03:23 +0900 Subject: [PATCH 541/617] [cp] feat: add methods for item stack serialization in NbtRWUtil --- .../pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java index 1c2b441ec..e57b9b23a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/nbt/v2/NbtRWUtil.java @@ -1,5 +1,6 @@ package net.pitan76.mcpitanlib.api.util.nbt.v2; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; @@ -14,6 +15,8 @@ import net.pitan76.mcpitanlib.api.util.nbt.InvRWUtil; import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import java.util.Optional; + public class NbtRWUtil extends net.pitan76.mcpitanlib.api.util.nbt.NbtRWUtil { public static void putInv(WriteNbtArgs args, ItemStackList stacks) { InvRWUtil.putInv(args, stacks); @@ -104,4 +107,12 @@ public static net.minecraft.util.math.BlockPos getBlockPosV(ReadNbtArgs args, St int z = getInt(args2, "z"); return PosUtil.flooredBlockPos(x, y, z); } + + public static void putItemStack(WriteNbtArgs args, String key, ItemStack stack) { + NbtUtil.putItemStack(args.getNbt(), key, stack, args.getRegistryLookup()); + } + + public static Optional getItemStack(ReadNbtArgs args, String key) { + return NbtUtil.getItemStack(args.getNbt(), key, args.getRegistryLookup()); + } } From b6b9eec6368e908dcb5d902c604f1b9cb358fbc0 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 15:13:15 +0900 Subject: [PATCH 542/617] [cp] fix: update block color registration to use new ColorHandlerEvent API --- .../client/registry/forge/CompatRegistryClientImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/registry/forge/CompatRegistryClientImpl.java b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/registry/forge/CompatRegistryClientImpl.java index b8690e2dd..e188b233e 100644 --- a/forge/src/main/java/net/pitan76/mcpitanlib/api/client/registry/forge/CompatRegistryClientImpl.java +++ b/forge/src/main/java/net/pitan76/mcpitanlib/api/client/registry/forge/CompatRegistryClientImpl.java @@ -3,7 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.client.color.block.BlockColorProvider; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RegisterColorHandlersEvent; +import net.minecraftforge.client.event.ColorHandlerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.pitan76.mcpitanlib.MCPitanLib; @@ -21,7 +21,7 @@ public static void registerColorProviderBlock(BlockColorProvider provider, Block } @SubscribeEvent - public static void registerBlockColors(RegisterColorHandlersEvent.Block event){ + public static void registerBlockColors(ColorHandlerEvent.Block event){ if (blockColorProviders.isEmpty()) return; for (Map.Entry entry : blockColorProviders.entrySet()) { @@ -29,9 +29,9 @@ public static void registerBlockColors(RegisterColorHandlersEvent.Block event){ Block[] blocks = entry.getValue(); if (blocks == null || blocks.length == 0) { - event.register(provider); + event.getBlockColors().registerColorProvider(provider); } else { - event.register(provider, blocks); + event.getBlockColors().registerColorProvider(provider, blocks); } } } From c3a91c18096015b66377bf4b929478d9e310f498 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 15:18:15 +0900 Subject: [PATCH 543/617] [cp] bump version 3.3.7 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 40ebd3d03..c10e0bc40 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.6 +mod_version=3.3.7 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 50127444cb0fd8422953b0f92cf761709a3779dc Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 17:24:26 +0900 Subject: [PATCH 544/617] [cp] feat: add Registry of ChunkTicketType --- .../mcpitanlib/api/registry/v2/CompatRegistryV2.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index 525158b80..e42320266 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -13,6 +13,7 @@ import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.enchantment.CompatEnchantment; import net.pitan76.mcpitanlib.api.entity.effect.CompatStatusEffect; @@ -28,6 +29,7 @@ import net.pitan76.mcpitanlib.api.sound.RegistryResultCompatSoundEvent; import net.pitan76.mcpitanlib.api.tile.BlockEntityTypeBuilder; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.world.chunk.ChunkTicketType; import java.util.function.Supplier; @@ -158,6 +160,10 @@ public RegistryResult registerItemGroup(CreativeTabBuilder builder) { return cr1.registerItemGroup(builder.getIdentifier(), builder); } + public RegistryResult> registerChunkTicketType(Identifier id, Supplier> supplier) { + return SupplierResult.of(supplier); + } + public void registerFuel(Supplier itemSupplier, int time) { FuelRegistry.register(itemSupplier::get, time, cr1.getNamespace()); } From 90bb4b383807c2784bc0cd41045899b638446978 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 17:26:07 +0900 Subject: [PATCH 545/617] [cp] bump version 3.3.8 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index c10e0bc40..e324cfa10 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.7 +mod_version=3.3.8 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 30811a002de775fdb8ca1ebf3fc349ba1d548eeb Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 6 Jul 2025 17:19:56 +0900 Subject: [PATCH 546/617] [cp] feat: implement hashCode and equals methods for ChunkTicketType --- .../midohra/world/chunk/ChunkTicketType.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java index 03c543559..8b3a65c63 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/chunk/ChunkTicketType.java @@ -76,4 +76,17 @@ private static net.minecraft.server.world.ChunkTicketType _of(String name net.minecraft.server.world.ChunkTicketType type = net.minecraft.server.world.ChunkTicketType.create(name, Comparator.comparingLong(ChunkPos::toLong), (int) expiryTicks); return (net.minecraft.server.world.ChunkTicketType) type; } + + @Override + public int hashCode() { + return ticketType.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof ChunkTicketType)) return false; + ChunkTicketType that = (ChunkTicketType) obj; + return ticketType.equals(that.ticketType); + } } From fb78821b94a8ddb045e522600571c834d7c8841c Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:35:43 +0900 Subject: [PATCH 547/617] [cp] bump version 3.3.9 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index e324cfa10..26aea2976 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.8 +mod_version=3.3.9 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From fda0770786ddd3625fdd983f3c8e4791ea065f50 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 12 Jul 2025 09:40:39 +0900 Subject: [PATCH 548/617] [cp] version neoforge only fix.1 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 26aea2976..c178f5cfa 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.9 +mod_version=3.3.8-fix.1 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From 01190ca8bc0d07815b0df60d9db787270fd603e9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 12 Jul 2025 10:43:44 +0900 Subject: [PATCH 549/617] =?UTF-8?q?[cp]=20add=20register=20for=E3=80=80Com?= =?UTF-8?q?patIdentifier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java index e42320266..b72feed66 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/registry/v2/CompatRegistryV2.java @@ -164,6 +164,10 @@ public RegistryResult> registerChunkTicketType(Identifier id, return SupplierResult.of(supplier); } + public RegistryResult> registerChunkTicketType(CompatIdentifier id, Supplier> supplier) { + return registerChunkTicketType(id.toMinecraft(), supplier); + } + public void registerFuel(Supplier itemSupplier, int time) { FuelRegistry.register(itemSupplier::get, time, cr1.getNamespace()); } From 11b1c7dea0f885fc44a4ac7243f9b7692f33c5d5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 12 Jul 2025 10:44:07 +0900 Subject: [PATCH 550/617] [cp] bump version 3.3.9 --- info.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/info.properties b/info.properties index c178f5cfa..eb782cbb0 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.8-fix.1 +mod_version=3.3.9 maven_group=net.pitan76 -changelog=add APIs \ No newline at end of file +changelog=fix APIs \ No newline at end of file From 4b9b1c9fd2363cec89dba72407879b501787c15e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 20 Jul 2025 00:14:10 +0900 Subject: [PATCH 551/617] [cp] changelog --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index eb782cbb0..26aea2976 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib mod_version=3.3.9 maven_group=net.pitan76 -changelog=fix APIs \ No newline at end of file +changelog=add APIs \ No newline at end of file From 2fb3477c7c3f0e4b0b46d5f80b1fe59fb16008ea Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 10 Aug 2025 20:53:09 +0900 Subject: [PATCH 552/617] [cp] version 3.4.0 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 26aea2976..930c84144 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.3.9 +mod_version=3.4.0 maven_group=net.pitan76 changelog=add APIs \ No newline at end of file From d56603a3762bf6e017fe0da5bc8c1fd13ec06fb9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 10 Aug 2025 20:51:40 +0900 Subject: [PATCH 553/617] [cp] fix-1204 --- .../attribute/AttrModifierOperation.java | 54 +++++++++++++ .../AttributeModifiersComponentBuilder.java | 34 +++++++++ .../CompatAttributeModifierSlot.java | 29 +++++++ .../CompatAttributeModifiersComponent.java | 18 +++++ .../attribute/CompatEntityAttribute.java | 48 ++++++++++++ .../CompatEntityAttributeInstance.java | 72 ++++++++++++++++++ .../CompatEntityAttributeModifier.java | 57 ++++++++++++++ .../attribute/CompatEntityAttributes.java | 27 +++++++ .../item/equipment/CompatEquipmentAsset.java | 28 +++++++ .../equipment/CompatEquippableComponent.java | 9 +++ .../equipment/EquippableComponentBuilder.java | 76 +++++++++++++++++++ .../api/item/v2/CompatibleItemSettings.java | 20 +++++ .../api/sound/CompatSoundEvents.java | 8 ++ 13 files changed, 480 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/AttrModifierOperation.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/AttributeModifiersComponentBuilder.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatAttributeModifierSlot.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatAttributeModifiersComponent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttribute.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributeInstance.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributeModifier.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributes.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/CompatEquipmentAsset.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/CompatEquippableComponent.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/EquippableComponentBuilder.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/AttrModifierOperation.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/AttrModifierOperation.java new file mode 100644 index 000000000..baa26fd5d --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/AttrModifierOperation.java @@ -0,0 +1,54 @@ +package net.pitan76.mcpitanlib.api.entity.attribute; + +import net.minecraft.entity.attribute.EntityAttributeModifier; + +public class AttrModifierOperation { + private final EntityAttributeModifier.Operation raw; + + public static final AttrModifierOperation ADD = new AttrModifierOperation(EntityAttributeModifier.Operation.ADDITION); + public static final AttrModifierOperation MUL_TOTAL = new AttrModifierOperation(EntityAttributeModifier.Operation.MULTIPLY_TOTAL); + public static final AttrModifierOperation MUL_BASE = new AttrModifierOperation(EntityAttributeModifier.Operation.MULTIPLY_BASE); + + @Deprecated + public AttrModifierOperation(EntityAttributeModifier.Operation raw) { + this.raw = raw; + } + + public static AttrModifierOperation of(EntityAttributeModifier.Operation raw) { + if (raw == EntityAttributeModifier.Operation.ADDITION) { + return ADD; + } else if (raw == EntityAttributeModifier.Operation.MULTIPLY_TOTAL) { + return MUL_TOTAL; + } else if (raw == EntityAttributeModifier.Operation.MULTIPLY_BASE) { + return MUL_BASE; + } + + return new AttrModifierOperation(raw); + } + + public EntityAttributeModifier.Operation raw() { + return raw; + } + + public String getName() { + return raw().name(); + } + + public int getId() { + return raw().getId(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof AttrModifierOperation)) return false; + AttrModifierOperation that = (AttrModifierOperation) obj; + return raw().equals(that.raw()); + } + + @Override + public int hashCode() { + if (raw() == null) return super.hashCode(); + return raw().hashCode(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/AttributeModifiersComponentBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/AttributeModifiersComponentBuilder.java new file mode 100644 index 000000000..31653403a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/AttributeModifiersComponentBuilder.java @@ -0,0 +1,34 @@ +package net.pitan76.mcpitanlib.api.entity.attribute; + +import java.util.ArrayList; +import java.util.List; + +public class AttributeModifiersComponentBuilder { + + private List dataList = new ArrayList<>(); + + public AttributeModifiersComponentBuilder() { + + } + + public AttributeModifiersComponentBuilder add(CompatEntityAttribute attribute, CompatEntityAttributeModifier modifier, CompatAttributeModifierSlot slot) { + dataList.add(new Data(attribute, modifier, slot)); + return this; + } + + public CompatAttributeModifiersComponent build() { + return new CompatAttributeModifiersComponent(dataList); + } + + public static class Data { + public CompatEntityAttribute attribute; + public CompatEntityAttributeModifier modifier; + public CompatAttributeModifierSlot slot; + + public Data(CompatEntityAttribute attribute, CompatEntityAttributeModifier modifier, CompatAttributeModifierSlot slot) { + this.attribute = attribute; + this.modifier = modifier; + this.slot = slot; + } + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatAttributeModifierSlot.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatAttributeModifierSlot.java new file mode 100644 index 000000000..37e7a687a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatAttributeModifierSlot.java @@ -0,0 +1,29 @@ +package net.pitan76.mcpitanlib.api.entity.attribute; + +import net.pitan76.mcpitanlib.api.util.CompatStringIdentifiable; + +public class CompatAttributeModifierSlot implements CompatStringIdentifiable { + + public static final CompatAttributeModifierSlot ANY = new CompatAttributeModifierSlot("ANY"); + public static final CompatAttributeModifierSlot MAIN_HAND = new CompatAttributeModifierSlot("MAINHAND"); + public static final CompatAttributeModifierSlot OFF_HAND = new CompatAttributeModifierSlot("OFFHAND"); + public static final CompatAttributeModifierSlot HEAD = new CompatAttributeModifierSlot("HEAD"); + public static final CompatAttributeModifierSlot FEET = new CompatAttributeModifierSlot("FEET"); + public static final CompatAttributeModifierSlot LEGS = new CompatAttributeModifierSlot("LEGS"); + public static final CompatAttributeModifierSlot CHEST = new CompatAttributeModifierSlot("CHEST"); + public static final CompatAttributeModifierSlot ARMOR = new CompatAttributeModifierSlot("ARMOR"); + public static final CompatAttributeModifierSlot BODY = new CompatAttributeModifierSlot("BODY"); + public static final CompatAttributeModifierSlot SADDLE = new CompatAttributeModifierSlot("SADDLE"); + + private String raw; + + @Deprecated + public CompatAttributeModifierSlot(String str) { + this.raw = raw; + } + + @Override + public String asString_compat() { + return raw; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatAttributeModifiersComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatAttributeModifiersComponent.java new file mode 100644 index 000000000..13faae924 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatAttributeModifiersComponent.java @@ -0,0 +1,18 @@ +package net.pitan76.mcpitanlib.api.entity.attribute; + +import java.util.List; + +public class CompatAttributeModifiersComponent { + + public List dataList; + + @Deprecated + public CompatAttributeModifiersComponent() { + + } + + @Deprecated + public CompatAttributeModifiersComponent(List data) { + this.dataList = data; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttribute.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttribute.java new file mode 100644 index 000000000..3a175dc6a --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttribute.java @@ -0,0 +1,48 @@ +package net.pitan76.mcpitanlib.api.entity.attribute; + +import net.minecraft.entity.attribute.EntityAttribute; + +public class CompatEntityAttribute { + public final EntityAttribute raw; + + @Deprecated + public CompatEntityAttribute(EntityAttribute attribute) { + this.raw = attribute; + } + + @Deprecated + public EntityAttribute raw() { + return raw; + } + + public String getId() { + return raw.getTranslationKey(); + } + + public EntityAttribute getValue() { + return raw(); + } + + public boolean isNull() { + return raw == null; + } + + @Deprecated + public static CompatEntityAttribute of(EntityAttribute attribute) { + return new CompatEntityAttribute(attribute); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof CompatEntityAttribute)) return false; + CompatEntityAttribute that = (CompatEntityAttribute) obj; + return raw.equals(that.raw); + } + + @Override + public int hashCode() { + if (raw == null) return super.hashCode(); + return raw.hashCode(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributeInstance.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributeInstance.java new file mode 100644 index 000000000..716f4fd22 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributeInstance.java @@ -0,0 +1,72 @@ +package net.pitan76.mcpitanlib.api.entity.attribute; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.EntityAttributeInstance; +import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.function.Consumer; + +public class CompatEntityAttributeInstance { + private final net.minecraft.entity.attribute.EntityAttributeInstance raw; + + @Deprecated + public CompatEntityAttributeInstance(net.minecraft.entity.attribute.EntityAttributeInstance instance) { + this.raw = instance; + } + + @Deprecated + public net.minecraft.entity.attribute.EntityAttributeInstance raw() { + return raw; + } + + @Deprecated + public static CompatEntityAttributeInstance of(net.minecraft.entity.attribute.EntityAttributeInstance instance) { + return new CompatEntityAttributeInstance(instance); + } + + public static CompatEntityAttributeInstance create(CompatEntityAttribute type, Consumer updateCallback) { + return of(new EntityAttributeInstance(type.raw(), modifier -> { + if (updateCallback != null) + updateCallback.accept(of(modifier)); + })); + } + + public static CompatEntityAttributeInstance get(LivingEntity entity, CompatEntityAttribute attribute) { + return new CompatEntityAttributeInstance(entity.getAttributeInstance(attribute.raw())); + } + + public static CompatEntityAttributeInstance get(Player player, CompatEntityAttribute attribute) { + return get(player.getEntity(), attribute); + } + + // TODO: Implement this method properly + public boolean hasModifier(CompatIdentifier id) { + return false; //raw().hasModifier(); + } + + public double getValue() { + return raw().getValue(); + } + + public void setBaseValue(double value) { + raw().setBaseValue(value); + } + + public void addPersistentModifier(CompatEntityAttributeModifier modifier) { + raw().addPersistentModifier(modifier.raw()); + } + + // TODO: Implement this method properly + public void removeModifier(CompatIdentifier id) { + + } + + public CompatEntityAttribute getAttribute() { + return CompatEntityAttribute.of(raw().getAttribute()); + } + + public boolean isNull() { + return raw() == null; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributeModifier.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributeModifier.java new file mode 100644 index 000000000..6e650bd20 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributeModifier.java @@ -0,0 +1,57 @@ +package net.pitan76.mcpitanlib.api.entity.attribute; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class CompatEntityAttributeModifier { + private final net.minecraft.entity.attribute.EntityAttributeModifier raw; + + @Deprecated + public CompatEntityAttributeModifier(net.minecraft.entity.attribute.EntityAttributeModifier raw) { + this.raw = raw; + } + + @Deprecated + public static CompatEntityAttributeModifier of(net.minecraft.entity.attribute.EntityAttributeModifier raw) { + return new CompatEntityAttributeModifier(raw); + } + + public static CompatEntityAttributeModifier of(CompatIdentifier id, double value, AttrModifierOperation operation) { + return new CompatEntityAttributeModifier(new net.minecraft.entity.attribute.EntityAttributeModifier(id.toString(), value, operation.raw())); + } + + @Deprecated + public net.minecraft.entity.attribute.EntityAttributeModifier raw() { + return raw; + } + + public AttrModifierOperation getOperation() { + return AttrModifierOperation.of(raw().getOperation()); + } + + public double getValue() { + return raw().getValue(); + } + + public CompatIdentifier getId() { + return CompatIdentifier.empty(); + } + + @Override + public String toString() { + return raw().toString(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof CompatEntityAttributeModifier)) return false; + CompatEntityAttributeModifier that = (CompatEntityAttributeModifier) obj; + return raw().equals(that.raw()); + } + + @Override + public int hashCode() { + if (raw() == null) return super.hashCode(); + return raw().hashCode(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributes.java new file mode 100644 index 000000000..aaac8b0fc --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/attribute/CompatEntityAttributes.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.entity.attribute; + +import net.minecraft.entity.attribute.EntityAttribute; +import net.minecraft.entity.attribute.EntityAttributes; + +public class CompatEntityAttributes { + + public static final CompatEntityAttribute ARMOR = of(EntityAttributes.GENERIC_ARMOR); + public static final CompatEntityAttribute ARMOR_TOUGHNESS = of(EntityAttributes.GENERIC_ARMOR_TOUGHNESS); + public static final CompatEntityAttribute ATTACK_DAMAGE = of(EntityAttributes.GENERIC_ATTACK_DAMAGE); + public static final CompatEntityAttribute ATTACK_KNOCKBACK = of(EntityAttributes.GENERIC_ATTACK_KNOCKBACK); + public static final CompatEntityAttribute ATTACK_SPEED = of(EntityAttributes.GENERIC_ATTACK_SPEED); + public static final CompatEntityAttribute FOLLOW_RANGE = of(EntityAttributes.GENERIC_FOLLOW_RANGE); + public static final CompatEntityAttribute KNOCKBACK_RESISTANCE = of(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE); + public static final CompatEntityAttribute LUCK = of(EntityAttributes.GENERIC_LUCK); + public static final CompatEntityAttribute MOVEMENT_SPEED = of(EntityAttributes.GENERIC_MOVEMENT_SPEED); + public static final CompatEntityAttribute MAX_HEALTH = of(EntityAttributes.GENERIC_MAX_HEALTH); + public static final CompatEntityAttribute JUMP_STRENGTH = of(EntityAttributes.HORSE_JUMP_STRENGTH); + public static final CompatEntityAttribute GRAVITY = of(null); + public static final CompatEntityAttribute FLYING_SPEED = of(EntityAttributes.GENERIC_FLYING_SPEED); + public static final CompatEntityAttribute BLOCK_BREAK_SPEED = of(null); + public static final CompatEntityAttribute BLOCK_INTERACTION_RANGE = of(null); + + public static CompatEntityAttribute of(EntityAttribute attribute) { + return CompatEntityAttribute.of(attribute); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/CompatEquipmentAsset.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/CompatEquipmentAsset.java new file mode 100644 index 000000000..a61c24184 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/CompatEquipmentAsset.java @@ -0,0 +1,28 @@ +package net.pitan76.mcpitanlib.api.item.equipment; + +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class CompatEquipmentAsset { + + @Deprecated + public CompatEquipmentAsset() { + + } + + public CompatIdentifier getId() { + return CompatIdentifier.empty(); + } + + @Deprecated + public static CompatEquipmentAsset of() { + return new CompatEquipmentAsset(); + } + + public static CompatEquipmentAsset of(CompatIdentifier id) { + return of(); + } + + public static CompatEquipmentAsset of(String id) { + return of(CompatIdentifier.of(id)); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/CompatEquippableComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/CompatEquippableComponent.java new file mode 100644 index 000000000..c5cae0c54 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/CompatEquippableComponent.java @@ -0,0 +1,9 @@ +package net.pitan76.mcpitanlib.api.item.equipment; + +public class CompatEquippableComponent { + + @Deprecated + public CompatEquippableComponent() { + + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/EquippableComponentBuilder.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/EquippableComponentBuilder.java new file mode 100644 index 000000000..7f7f82771 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/equipment/EquippableComponentBuilder.java @@ -0,0 +1,76 @@ +package net.pitan76.mcpitanlib.api.item.equipment; + +import net.pitan76.mcpitanlib.api.item.ArmorEquipmentType; +import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import net.pitan76.mcpitanlib.api.tag.TagKey; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class EquippableComponentBuilder { + + public ArmorEquipmentType equipmentType; + public CompatSoundEvent equipSound; + public CompatSoundEvent shearingSound; + public boolean equipOnInteract = false; + public boolean canBeSheared = false; + public CompatEquipmentAsset model; + public TagKey allowedEntities = null; + + public EquippableComponentBuilder() { + + } + + public EquippableComponentBuilder(ArmorEquipmentType equipmentType) { + this.equipmentType = equipmentType; + } + + public EquippableComponentBuilder equipmentType(ArmorEquipmentType equipmentType) { + this.equipmentType = equipmentType; + return this; + } + + public EquippableComponentBuilder equipSound(CompatSoundEvent equipSound) { + this.equipSound = equipSound; + return this; + } + + public EquippableComponentBuilder shearingSound(CompatSoundEvent shearingSound) { + this.shearingSound = shearingSound; + return this; + } + + public EquippableComponentBuilder equipOnInteract(boolean equipOnInteract) { + this.equipOnInteract = equipOnInteract; + return this; + } + + public EquippableComponentBuilder canBeSheared(boolean canBeSheared) { + this.canBeSheared = canBeSheared; + return this; + } + + public EquippableComponentBuilder model(CompatEquipmentAsset model) { + this.model = model; + return this; + } + + public EquippableComponentBuilder model(CompatIdentifier id) { + return model(CompatEquipmentAsset.of(id)); + } + + public EquippableComponentBuilder allowedEntities(TagKey allowedEntities) { + this.allowedEntities = allowedEntities; + return this; + } + + public EquippableComponentBuilder allowedEntities(CompatIdentifier tagId) { + return allowedEntities(TagKey.create(TagKey.Type.ENTITY_TYPE, tagId)); + } + + public EquippableComponentBuilder allowedEntities(String tagId) { + return allowedEntities(CompatIdentifier.of(tagId)); + } + + public CompatEquippableComponent build() { + return new CompatEquippableComponent(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatibleItemSettings.java b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatibleItemSettings.java index bfaf5d77a..2be88e5c9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatibleItemSettings.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/item/v2/CompatibleItemSettings.java @@ -4,9 +4,13 @@ import net.minecraft.item.ItemGroup; import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; +import net.pitan76.mcpitanlib.api.entity.attribute.AttributeModifiersComponentBuilder; +import net.pitan76.mcpitanlib.api.entity.attribute.CompatAttributeModifiersComponent; import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; import net.pitan76.mcpitanlib.api.item.CreativeTabBuilder; import net.pitan76.mcpitanlib.api.item.ExtendSettings; +import net.pitan76.mcpitanlib.api.item.equipment.CompatEquippableComponent; +import net.pitan76.mcpitanlib.api.item.equipment.EquippableComponentBuilder; import net.pitan76.mcpitanlib.api.tag.item.RepairIngredientTag; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.CompatRarity; @@ -136,6 +140,22 @@ public CompatibleItemSettings repairable(RepairIngredientTag tag) { return this; } + public CompatibleItemSettings equipable(CompatEquippableComponent component) { + return this; + } + + public CompatibleItemSettings equipable(EquippableComponentBuilder builder) { + return equipable(builder.build()); + } + + public CompatibleItemSettings attributeModifiers(CompatAttributeModifiersComponent component) { + return this; + } + + public CompatibleItemSettings attributeModifiers(AttributeModifiersComponentBuilder builder) { + return attributeModifiers(builder.build()); + } + @Override public ExtendSettings build() { super.build(); diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java index 404bad7f4..fec81a621 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/sound/CompatSoundEvents.java @@ -1609,6 +1609,14 @@ public class CompatSoundEvents { public static final CompatSoundEvent EVENT_MOB_EFFECT_BAD_OMEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent EVENT_MOB_EFFECT_TRIAL_OMEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); public static final CompatSoundEvent EVENT_MOB_EFFECT_RAID_OMEN = new CompatSoundEvent(SoundEvents.BLOCK_STONE_HIT); + public static final CompatSoundEvent ENTITY_HAPPY_GHAST_EQUIP = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_CHAIN); + public static final CompatSoundEvent ENTITY_HAPPY_GHAST_AMBIENT = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_AMBIENT); + public static final CompatSoundEvent ENTITY_HAPPY_GHAST_DEATH = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_DEATH); + public static final CompatSoundEvent ENTITY_HAPPY_GHAST_HURT = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_HURT); + public static final CompatSoundEvent ENTITY_HAPPY_GHAST_RIDING = new CompatSoundEvent(SoundEvents.ENTITY_MINECART_RIDING); + public static final CompatSoundEvent ENTITY_HAPPY_GHAST_HARNESS_GOGGLES_DOWN = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_AMBIENT); + public static final CompatSoundEvent ENTITY_HAPPY_GHAST_HARNESS_GOGGLES_UP = new CompatSoundEvent(SoundEvents.ENTITY_GHAST_AMBIENT); + public static final CompatSoundEvent ENTITY_HAPPY_GHAST_UNEQUIP = new CompatSoundEvent(SoundEvents.ITEM_ARMOR_EQUIP_CHAIN); static { From c0a32b15ec783214d829186f28a1645423ae38ff Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 12:50:01 +0900 Subject: [PATCH 554/617] [cp] feat: add methods to retrieve block and block wrapper in TileTickEvent --- .../mcpitanlib/api/event/tile/TileTickEvent.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java index 8a0797af5..4dea5f138 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/tile/TileTickEvent.java @@ -1,9 +1,11 @@ package net.pitan76.mcpitanlib.api.event.tile; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; import net.pitan76.mcpitanlib.midohra.holder.BlockStatePropertyHolder; import net.pitan76.mcpitanlib.midohra.world.IWorldView; @@ -79,4 +81,12 @@ public IWorldView getWorldView() { public net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState() { return getMidohraState(); } + + public Block getBlock() { + return getState().getBlock(); + } + + public BlockWrapper getBlockWrapper() { + return BlockWrapper.of(getBlock()); + } } From 639a0f135ad8ede424d18be4feb98f98b42af0b7 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 14:27:14 +0900 Subject: [PATCH 555/617] [cp] HitResult API --- .../api/block/args/v2/PlacementStateArgs.java | 9 ++ .../listener/BeforeBlockOutlineEvent.java | 17 +++ .../api/event/entity/CollisionEvent.java | 9 ++ .../midohra/util/hit/BlockHitResult.java | 59 ++++++++++ .../midohra/util/hit/HitResult.java | 106 ++++++++++++++++++ .../midohra/util/hit/HitResultType.java | 36 ++++++ 6 files changed, 236 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/HitResult.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/HitResultType.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/PlacementStateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/PlacementStateArgs.java index 0db8aa5de..38535085b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/PlacementStateArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/PlacementStateArgs.java @@ -16,6 +16,7 @@ import net.pitan76.mcpitanlib.midohra.block.BlockState; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.util.hit.HitResultType; import net.pitan76.mcpitanlib.midohra.util.math.Direction; import net.pitan76.mcpitanlib.midohra.world.IWorldView; import net.pitan76.mcpitanlib.midohra.world.World; @@ -163,4 +164,12 @@ public BlockState getBlockState() { public BlockEntityWrapper getBlockEntity() { return getWorld().getBlockEntity(getPos()); } + + public net.pitan76.mcpitanlib.midohra.util.hit.BlockHitResult getHitResultM() { + return net.pitan76.mcpitanlib.midohra.util.hit.BlockHitResult.of(getHitResult()); + } + + public HitResultType getHitResultTypeM() { + return HitResultType.from(getHitResult().getType()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java index 27656b1ed..43ed577ad 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java @@ -11,6 +11,7 @@ import net.minecraft.util.math.Box; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.midohra.util.hit.HitResultType; import java.util.Optional; @@ -90,4 +91,20 @@ public void drawBox(float red, float green, float blue, float alpha) { public void drawBox(Box box, float red, float green, float blue, float alpha) { context.drawBox(box, red, green, blue, alpha); } + + public net.pitan76.mcpitanlib.midohra.util.hit.HitResult getHitResultM() { + return net.pitan76.mcpitanlib.midohra.util.hit.HitResult.of(hitResult); + } + + public HitResultType getHitResultTypeM() { + return HitResultType.from(hitResult.getType()); + } + + public BlockState getBlockState2() { + return getWorld().getBlockState(getHitResultM().asBlockHitResult().get().getBlockPos()); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getBlockStateM() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getBlockState2()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/CollisionEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/CollisionEvent.java index 2bc5aa0d8..0ea55b691 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/CollisionEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/entity/CollisionEvent.java @@ -2,6 +2,7 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Vec3d; +import net.pitan76.mcpitanlib.midohra.util.hit.HitResultType; public class CollisionEvent { @@ -22,4 +23,12 @@ public HitResult.Type getType() { public Vec3d getPos() { return hitResult.getPos(); } + + public net.pitan76.mcpitanlib.midohra.util.hit.HitResult getHitResultM() { + return net.pitan76.mcpitanlib.midohra.util.hit.HitResult.of(getHitResult()); + } + + public HitResultType getHitResultTypeM() { + return HitResultType.from(getType()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java new file mode 100644 index 000000000..2492fca64 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java @@ -0,0 +1,59 @@ +package net.pitan76.mcpitanlib.midohra.util.hit; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; + +public class BlockHitResult extends HitResult { + public BlockHitResult(net.minecraft.util.hit.BlockHitResult raw) { + super(raw); + } + + public static BlockHitResult of(net.minecraft.util.hit.BlockHitResult raw) { + return new BlockHitResult(raw); + } + + @Deprecated + public net.minecraft.util.hit.BlockHitResult getRaw() { + return (net.minecraft.util.hit.BlockHitResult) super.getRaw(); + } + + public net.minecraft.util.hit.BlockHitResult withSide(Direction side) { + return getRaw().withSide(side); + } + + public net.minecraft.util.hit.BlockHitResult withBlockPos(BlockPos blockPos) { + return getRaw().withBlockPos(blockPos); + } + + public net.minecraft.util.hit.BlockHitResult againstWorldBorder() { + return getRaw().againstWorldBorder(); + } + + public BlockPos getBlockPos() { + return getRaw().getBlockPos(); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getBlockPosM() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getBlockPos()); + } + + public Direction getSide() { + return getRaw().getSide(); + } + + public net.pitan76.mcpitanlib.midohra.util.math.Direction getSideM() { + return net.pitan76.mcpitanlib.midohra.util.math.Direction.of(getSide()); + } + + public boolean isInsideBlock() { + return getRaw().isInsideBlock(); + } + + public boolean isAgainstWorldBorder() { + return getRaw().isAgainstWorldBorder(); + } + + public HitResultType getType() { + return HitResultType.from(getRaw().getType()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/HitResult.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/HitResult.java new file mode 100644 index 000000000..97e521de9 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/HitResult.java @@ -0,0 +1,106 @@ +package net.pitan76.mcpitanlib.midohra.util.hit; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.Vec3d; + +import java.util.Optional; + +public class HitResult { + protected final net.minecraft.util.hit.HitResult raw; + + public HitResult(net.minecraft.util.hit.HitResult raw) { + this.raw = raw; + } + + public static HitResult of(net.minecraft.util.hit.HitResult raw) { + return new HitResult(raw); + } + + @Deprecated + public net.minecraft.util.hit.HitResult getRaw() { + return raw; + } + + @Deprecated + public net.minecraft.util.hit.HitResult.Type getRawType() { + return getRaw().getType(); + } + + public Vec3d getPos() { + return getRaw().getPos(); + } + + public double getX() { + return pos().x; + } + + public double getY() { + return pos().y; + } + + public double getZ() { + return pos().z; + } + + public HitResultType getType() { + return HitResultType.of(this); + } + + public double squaredDistanceTo(Vec3d point) { + Vec3d hitPos = getPos(); + double dx = hitPos.x - point.x; + double dy = hitPos.y - point.y; + double dz = hitPos.z - point.z; + return dx * dx + dy * dy + dz * dz; + } + + public double squaredDistanceTo(Entity entity) { + return getRaw().squaredDistanceTo(entity); + } + + public Vec3d pos() { + return getPos(); + } + + public double x() { + return getX(); + } + + public double y() { + return getY(); + } + + public double z() { + return getZ(); + } + + public Optional asBlockHitResult() { + if (this instanceof BlockHitResult) { + return Optional.of((BlockHitResult) this); + } + + if (raw instanceof net.minecraft.util.hit.BlockHitResult) { + return Optional.of(BlockHitResult.of((net.minecraft.util.hit.BlockHitResult) raw)); + } + + return Optional.empty(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + HitResult other = (HitResult) obj; + return getRaw().equals(other.getRaw()); + } + + @Override + public int hashCode() { + return getRaw().hashCode(); + } + + @Override + public String toString() { + return getRaw().toString(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/HitResultType.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/HitResultType.java new file mode 100644 index 000000000..6002f2195 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/HitResultType.java @@ -0,0 +1,36 @@ +package net.pitan76.mcpitanlib.midohra.util.hit; + +import net.minecraft.util.hit.HitResult; + +public enum HitResultType { + MISS(HitResult.Type.MISS), + BLOCK(HitResult.Type.BLOCK), + ENTITY(HitResult.Type.ENTITY); + + private final HitResult.Type raw; + + HitResultType(HitResult.Type raw) { + this.raw = raw; + } + + @Deprecated + public HitResult.Type getRaw() { + return raw; + } + + public static HitResultType from(HitResult.Type raw) { + switch (raw) { + case MISS: + return MISS; + case BLOCK: + return BLOCK; + case ENTITY: + return ENTITY; + } + throw new IllegalArgumentException("Unknown HitResult.Type: " + raw); + } + + public static HitResultType of(net.pitan76.mcpitanlib.midohra.util.hit.HitResult result) { + return from(result.getRawType()); + } +} From a2106ae2e9fba7f2131916a99ce725c57fadbbce Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 15:34:02 +0900 Subject: [PATCH 556/617] [cp] bump version to 3.4.1 and update changelog --- info.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/info.properties b/info.properties index 930c84144..9f70f6c4a 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.0 +mod_version=3.4.1 maven_group=net.pitan76 -changelog=add APIs \ No newline at end of file +changelog=Add APIs \ No newline at end of file From 43e1b9d0a947477e1ceafae4dd3efbd30253ef34 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 15:43:09 +0900 Subject: [PATCH 557/617] [cp] aganist not working, retrun null --- .../pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java index 2492fca64..cb94e13af 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/hit/BlockHitResult.java @@ -26,7 +26,7 @@ public net.minecraft.util.hit.BlockHitResult withBlockPos(BlockPos blockPos) { } public net.minecraft.util.hit.BlockHitResult againstWorldBorder() { - return getRaw().againstWorldBorder(); + return null; //getRaw().againstWorldBorder(); } public BlockPos getBlockPos() { @@ -50,7 +50,7 @@ public boolean isInsideBlock() { } public boolean isAgainstWorldBorder() { - return getRaw().isAgainstWorldBorder(); + return false; } public HitResultType getType() { From 7a0e0433a73e4d59cae12df9a119633174f4cb76 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 16:55:31 +0900 Subject: [PATCH 558/617] [cp] add ContainerUser --- .../api/entity/CompatContainerUser.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java new file mode 100644 index 000000000..120091928 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java @@ -0,0 +1,17 @@ +package net.pitan76.mcpitanlib.api.entity; + +import net.minecraft.entity.ContainerUser; +import net.minecraft.entity.LivingEntity; + +public class CompatContainerUser { + protected ContainerUser containerUser; + + public double getContainerInteractionRange() { + // Player = 4.5d + return containerUser.getContainerInteractionRange(); + } + + public LivingEntity asLivingEntity() { + return containerUser.asLivingEntity(); + } +} From fa3ebf22fdc079218c8c34b7d870ed2cd8514ff4 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 16:57:57 +0900 Subject: [PATCH 559/617] [cp] fix ContainerUser --- .../api/entity/CompatContainerUser.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java index 120091928..f17eab319 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java @@ -1,17 +1,28 @@ package net.pitan76.mcpitanlib.api.entity; -import net.minecraft.entity.ContainerUser; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; public class CompatContainerUser { - protected ContainerUser containerUser; + protected PlayerEntity containerUser; + + public CompatContainerUser(PlayerEntity containerUser) { + this.containerUser = containerUser; + } public double getContainerInteractionRange() { - // Player = 4.5d - return containerUser.getContainerInteractionRange(); + return 4.5d; } public LivingEntity asLivingEntity() { - return containerUser.asLivingEntity(); + return containerUser; + } + + public boolean isPlayer() { + return true; + } + + public Player asPlayer() { + return new Player(containerUser); } } From a23b08220ab5a0b100a32ee14148190c98f6c627 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 17:15:44 +0900 Subject: [PATCH 560/617] [cp] use CompatContainerUser --- .../mcpitanlib/api/entity/CompatContainerUser.java | 5 +++++ .../api/util/inventory/CompatInventory.java | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java index f17eab319..ca2ab6026 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatContainerUser.java @@ -25,4 +25,9 @@ public boolean isPlayer() { public Player asPlayer() { return new Player(containerUser); } + + @Deprecated + public PlayerEntity getRaw() { + return containerUser; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java index 160b5ac6e..44f0d4ea3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/inventory/CompatInventory.java @@ -6,6 +6,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.collection.DefaultedList; +import net.pitan76.mcpitanlib.api.entity.CompatContainerUser; import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; import net.pitan76.mcpitanlib.api.util.collection.ItemStackList; @@ -94,11 +95,19 @@ public boolean canInsert(ItemStack stack) { } public void onOpen(Player player) { - super.onOpen(player.getEntity()); + this.onOpen(new CompatContainerUser(player.getEntity())); } public void onClose(Player player) { - super.onClose(player.getEntity()); + this.onClose(new CompatContainerUser(player.getEntity())); + } + + public void onOpen(CompatContainerUser user) { + super.onOpen(user.getRaw()); + } + + public void onClose(CompatContainerUser user) { + super.onClose(user.getRaw()); } public NbtList toNbtList(CompatRegistryLookup registries) { From 4d7e364917cb6dd1d1531ab3c4272b38de00178a Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 17:17:15 +0900 Subject: [PATCH 561/617] [cp] CompatKeyBinding --- .../api/client/option/CompatKeyBinding.java | 57 +++++++++++++++++++ .../registry/v3/KeybindingRegistry.java | 37 ++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/option/CompatKeyBinding.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/v3/KeybindingRegistry.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/CompatKeyBinding.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/CompatKeyBinding.java new file mode 100644 index 000000000..ab95ef05b --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/option/CompatKeyBinding.java @@ -0,0 +1,57 @@ +package net.pitan76.mcpitanlib.api.client.option; + +import net.minecraft.client.option.KeyBinding; +import net.minecraft.text.Text; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +import java.util.Objects; + +public class CompatKeyBinding { + private final KeyBinding keyBinding; + + public CompatKeyBinding(KeyBinding keyBinding) { + this.keyBinding = keyBinding; + } + + public CompatKeyBinding(String translationKey, int defaultKeyCode, CompatIdentifier category) { + this.keyBinding = new KeyBinding(translationKey, defaultKeyCode, "key.category." + category.getNamespace() + "." + category.getPath()); + } + + public CompatKeyBinding(String translationKey, int defaultKeyCode) { + String[] parts = translationKey.split("\\."); + if (Objects.equals(parts[0], "key") && parts.length == 3) { + CompatIdentifier category = CompatIdentifier.of(parts[1], "main"); + this.keyBinding = new KeyBinding(translationKey, defaultKeyCode, "key.category." + category.getNamespace() + "." + category.getPath()); + } else { + throw new IllegalArgumentException("Cannot infer category from translation key: " + translationKey); + } + } + + public String getTranslationKey() { + return keyBinding.getBoundKeyTranslationKey(); + } + + public Text getBoundKeyLocalizedText() { + return keyBinding.getBoundKeyLocalizedText(); + } + + public int getDefaultKeyCode() { + return keyBinding.getDefaultKey().getCode(); + } + + public static CompatKeyBinding of(String translationKey, int defaultKeyCode, CompatIdentifier category) { + return new CompatKeyBinding(translationKey, defaultKeyCode, category); + } + + public static CompatKeyBinding of(String translationKey, int defaultKeyCode) { + return new CompatKeyBinding(translationKey, defaultKeyCode); + } + + public KeyBinding toMinecraft() { + return keyBinding; + } + + public KeyBinding getRaw() { + return keyBinding; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/v3/KeybindingRegistry.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/v3/KeybindingRegistry.java new file mode 100644 index 000000000..91f382b28 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/registry/v3/KeybindingRegistry.java @@ -0,0 +1,37 @@ +package net.pitan76.mcpitanlib.api.client.registry.v3; + +import net.pitan76.mcpitanlib.api.client.option.CompatKeyBinding; +import net.pitan76.mcpitanlib.api.event.v0.ClientTickEventRegistry; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class KeybindingRegistry { + public static void registerWithNetwork(CompatKeyBinding keyBinding, CompatIdentifier networkId) { + net.pitan76.mcpitanlib.api.client.registry.v2.KeybindingRegistry.registerWithNetwork(keyBinding.toMinecraft(), networkId.toMinecraft()); + } + + public static void registerOnLevelWithNetwork(CompatKeyBinding keyBinding, CompatIdentifier networkId) { + net.pitan76.mcpitanlib.api.client.registry.v2.KeybindingRegistry.registerOnLevelWithNetwork(keyBinding.toMinecraft(), networkId.toMinecraft()); + } + + public static void registerWithNetwork(String translationKey, int code, CompatIdentifier category, CompatIdentifier networkId) { + registerWithNetwork(CompatKeyBinding.of(translationKey, code, category), networkId); + } + + public static void registerOnLevelWithNetwork(String translationKey, int code, CompatIdentifier category, CompatIdentifier networkId) { + registerOnLevelWithNetwork(CompatKeyBinding.of(translationKey, code, category), networkId); + } + + public static void register(CompatKeyBinding keyBinding) { + net.pitan76.mcpitanlib.api.client.registry.KeybindingRegistry.register(keyBinding.toMinecraft()); + } + + public static void register(CompatKeyBinding keyBinding, ClientTickEventRegistry.Client client) { + register(keyBinding); + ClientTickEventRegistry.registerPost(client); + } + + public static void registerOnLevel(CompatKeyBinding keyBinding, ClientTickEventRegistry.ClientLevel level) { + register(keyBinding); + ClientTickEventRegistry.registerLevelPost(level); + } +} From 02bb8db9e27fe3011f25869a50934758429ac1b8 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 17:21:33 +0900 Subject: [PATCH 562/617] [cp] enable parallel builds and increase worker limit --- gradle.properties | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b5c8cb56b..094e8942c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,4 +21,7 @@ cloth_config_version=6.5.116 fabricEnabled=true forgeEnabled=true -quiltEnabled=false \ No newline at end of file +quiltEnabled=false + +org.gradle.parallel=true +org.gradle.workers.max=4 \ No newline at end of file From 45d137f27fdca6d8509385fa83e3726eae6a9db4 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 19 Oct 2025 17:33:58 +0900 Subject: [PATCH 563/617] [cp] update publish and pull scripts for version 1.21.9 checkout and build process --- publish.bat | 11 +++++++++++ pull.bat | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/publish.bat b/publish.bat index c470e0edf..ddeb7041f 100644 --- a/publish.bat +++ b/publish.bat @@ -102,4 +102,15 @@ call gradlew.bat curseforge call gradlew.bat :fabric:modrinth call gradlew.bat :neoforge:modrinth + +git checkout 1.21.9 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenNeoForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :neoforge:modrinth + pause \ No newline at end of file diff --git a/pull.bat b/pull.bat index 25011ab99..10af3f5e9 100644 --- a/pull.bat +++ b/pull.bat @@ -1,4 +1,8 @@ git fetch origin +git checkout 1.21.9 +timeout /T 1 +git pull + git checkout 1.21.6 timeout /T 1 git pull From c5b7cf1257e8f4c1060df934674d356447facb13 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+ptom76@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:16:24 +0900 Subject: [PATCH 564/617] [cp] Add APIs, Fix APIs --- .../api/util/entity/ProjectileEntityUtil.java | 14 ++++++++++++++ .../api/util/entity/ThrownItemEntityUtil.java | 18 ++++++++++++++++++ info.properties | 4 ++-- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ProjectileEntityUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ProjectileEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ProjectileEntityUtil.java new file mode 100644 index 000000000..806215177 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ProjectileEntityUtil.java @@ -0,0 +1,14 @@ +package net.pitan76.mcpitanlib.api.util.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.projectile.ProjectileEntity; + +public class ProjectileEntityUtil { + public static void setVelocity(ProjectileEntity projectileEntity, Entity shooter, float pitch, float yaw, float roll, float speed, float divergence) { + projectileEntity.setVelocity(shooter, pitch, yaw, roll, speed, divergence); + } + + public static void setVelocity(ProjectileEntity projectileEntity, double x, double y, double z, float power, float uncertainty) { + projectileEntity.setVelocity(x, y, z, power, uncertainty); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java index a5416441a..73dfb6cc4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/entity/ThrownItemEntityUtil.java @@ -1,7 +1,9 @@ package net.pitan76.mcpitanlib.api.util.entity; +import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.thrown.ThrownItemEntity; import net.minecraft.item.ItemStack; +import net.pitan76.mcpitanlib.api.entity.CompatThrownItemEntity; public class ThrownItemEntityUtil { public static ItemStack getItem(ThrownItemEntity entity) { @@ -15,4 +17,20 @@ public static void setItem(ThrownItemEntity entity, ItemStack stack) { public static ItemStack getStack(ThrownItemEntity entity) { return entity.getStack(); } + + public static void setVelocity(ThrownItemEntity entity, Entity shooter, float pitch, float yaw, float roll, float speed, float divergence) { + ProjectileEntityUtil.setVelocity(entity, shooter, pitch, yaw, roll, speed, divergence); + } + + public static void setVelocity(CompatThrownItemEntity entity, Entity shooter, float pitch, float yaw, float roll, float speed, float divergence) { + ProjectileEntityUtil.setVelocity(entity, shooter, pitch, yaw, roll, speed, divergence); + } + + public static void setVelocity(ThrownItemEntity entity, double x, double y, double z, float power, float uncertainty) { + ProjectileEntityUtil.setVelocity(entity, x, y, z, power, uncertainty); + } + + public static void setVelocity(CompatThrownItemEntity entity, double x, double y, double z, float power, float uncertainty) { + ProjectileEntityUtil.setVelocity(entity, x, y, z, power, uncertainty); + } } diff --git a/info.properties b/info.properties index 9f70f6c4a..3edae8601 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.1 +mod_version=3.4.2 maven_group=net.pitan76 -changelog=Add APIs \ No newline at end of file +changelog=Add APIs, Fix APIs \ No newline at end of file From b58cc89b8866cef825e0e505d70572f318548d12 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:33:06 +0900 Subject: [PATCH 565/617] [cp] add method that able to get world id to worldutil --- .../net/pitan76/mcpitanlib/api/util/WorldUtil.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 69e0afb23..b0ce4cf1c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -405,4 +405,16 @@ public static List getEntitiesByType(World world, EntityTy public static List getEntitiesByType(World world, EntityTypeWrapper filter, Box box) { return getEntitiesByType(world, filter.get(), box); } + + public static CompatIdentifier getOverworldId() { + return CompatIdentifier.fromMinecraft(World.OVERWORLD.getValue()); + } + + public static CompatIdentifier getNetherId() { + return CompatIdentifier.fromMinecraft(World.NETHER.getValue()); + } + + public static CompatIdentifier getEndId() { + return CompatIdentifier.fromMinecraft(World.END.getValue()); + } } From 86f4a9e90c564d116296c813e9e2eb149f21eae6 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 25 Oct 2025 11:24:36 +0900 Subject: [PATCH 566/617] [cp] add writeToStack method to BlockEntityUtil --- .../pitan76/mcpitanlib/api/util/BlockEntityUtil.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index 262f5351b..f704b09ee 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -4,6 +4,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.component.Component; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.world.ServerWorld; @@ -90,4 +91,14 @@ public static void setStackNbt(BlockEntity blockEntity, ItemStack stack, CompatR public static ServerWorld getServerWorld(BlockEntity blockEntity) { return (ServerWorld) getWorld(blockEntity); } + + public static void writeToStack(ItemStack stack, BlockEntity blockEntity, CompatRegistryLookup registryLookup) { + NbtCompound nbt = blockEntity.createComponentlessNbt(registryLookup.getRegistryLookup()); + if (!NbtUtil.has(nbt, "id")) + NbtUtil.putString(nbt, "id", BlockEntityTypeUtil.toID(BlockEntityUtil.getType(blockEntity)).toString()); + + BlockEntityDataUtil.setBlockEntityNbt(stack, nbt); + + blockEntity.createComponentMap().forEach(stack::set); + } } From 2769f95641173430cc174847ea714865d2c04889 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 25 Oct 2025 11:26:52 +0900 Subject: [PATCH 567/617] [cp] rm compnent import --- .../java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java | 1 - 1 file changed, 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index f704b09ee..cda967273 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -4,7 +4,6 @@ import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.component.Component; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.world.ServerWorld; From 2a9e5e52274a0c5fc5d49ecb8d0c2181ccd80a12 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 25 Oct 2025 11:42:31 +0900 Subject: [PATCH 568/617] [cp] fix writeToStack --- .../java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index cda967273..6922cf97b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -98,6 +98,6 @@ public static void writeToStack(ItemStack stack, BlockEntity blockEntity, Compat BlockEntityDataUtil.setBlockEntityNbt(stack, nbt); - blockEntity.createComponentMap().forEach(stack::set); + stack.applyComponentsFrom(blockEntity.createComponentMap()); } } From 223e0ee89fc89e6f8ea1798c3536957c17c74c87 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:02:55 +0900 Subject: [PATCH 569/617] [cp] fix writeToStack1204 --- .../java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index 6922cf97b..16cebd5ce 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -92,12 +92,10 @@ public static ServerWorld getServerWorld(BlockEntity blockEntity) { } public static void writeToStack(ItemStack stack, BlockEntity blockEntity, CompatRegistryLookup registryLookup) { - NbtCompound nbt = blockEntity.createComponentlessNbt(registryLookup.getRegistryLookup()); + NbtCompound nbt = blockEntity.createNbt(); if (!NbtUtil.has(nbt, "id")) NbtUtil.putString(nbt, "id", BlockEntityTypeUtil.toID(BlockEntityUtil.getType(blockEntity)).toString()); BlockEntityDataUtil.setBlockEntityNbt(stack, nbt); - - stack.applyComponentsFrom(blockEntity.createComponentMap()); } } From 34b450d4c3870e23a9aa67480416ba454d30a891 Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:17:05 +0900 Subject: [PATCH 570/617] [cp] fix writeToStack 1204 --- .../java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index 16cebd5ce..3a0349a18 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -92,7 +92,7 @@ public static ServerWorld getServerWorld(BlockEntity blockEntity) { } public static void writeToStack(ItemStack stack, BlockEntity blockEntity, CompatRegistryLookup registryLookup) { - NbtCompound nbt = blockEntity.createNbt(); + NbtCompound nbt = getBlockEntityNbt(blockEntity); if (!NbtUtil.has(nbt, "id")) NbtUtil.putString(nbt, "id", BlockEntityTypeUtil.toID(BlockEntityUtil.getType(blockEntity)).toString()); From 34553b82c11eac7ed515b0511a63d9b066d7c2ab Mon Sep 17 00:00:00 2001 From: PTOM76 <58260965+PTOM76@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:18:50 +0900 Subject: [PATCH 571/617] [cp] fix getblockentitynbt --- .../net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index 3a0349a18..fcbf2733e 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -19,11 +19,6 @@ public static BlockEntity getBlockEntity(World world, BlockPos pos) { } public static NbtCompound getBlockEntityNbt(@Nullable World world, BlockEntity blockEntity) { - if (world == null) - world = getWorld(blockEntity); - if (world == null) - return NbtUtil.create(); - return blockEntity.createNbt(); } From 8eb74a15b3cddf1c35778ba5f9449b0eab57b978 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 25 Oct 2025 22:49:21 +0900 Subject: [PATCH 572/617] [cp] add APIs, Vector, Entity getPos --- .../mcpitanlib/api/util/EntityUtil.java | 14 ++ .../midohra/util/math/Vector3d.java | 183 +++++++++++++++++ .../midohra/util/math/Vector3f.java | 172 ++++++++++++++++ .../midohra/util/math/Vector3i.java | 191 ++++++++++++++++++ info.properties | 2 +- 5 files changed, 561 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index 446d8db17..0242f098d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -9,6 +9,8 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.util.math.Vector3d; import java.util.UUID; @@ -276,4 +278,16 @@ public static void setCustomName(Entity entity, String customName) { public static Vec3d getRotationVector(Entity entity) { return entity.getRotationVector(); } + + public static Vec3d getPos(Entity entity) { + return entity.getPos(); + } + + public static Vector3d getPosM(Entity entity) { + return Vector3d.of(getPos(entity)); + } + + public static void setPos(Entity entity, double x, double y, double z) { + entity.setPos(x, y, z); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java new file mode 100644 index 000000000..c83fdb8da --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java @@ -0,0 +1,183 @@ +package net.pitan76.mcpitanlib.midohra.util.math; + +import net.minecraft.util.math.Position; +import net.minecraft.util.math.Vec3d; + +public class Vector3d { + public final double x; + public final double y; + public final double z; + + public Vector3d(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + + public static Vector3d of(double x, double y, double z) { + return new Vector3d(x, y, z); + } + + public static Vector3d of(Vector3i vec) { + return new Vector3d(vec.x, vec.y, vec.z); + } + + public static Vector3d of(Vector3f vec) { + return new Vector3d(vec.x, vec.y, vec.z); + } + + public static Vector3d of(org.joml.Vector3d vec) { + return new Vector3d(vec.x, vec.y, vec.z); + } + + public static Vector3d of(Vec3d vec) { + return new Vector3d(vec.x, vec.y, vec.z); + } + + public static Vector3d of(Position vec) { + return new Vector3d(vec.getX(), vec.getY(), vec.getZ()); + } + + public Vector3i toInt() { + return new Vector3i((int) x, (int) y, (int) z); + } + + public Vector3f toFloat() { + return new Vector3f((float) x, (float) y, (float) z); + } + + public org.joml.Vector3d toJoml() { + return new org.joml.Vector3d(x, y, z); + } + + public Vector3d add(Vector3d other) { + return new Vector3d(this.x + other.x, this.y + other.y, this.z + other.z); + } + + public Vector3d sub(Vector3d other) { + return new Vector3d(this.x - other.x, this.y - other.y, this.z - other.z); + } + + public Vector3d mul(double scalar) { + return new Vector3d(this.x * scalar, this.y * scalar, this.z * scalar); + } + + public Vector3d div(double scalar) { + return new Vector3d(this.x / scalar, this.y / scalar, this.z / scalar); + } + + public double dot(Vector3d other) { + return this.x * other.x + this.y * other.y + this.z * other.z; + } + + public Vector3d cross(Vector3d other) { + return new Vector3d( + this.y * other.z - this.z * other.y, + this.z * other.x - this.x * other.z, + this.x * other.y - this.y * other.x + ); + } + + public double length() { + return Math.sqrt(x * x + y * y + z * z); + } + + public Vector3d normalize() { + double len = length(); + if (len == 0) return new Vector3d(0, 0, 0); + return div(len); + } + + public Vector3d add(double x, double y, double z) { + return new Vector3d(this.x + x, this.y + y, this.z + z); + } + + public Vector3d sub(double x, double y, double z) { + return new Vector3d(this.x - x, this.y - y, this.z - z); + } + + public Vector3d lerp(Vector3d to, double delta) { + return this.mul(1 - delta).add(to.mul(delta)); + } + + public Vector3d rotateX(double angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + double cos = Math.cos(angleRadians); + double sin = Math.sin(angleRadians); + double newY = y * cos - z * sin; + double newZ = y * sin + z * cos; + return new Vector3d(x, newY, newZ); + } + + public Vector3d rotateY(double angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + double cos = Math.cos(angleRadians); + double sin = Math.sin(angleRadians); + double newX = x * cos - z * sin; + double newZ = x * sin + z * cos; + return new Vector3d(newX, y, newZ); + } + + public Vector3d rotateZ(double angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + double cos = Math.cos(angleRadians); + double sin = Math.sin(angleRadians); + double newX = x * cos - y * sin; + double newY = x * sin + y * cos; + return new Vector3d(newX, newY, z); + } + + public Vector3d negate() { + return new Vector3d(-x, -y, -z); + } + + public Vector3d abs() { + return new Vector3d(Math.abs(x), Math.abs(y), Math.abs(z)); + } + + public Vector3d distanceTo(Vector3d other) { + return this.sub(other); + } + + public double getX() { + return x; + } + + public double getY() { + return y; + } + + public double getZ() { + return z; + } + + public static Vector3d zero() { + return new Vector3d(0, 0, 0); + } + + public static Vector3d distance(Vector3d a, Vector3d b) { + return a.sub(b); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Vector3d vec = (Vector3d) obj; + return x == vec.x && y == vec.y && z == vec.z; + } + + @Override + public String toString() { + return "(" + x + ", " + y + ", " + z + ")"; + } + + @Override + public int hashCode() { + int h; + h = Double.hashCode(x); + h = 31 * h + Double.hashCode(y); + h = 31 * h + Double.hashCode(z); + return h; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java new file mode 100644 index 000000000..b0e459541 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java @@ -0,0 +1,172 @@ +package net.pitan76.mcpitanlib.midohra.util.math; + +public class Vector3f { + public final float x; + public final float y; + public final float z; + + public Vector3f(float x, float y, float z) { + this.x = x; + this.y = y; + this.z = z; + } + + public static Vector3f of(float x, float y, float z) { + return new Vector3f(x, y, z); + } + + public static Vector3f of(Vector3i vec) { + return new Vector3f(vec.x, vec.y, vec.z); + } + + public static Vector3f of(Vector3d vec) { + return new Vector3f((float) vec.x, (float) vec.y, (float) vec.z); + } + + public static Vector3f of(org.joml.Vector3f vec) { + return new Vector3f(vec.x, vec.y, vec.z); + } + + public Vector3i toInt() { + return new Vector3i((int) x, (int) y, (int) z); + } + + public Vector3d toDouble() { + return new Vector3d((double) x, (double) y, (double) z); + } + + public org.joml.Vector3f toJoml() { + return new org.joml.Vector3f(x, y, z); + } + + public Vector3f add(Vector3f other) { + return new Vector3f(this.x + other.x, this.y + other.y, this.z + other.z); + } + + public Vector3f sub(Vector3f other) { + return new Vector3f(this.x - other.x, this.y - other.y, this.z - other.z); + } + + public Vector3f mul(float scalar) { + return new Vector3f(this.x * scalar, this.y * scalar, this.z * scalar); + } + + public Vector3f div(float scalar) { + return new Vector3f(this.x / scalar, this.y / scalar, this.z / scalar); + } + + public float dot(Vector3f other) { + return this.x * other.x + this.y * other.y + this.z * other.z; + } + + public Vector3f cross(Vector3f other) { + return new Vector3f( + this.y * other.z - this.z * other.y, + this.z * other.x - this.x * other.z, + this.x * other.y - this.y * other.x + ); + } + + public float length() { + return (float) Math.sqrt(x * x + y * y + z * z); + } + + public Vector3f normalize() { + float len = length(); + if (len == 0) return new Vector3f(0, 0, 0); + return div(len); + } + + public Vector3f add(float x, float y, float z) { + return new Vector3f(this.x + x, this.y + y, this.z + z); + } + + public Vector3f sub(float x, float y, float z) { + return new Vector3f(this.x - x, this.y - y, this.z - z); + } + + public Vector3f lerp(Vector3f to, float delta) { + return this.mul(1 - delta).add(to.mul(delta)); + } + + public Vector3f rotateX(float angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + float cos = (float) Math.cos(angleRadians); + float sin = (float) Math.sin(angleRadians); + float newY = y * cos - z * sin; + float newZ = y * sin + z * cos; + return new Vector3f(x, newY, newZ); + } + + public Vector3f rotateY(float angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + float cos = (float) Math.cos(angleRadians); + float sin = (float) Math.sin(angleRadians); + float newX = z * sin + x * cos; + float newZ = z * cos - x * sin; + return new Vector3f(newX, y, newZ); + } + + public Vector3f rotateZ(float angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + float cos = (float) Math.cos(angleRadians); + float sin = (float) Math.sin(angleRadians); + float newX = x * cos - y * sin; + float newY = x * sin + y * cos; + return new Vector3f(newX, newY, z); + } + + public Vector3f negate() { + return new Vector3f(-x, -y, -z); + } + + public Vector3f abs() { + return new Vector3f(Math.abs(x), Math.abs(y), Math.abs(z)); + } + + public Vector3f distanceTo(Vector3f other) { + return this.sub(other); + } + + public float getX() { + return x; + } + + public float getY() { + return y; + } + + public float getZ() { + return z; + } + + public static Vector3f zero() { + return new Vector3f(0, 0, 0); + } + + public static Vector3f distance(Vector3f a, Vector3f b) { + return a.sub(b); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Vector3f vec = (Vector3f) obj; + return x == vec.x && y == vec.y && z == vec.z; + } + + @Override + public String toString() { + return "(" + x + ", " + y + ", " + z + ")"; + } + + @Override + public int hashCode() { + int h; + h = Float.hashCode(x); + h = 31 * h + Float.hashCode(y); + h = 31 * h + Float.hashCode(z); + return h; + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java new file mode 100644 index 000000000..71c0bd5d5 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java @@ -0,0 +1,191 @@ +package net.pitan76.mcpitanlib.midohra.util.math; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3i; + +public class Vector3i { + public final int x; + public final int y; + public final int z; + + public Vector3i(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + } + + public static Vector3i of(int x, int y, int z) { + return new Vector3i(x, y, z); + } + + public static Vector3i of(Vector3d vec) { + return new Vector3i((int) vec.x, (int) vec.y, (int) vec.z); + } + + public static Vector3i of(Vector3f vec) { + return new Vector3i((int) vec.x, (int) vec.y, (int) vec.z); + } + + public static Vector3i of(org.joml.Vector3i vec) { + return new Vector3i(vec.x, vec.y, vec.z); + } + + public static Vector3i of(Vec3i vec) { + return new Vector3i(vec.getX(), vec.getY(), vec.getZ()); + } + + public static Vector3i of(BlockPos vec) { + return new Vector3i(vec.getX(), vec.getY(), vec.getZ()); + } + + public static Vector3i of(net.pitan76.mcpitanlib.midohra.util.math.BlockPos vec) { + return new Vector3i(vec.getX(), vec.getY(), vec.getZ()); + } + + public static Vector3i of(net.pitan76.mcpitanlib.midohra.util.math.v0.BlockPos vec) { + return new Vector3i(vec.getX(), vec.getY(), vec.getZ()); + } + + public Vector3d toDouble() { + return new Vector3d(x, y, z); + } + + public Vector3f toFloat() { + return new Vector3f((float) x, (float) y, (float) z); + } + + public org.joml.Vector3i toJoml() { + return new org.joml.Vector3i(x, y, z); + } + + public Vector3i add(Vector3i other) { + return new Vector3i(this.x + other.x, this.y + other.y, this.z + other.z); + } + + public Vector3i sub(Vector3i other) { + return new Vector3i(this.x - other.x, this.y - other.y, this.z - other.z); + } + + public Vector3i mul(int scalar) { + return new Vector3i(this.x * scalar, this.y * scalar, this.z * scalar); + } + + public Vector3i div(int scalar) { + return new Vector3i(this.x / scalar, this.y / scalar, this.z / scalar); + } + + public int dot(Vector3i other) { + return this.x * other.x + this.y * other.y + this.z * other.z; + } + + public Vector3i cross(Vector3i other) { + return new Vector3i( + this.y * other.z - this.z * other.y, + this.z * other.x - this.x * other.z, + this.x * other.y - this.y * other.x + ); + } + + public int length() { + return (int) Math.sqrt(x * x + y * y + z * z); + } + + public Vector3i normalize() { + int len = length(); + if (len == 0) return new Vector3i(0, 0, 0); + return div(len); + } + + public Vector3i add(int x, int y, int z) { + return new Vector3i(this.x + x, this.y + y, this.z + z); + } + + public Vector3i sub(int x, int y, int z) { + return new Vector3i(this.x - x, this.y - y, this.z - z); + } + + public Vector3i lerp(Vector3i to, int delta) { + return this.mul(1 - delta).add(to.mul(delta)); + } + + public Vector3i rotateX(double angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + int cos = (int) Math.cos(angleRadians); + int sin = (int) Math.sin(angleRadians); + int newY = this.y * cos - this.z * sin; + int newZ = this.y * sin + this.z * cos; + return new Vector3i(this.x, newY, newZ); + } + + public Vector3i rotateY(double angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + int cos = (int) Math.cos(angleRadians); + int sin = (int) Math.sin(angleRadians); + int newX = this.z * sin + this.x * cos; + int newZ = this.z * cos - this.x * sin; + return new Vector3i(newX, this.y, newZ); + } + + public Vector3i rotateZ(double angleDegrees) { + double angleRadians = Math.toRadians(angleDegrees); + int cos = (int) Math.cos(angleRadians); + int sin = (int) Math.sin(angleRadians); + int newX = this.x * cos - this.y * sin; + int newY = this.x * sin + this.y * cos; + return new Vector3i(newX, newY, this.z); + } + + public Vector3i negate() { + return new Vector3i(-this.x, -this.y, -this.z); + } + + public Vector3i abs() { + return new Vector3i(Math.abs(this.x), Math.abs(this.y), Math.abs(this.z)); + } + + public Vector3i distanceTo(Vector3i other) { + return this.sub(other); + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + public int getZ() { + return z; + } + + public static Vector3i zero() { + return new Vector3i(0, 0, 0); + } + + public static Vector3i distance(Vector3i a, Vector3i b) { + return a.sub(b); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Vector3i vec = (Vector3i) obj; + return x == vec.x && y == vec.y && z == vec.z; + } + + @Override + public String toString() { + return "(" + x + ", " + y + ", " + z + ")"; + } + + @Override + public int hashCode() { + int h; + h = Integer.hashCode(x); + h = 31 * h + Integer.hashCode(y); + h = 31 * h + Integer.hashCode(z); + return h; + } +} diff --git a/info.properties b/info.properties index 3edae8601..8074fa460 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.2 +mod_version=3.4.3 maven_group=net.pitan76 changelog=Add APIs, Fix APIs \ No newline at end of file From cba78c9dc7eae0686de8bc72fb1bec6ec9807685 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 26 Oct 2025 01:20:05 +0900 Subject: [PATCH 573/617] [cp] fix 1192 --- .../pitan76/mcpitanlib/midohra/util/math/Vector3d.java | 8 -------- .../pitan76/mcpitanlib/midohra/util/math/Vector3f.java | 8 -------- .../pitan76/mcpitanlib/midohra/util/math/Vector3i.java | 8 -------- 3 files changed, 24 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java index c83fdb8da..4c15a97f3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java @@ -26,10 +26,6 @@ public static Vector3d of(Vector3f vec) { return new Vector3d(vec.x, vec.y, vec.z); } - public static Vector3d of(org.joml.Vector3d vec) { - return new Vector3d(vec.x, vec.y, vec.z); - } - public static Vector3d of(Vec3d vec) { return new Vector3d(vec.x, vec.y, vec.z); } @@ -46,10 +42,6 @@ public Vector3f toFloat() { return new Vector3f((float) x, (float) y, (float) z); } - public org.joml.Vector3d toJoml() { - return new org.joml.Vector3d(x, y, z); - } - public Vector3d add(Vector3d other) { return new Vector3d(this.x + other.x, this.y + other.y, this.z + other.z); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java index b0e459541..eb2ab4879 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java @@ -23,10 +23,6 @@ public static Vector3f of(Vector3d vec) { return new Vector3f((float) vec.x, (float) vec.y, (float) vec.z); } - public static Vector3f of(org.joml.Vector3f vec) { - return new Vector3f(vec.x, vec.y, vec.z); - } - public Vector3i toInt() { return new Vector3i((int) x, (int) y, (int) z); } @@ -35,10 +31,6 @@ public Vector3d toDouble() { return new Vector3d((double) x, (double) y, (double) z); } - public org.joml.Vector3f toJoml() { - return new org.joml.Vector3f(x, y, z); - } - public Vector3f add(Vector3f other) { return new Vector3f(this.x + other.x, this.y + other.y, this.z + other.z); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java index 71c0bd5d5..a81b2432c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java @@ -26,10 +26,6 @@ public static Vector3i of(Vector3f vec) { return new Vector3i((int) vec.x, (int) vec.y, (int) vec.z); } - public static Vector3i of(org.joml.Vector3i vec) { - return new Vector3i(vec.x, vec.y, vec.z); - } - public static Vector3i of(Vec3i vec) { return new Vector3i(vec.getX(), vec.getY(), vec.getZ()); } @@ -54,10 +50,6 @@ public Vector3f toFloat() { return new Vector3f((float) x, (float) y, (float) z); } - public org.joml.Vector3i toJoml() { - return new org.joml.Vector3i(x, y, z); - } - public Vector3i add(Vector3i other) { return new Vector3i(this.x + other.x, this.y + other.y, this.z + other.z); } From cf3a2de8d2af2d31936cb1ad38dcdd67f2cfe0ae Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 7 Feb 2026 15:43:53 +0900 Subject: [PATCH 574/617] [cp] bump version 3.4.4 --- info.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/info.properties b/info.properties index 8074fa460..ced424b8a 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.3 +mod_version=3.4.4 maven_group=net.pitan76 -changelog=Add APIs, Fix APIs \ No newline at end of file +changelog=Add APIs \ No newline at end of file From d0a3cf3e4d6fd3699ff0e1fa0ca8c4584916518f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 7 Feb 2026 15:54:05 +0900 Subject: [PATCH 575/617] [cp] add CameraWrapper --- .../listener/BeforeBlockOutlineEvent.java | 6 ++ .../event/listener/WorldRenderContext.java | 5 ++ .../midohra/client/render/CameraWrapper.java | 64 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java index 43ed577ad..2f740d104 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/BeforeBlockOutlineEvent.java @@ -11,6 +11,7 @@ import net.minecraft.util.math.Box; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.World; +import net.pitan76.mcpitanlib.midohra.client.render.CameraWrapper; import net.pitan76.mcpitanlib.midohra.util.hit.HitResultType; import java.util.Optional; @@ -56,10 +57,15 @@ public HitResult.Type getHitResultType() { return hitResult.getType(); } + @Deprecated public Camera getCamera() { return context.getCamera(); } + public CameraWrapper getCameraWrapper() { + return CameraWrapper.of(getCamera()); + } + public Optional getOutlineShape() { return context.getOutlineShape(); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java index dc47c7d65..5a65788a4 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/event/listener/WorldRenderContext.java @@ -16,6 +16,7 @@ import net.minecraft.util.profiler.Profiler; import net.minecraft.util.shape.VoxelShape; import net.pitan76.mcpitanlib.api.util.VoxelShapeUtil; +import net.pitan76.mcpitanlib.midohra.client.render.CameraWrapper; import org.jetbrains.annotations.Nullable; import java.util.Objects; @@ -123,4 +124,8 @@ default void drawBox(Box box, float red, float green, float blue, float alpha) { WorldRenderer.drawBox(getMatrixStack(), vertexConsumer.get(), box, red, green, blue, alpha); } + + default CameraWrapper getCameraWrapper() { + return CameraWrapper.of(getCamera()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java new file mode 100644 index 000000000..25a8c0969 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java @@ -0,0 +1,64 @@ +package net.pitan76.mcpitanlib.midohra.client.render; + +import net.minecraft.client.render.Camera; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.util.math.Vector3d; + +public class CameraWrapper { + private final Camera camera; + + protected CameraWrapper(Camera camera) { + this.camera = camera; + } + + protected CameraWrapper() { + this.camera = null; + } + + public static CameraWrapper of(Camera camera) { + return new CameraWrapper(camera); + } + + public static CameraWrapper of() { + return new CameraWrapper(); + } + + public Camera get() { + return camera; + } + + public boolean isPresent() { + return !isEmpty(); + } + + public boolean isEmpty() { + return camera == null; + } + + public Vector3d getCameraPos() { + if (isEmpty()) return Vector3d.zero(); + return Vector3d.of(camera.getCameraPos()); + } + + public BlockPos getBlockPos() { + if (isEmpty()) return BlockPos.of(0, 0, 0); + return BlockPos.of(camera.getBlockPos()); + } + + public float getYaw() { + if (isEmpty()) return 0f; + return camera.getYaw(); + } + + public float getPitch() { + if (isEmpty()) return 0f; + return camera.getPitch(); + } + + + + + + + +} From 4b28771b5e7bad33553fa2aea8f60aba4646c80e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 7 Feb 2026 17:49:03 +0900 Subject: [PATCH 576/617] [cp] fix for 1.21.5 less --- .../pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java index 25a8c0969..e605609e1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java @@ -37,7 +37,7 @@ public boolean isEmpty() { public Vector3d getCameraPos() { if (isEmpty()) return Vector3d.zero(); - return Vector3d.of(camera.getCameraPos()); + return Vector3d.of(camera.getPos()); } public BlockPos getBlockPos() { From 26ca52d104f92c0f4c35cebffbcf80148021aaf3 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 7 Feb 2026 21:40:04 +0900 Subject: [PATCH 577/617] [cp] fix publish.bat --- publish.bat | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/publish.bat b/publish.bat index ddeb7041f..e7b7155b9 100644 --- a/publish.bat +++ b/publish.bat @@ -113,4 +113,15 @@ call gradlew.bat curseforge call gradlew.bat :fabric:modrinth call gradlew.bat :neoforge:modrinth + +git checkout 1.21.11 +timeout /T 1 +call gradlew.bat build +call gradlew.bat publish publishMavenCommonPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenFabricPublicationToGitHubPackagesRepository +call gradlew.bat publish publishMavenNeoForgePublicationToGitHubPackagesRepository +call gradlew.bat curseforge +call gradlew.bat :fabric:modrinth +call gradlew.bat :neoforge:modrinth + pause \ No newline at end of file From 2e709bf6ef2c658a0c29bf7e48395c2a7f8a9712 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 7 Feb 2026 23:20:05 +0900 Subject: [PATCH 578/617] [cp] fix publish.bat --- pull.bat | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pull.bat b/pull.bat index 10af3f5e9..cb05fbf86 100644 --- a/pull.bat +++ b/pull.bat @@ -1,3 +1,8 @@ +git fetch origin +git checkout 1.21.11 +timeout /T 1 +git pull + git fetch origin git checkout 1.21.9 timeout /T 1 @@ -53,6 +58,6 @@ timeout /T 1 git pull git fetch origin -git checkout 1.21.6 +git checkout 1.21.11 pause \ No newline at end of file From 68da8900a4db4d4eb1659d543e9d256d264ef137 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 8 Feb 2026 00:26:20 +0900 Subject: [PATCH 579/617] [cp] bump version 3.4.5 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index ced424b8a..25ad9102d 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.4 +mod_version=3.4.5 maven_group=net.pitan76 changelog=Add APIs \ No newline at end of file From c429f13b493a2bc7a03f3165e28264ff840fa462 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 8 Feb 2026 17:36:26 +0900 Subject: [PATCH 580/617] [cp] bump version 3.4.6 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 25ad9102d..970f022fc 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.5 +mod_version=3.4.6 maven_group=net.pitan76 changelog=Add APIs \ No newline at end of file From 0b2318a82d0330b9271c3bb4d1c8ce56ab7c2bc5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 8 Feb 2026 18:10:36 +0900 Subject: [PATCH 581/617] [cp] changelog --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 970f022fc..6c2b4670e 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib mod_version=3.4.6 maven_group=net.pitan76 -changelog=Add APIs \ No newline at end of file +changelog=Fix recipe remainder of MCPitanLib Item API \ No newline at end of file From 35e237ef7f2e52ca4ad128c7e68b206d621c4991 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 18 Mar 2026 16:16:41 +0900 Subject: [PATCH 582/617] [cp] feat: add Box, Vector Utils, improve WorldUtils --- .../mcpitanlib/api/util/EntityUtil.java | 13 ++ .../mcpitanlib/api/util/WorldUtil.java | 55 ++++++++- .../mcpitanlib/api/util/math/BoxUtil.java | 12 ++ .../mcpitanlib/api/util/math/Vec3dUtil.java | 6 +- .../mcpitanlib/midohra/util/math/Box.java | 115 ++++++++++++++++++ .../midohra/util/math/Vector3d.java | 8 ++ .../midohra/util/math/Vector3f.java | 10 ++ .../midohra/util/math/Vector3i.java | 5 + 8 files changed, 217 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index 0242f098d..291a4a252 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -290,4 +290,17 @@ public static Vector3d getPosM(Entity entity) { public static void setPos(Entity entity, double x, double y, double z) { entity.setPos(x, y, z); } + + public static void addVelocity(Entity entity, double x, double y, double z) { + entity.addVelocity(x, y, z); + } + + public static void addVelocity(Entity entity, Vec3d velocity) { + entity.addVelocity(velocity); + } + + public static void addVelocity(Entity entity, Vector3d velocity) { + addVelocity(entity, velocity.toMinecraft()); + } + } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index b0ce4cf1c..46ae9c4cf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -3,10 +3,8 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.ExperienceOrbEntity; -import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.*; +import net.minecraft.entity.mob.Monster; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; @@ -28,9 +26,11 @@ import net.pitan76.mcpitanlib.api.entity.Player; import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import net.pitan76.mcpitanlib.api.util.math.BoxUtil; import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import net.pitan76.mcpitanlib.midohra.entity.EntityTypeWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.Vector3d; import net.pitan76.mcpitanlib.midohra.world.chunk.ChunkTicketType; import org.jetbrains.annotations.Nullable; @@ -417,4 +417,51 @@ public static CompatIdentifier getNetherId() { public static CompatIdentifier getEndId() { return CompatIdentifier.fromMinecraft(World.END.getValue()); } + + public static long getTimeOfDay(World world) { + return world.getTimeOfDay(); + } + + public static List getEntitiesByClass(World world, Class entityClass, net.pitan76.mcpitanlib.midohra.util.math.Box box) { + return getEntitiesByClass(world, entityClass, box, EntityPredicates.VALID_ENTITY); + } + + public static List getEntitiesByClass(World world, Class entityClass, Box box) { + return getEntitiesByClass(world, entityClass, box, EntityPredicates.VALID_ENTITY); + } + + public static List getEntitiesByClass(World world, Class entityClass, net.pitan76.mcpitanlib.midohra.util.math.Box box, Predicate predicate) { + return getEntitiesByClass(world, entityClass, box.toMinecraft(), predicate); + } + + public static List getEntitiesByClass(World world, Class entityClass, Vector3d center, double radius, Predicate predicate) { + Box box = BoxUtil.createBox(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius); + return getEntitiesByClass(world, entityClass, box, predicate); + } + + public static List getEntitiesByClass(World world, Class entityClass, Vector3d center, double radius) { + return getEntitiesByClass(world, entityClass, center, radius, EntityPredicates.VALID_ENTITY); + } + + public static List getMonsters(World world, Box box) { + return world.getEntitiesByClass(LivingEntity.class, box, entity -> entity instanceof Monster); + } + + public static List getMonsters(World world, net.pitan76.mcpitanlib.midohra.util.math.Box box) { + return getMonsters(world, box.toMinecraft()); + } + + public static List getMonsters(World world, Vector3d center, double radius) { + Box box = BoxUtil.createBox(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius); + return getMonsters(world, box); + } + + public static List getEntitiesByType(World world, EntityTypeWrapper filter, net.pitan76.mcpitanlib.midohra.util.math.Box box) { + return getEntitiesByType(world, filter, box.toMinecraft()); + } + + public static List getEntitiesByType(World world, EntityTypeWrapper filter, net.pitan76.mcpitanlib.midohra.util.math.Box box, Predicate predicate) { + return getEntitiesByType(world, filter, box.toMinecraft(), predicate); + } + } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java index de4a75fd8..b887a927a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/BoxUtil.java @@ -39,4 +39,16 @@ public static Box createBox(BlockPos pos, int sizeX, int sizeY, int sizeZ) { public static Box createBoxCenter(BlockPos pos, int size) { return createBox(pos.add(-size, -size, -size), pos.add(size, size, size)); } + + public static Box expand(Box box, double x, double y, double z) { + return new Box(box.minX - x, box.minY - y, box.minZ - z, box.maxX + x, box.maxY + y, box.maxZ + z); + } + + public static Box expand(Box box, double size) { + return expand(box, size, size, size); + } + + public static Box union(Box box1, Box box2) { + return box1.union(box2); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3dUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3dUtil.java index c93066c33..f239b0a40 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3dUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/Vec3dUtil.java @@ -63,7 +63,7 @@ public static double distanceTo(Vec3d a, Vec3d b) { return a.distanceTo(b); } - - - + public static Vec3d ofCenter(double x, double y, double z) { + return new Vec3d(x + 0.5, y + 0.5, z + 0.5); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java new file mode 100644 index 000000000..65fc3555c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java @@ -0,0 +1,115 @@ +package net.pitan76.mcpitanlib.midohra.util.math; + +import net.minecraft.util.math.Vec3d; +import net.pitan76.mcpitanlib.api.util.math.BoxUtil; + +public class Box { + protected final net.minecraft.util.math.Box box; + + @Deprecated + public Box(net.minecraft.util.math.Box box) { + this.box = box; + } + + @Deprecated + public net.minecraft.util.math.Box toMinecraft() { + return box; + } + + public Box(double x1, double y1, double z1, double x2, double y2, double z2) { + this(BoxUtil.createBox(x1, y1, z1, x2, y2, z2)); + } + + public Box(double x, double y, double z, double size) { + this(x, y, z, x + size, y + size, z + size); + } + + public Box(double size) { + this(0, 0, 0, size, size, size); + } + + public Box(BlockPos pos) { + this(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); + } + + public Box(net.pitan76.mcpitanlib.midohra.util.math.v0.BlockPos pos) { + this(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); + } + + public Box(BlockPos pos1, BlockPos pos2) { + this(pos1.getX(), pos1.getY(), pos1.getZ(), pos2.getX(), pos2.getY(), pos2.getZ()); + } + + public Box(net.pitan76.mcpitanlib.midohra.util.math.v0.BlockPos pos1, net.pitan76.mcpitanlib.midohra.util.math.v0.BlockPos pos2) { + this(pos1.getX(), pos1.getY(), pos1.getZ(), pos2.getX(), pos2.getY(), pos2.getZ()); + } + + public Box(Vector3i pos) { + this(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); + } + + public Box(Vector3i pos1, Vector3i pos2) { + this(pos1.getX(), pos1.getY(), pos1.getZ(), pos2.getX(), pos2.getY(), pos2.getZ()); + } + + public Box(Vector3d pos) { + this(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); + } + + public Box(Vector3d pos1, Vector3d pos2) { + this(pos1.getX(), pos1.getY(), pos1.getZ(), pos2.getX(), pos2.getY(), pos2.getZ()); + } + + public Box expand(double x, double y, double z) { + return new Box(BoxUtil.expand(box, x, y, z)); + } + + public Box expand(double size) { + return expand(size, size, size); + } + + public Box union(Box other) { + return new Box(BoxUtil.union(box, other.box)); + } + + public double getMinX() { + return box.minX; + } + + public double getMinY() { + return box.minY; + } + + public double getMinZ() { + return box.minZ; + } + + public double getMaxX() { + return box.maxX; + } + + public double getMaxY() { + return box.maxY; + } + + public double getMaxZ() { + return box.maxZ; + } + + public Vector3d getCenter() { + Vec3d center = box.getCenter(); + return new Vector3d(center.x, center.y, center.z); + } + + public double getLengthX() { + return box.getLengthX(); + } + + public double getLengthY() { + return box.getLengthY(); + } + + public double getLengthZ() { + return box.getLengthZ(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java index 4c15a97f3..d2f803895 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3d.java @@ -172,4 +172,12 @@ public int hashCode() { h = 31 * h + Double.hashCode(z); return h; } + + public Vector3d ofCenter() { + return new Vector3d(x + 0.5, y + 0.5, z + 0.5); + } + + public Vec3d toMinecraft() { + return new Vec3d(x, y, z); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java index eb2ab4879..fe93447a7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java @@ -1,5 +1,7 @@ package net.pitan76.mcpitanlib.midohra.util.math; +import net.minecraft.util.math.Vec3d; + public class Vector3f { public final float x; public final float y; @@ -161,4 +163,12 @@ public int hashCode() { h = 31 * h + Float.hashCode(z); return h; } + + public Vector3f ofCenter() { + return this.add(0.5f, 0.5f, 0.5f); + } + + public org.joml.Vector3f toMinecraft() { + return new org.joml.Vector3f(x, y, z); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java index a81b2432c..c0684abbf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3i.java @@ -1,6 +1,7 @@ package net.pitan76.mcpitanlib.midohra.util.math; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; public class Vector3i { @@ -180,4 +181,8 @@ public int hashCode() { h = 31 * h + Integer.hashCode(z); return h; } + + public Vec3i toMinecraft() { + return new Vec3i(x, y, z); + } } From f68105075817abe6177a0fac178cdbf8651055b9 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 18 Mar 2026 16:57:54 +0900 Subject: [PATCH 583/617] [cp] Bump version 3.4.7 --- info.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/info.properties b/info.properties index 6c2b4670e..9d49d0af2 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.6 +mod_version=3.4.7 maven_group=net.pitan76 -changelog=Fix recipe remainder of MCPitanLib Item API \ No newline at end of file +changelog=Add Compat APIs From 1e3ed5e228b25eff2b44696ba4335458d333d95e Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 18 Mar 2026 18:32:00 +0900 Subject: [PATCH 584/617] use vec3f --- .../net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java index fe93447a7..c03d5b932 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Vector3f.java @@ -1,6 +1,6 @@ package net.pitan76.mcpitanlib.midohra.util.math; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3f; public class Vector3f { public final float x; @@ -168,7 +168,7 @@ public Vector3f ofCenter() { return this.add(0.5f, 0.5f, 0.5f); } - public org.joml.Vector3f toMinecraft() { - return new org.joml.Vector3f(x, y, z); + public Vec3f toMinecraft() { + return new Vec3f(x, y, z); } } From 8213d73fcf7cc86ce6c7c33c12886d416e9bf839 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 18 Mar 2026 18:39:43 +0900 Subject: [PATCH 585/617] [cp] use getLengthX/Y/Z --- .../java/net/pitan76/mcpitanlib/midohra/util/math/Box.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java index 65fc3555c..57d32ee71 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java @@ -102,14 +102,14 @@ public Vector3d getCenter() { } public double getLengthX() { - return box.getLengthX(); + return box.getXLength(); } public double getLengthY() { - return box.getLengthY(); + return box.getYLength(); } public double getLengthZ() { - return box.getLengthZ(); + return box.getZLength(); } } From f30c2ccf3e01e96ff6c9e6cab92d02ca997a4f0f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Wed, 18 Mar 2026 18:41:58 +0900 Subject: [PATCH 586/617] [cp] fix: replace vec3d to x/y/z --- .../main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java index 291a4a252..6246bf8c5 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/EntityUtil.java @@ -296,7 +296,7 @@ public static void addVelocity(Entity entity, double x, double y, double z) { } public static void addVelocity(Entity entity, Vec3d velocity) { - entity.addVelocity(velocity); + addVelocity(entity, velocity.x, velocity.y, velocity.z); } public static void addVelocity(Entity entity, Vector3d velocity) { From 560acd6ffe171f750cc85c54020d1fded81b8f0c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 19 Mar 2026 22:00:40 +0900 Subject: [PATCH 587/617] [cp] feat: add values, horizontal, vertical, hashCode, equals to Direction.java --- .../midohra/util/math/Direction.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java index c334c25ef..eebc3da6f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Direction.java @@ -105,4 +105,29 @@ public String toString() { public String getName() { return getRaw().name(); } + + public static Direction[] values() { + return new Direction[]{UP, DOWN, NORTH, SOUTH, EAST, WEST}; + } + + public Direction[] horizontal() { + return new Direction[]{NORTH, SOUTH, EAST, WEST}; + } + + public Direction[] vertical() { + return new Direction[]{UP, DOWN}; + } + + @Override + public int hashCode() { + return getRaw().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Direction dir = (Direction) obj; + return getRaw() == dir.getRaw(); + } } From 54a1a4f6d164f8ddbc21db8c1df7b65148213914 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Thu, 19 Mar 2026 22:01:14 +0900 Subject: [PATCH 588/617] [cp] feat: impl hashCode, equals methods in Box, BlockPos --- .../mcpitanlib/midohra/util/math/BlockPos.java | 13 +++++++++++++ .../pitan76/mcpitanlib/midohra/util/math/Box.java | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java index 129da5856..73d9bf7d2 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java @@ -88,4 +88,17 @@ public BlockPos offset(Direction direction) { public ChunkPos toChunkPos() { return ChunkPos.of(this); } + + @Override + public int hashCode() { + return blockPos.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + BlockPos pos = (BlockPos) obj; + return blockPos.equals(pos.blockPos); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java index 57d32ee71..050e7f5bd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/Box.java @@ -112,4 +112,17 @@ public double getLengthY() { public double getLengthZ() { return box.getZLength(); } + + @Override + public int hashCode() { + return box.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Box other = (Box) obj; + return box.equals(other.box); + } } From 2088d1bd0948d3c3793f47cfd666bce2ac7c4b82 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 20 Mar 2026 13:39:48 +0900 Subject: [PATCH 589/617] [cp] feat: add message sending methods to Player class --- .../net/pitan76/mcpitanlib/api/entity/Player.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index d660c04b9..84c564fe3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -38,6 +38,7 @@ import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; +import net.pitan76.mcpitanlib.api.util.TextUtil; import net.pitan76.mcpitanlib.core.player.ItemCooldown; import java.util.*; @@ -508,4 +509,16 @@ public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { public void eatFood(ItemStack stack, CompatFoodComponent foodComponent) { getEntity().eatFood(getWorld(), stack); } + + public void sendMessage(String message) { + sendMessage(TextUtil.of(message)); + } + + public void sendActionBar(String message) { + sendActionBar(TextUtil.of(message)); + } + + public void sendMessagef(String format, Object... args) { + sendMessage(TextUtil.of(String.format(format, args))); + } } \ No newline at end of file From ad254f66cf8291818c776c3073355a7546308cdd Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 20 Mar 2026 13:40:47 +0900 Subject: [PATCH 590/617] [cp] feat: implement BlockApiLookupWrapper and BlockApiLookupWithDirection for enhanced block entity lookup --- .../block/BlockApiLookupWithDirection.java | 56 ++++++++++++++++++ .../lookup/block/BlockApiLookupWrapper.java | 57 +++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/lookup/block/BlockApiLookupWithDirection.java create mode 100644 fabric/src/main/java/net/pitan76/mcpitanlib/api/lookup/block/BlockApiLookupWrapper.java diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/lookup/block/BlockApiLookupWithDirection.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/lookup/block/BlockApiLookupWithDirection.java new file mode 100644 index 000000000..9f5e6d946 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/lookup/block/BlockApiLookupWithDirection.java @@ -0,0 +1,56 @@ +package net.pitan76.mcpitanlib.api.lookup.block; + +import net.fabricmc.fabric.api.lookup.v1.block.BlockApiLookup; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityTypeWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.util.math.Direction; +import net.pitan76.mcpitanlib.midohra.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.BiFunction; + +public class BlockApiLookupWithDirection extends BlockApiLookupWrapper { + + public BlockApiLookupWithDirection(BlockApiLookup<@NotNull A, net.minecraft.util.math.Direction> lookup) { + super(lookup); + } + + @Deprecated + public static BlockApiLookupWrapper of(BlockApiLookup<@NotNull A, C> lookup) { + return new BlockApiLookupWrapper<>(lookup); + } + + public static BlockApiLookupWithDirection ofDir(BlockApiLookup<@NotNull A, net.minecraft.util.math.Direction> lookup) { + return new BlockApiLookupWithDirection<>(lookup); + } + + public @Nullable A find(World world, BlockPos pos, Direction direction) { + return super.find(world, pos, direction.toMinecraft()); + } + + public @Nullable A find(World world, BlockPos pos, BlockState state, BlockEntity blockEntity, Direction direction) { + return super.find(world, pos, state, blockEntity, direction.toMinecraft()); + } + + public @Nullable A find(World world, BlockPos pos, BlockState state, BlockEntityWrapper blockEntity, Direction direction) { + return super.find(world, pos, state, blockEntity, direction.toMinecraft()); + } + + public void registerForBlockEntityM(BiFunction provider, BlockEntityType blockEntityType) { + super.registerForBlockEntity((blockEntity, direction) -> provider.apply(blockEntity, Direction.of(direction)), blockEntityType); + } + + @Deprecated + public void registerForBlockEntity(BiFunction provider, BlockEntityType blockEntityType) { + super.registerForBlockEntity(provider, blockEntityType); + } + + public void registerForBlockEntityWrapperM(BiFunction provider, BlockEntityTypeWrapper blockEntityType) { + super.registerForBlockEntityWrapper((blockEntity, direction) -> provider.apply(blockEntity, Direction.of(direction)), blockEntityType); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/net/pitan76/mcpitanlib/api/lookup/block/BlockApiLookupWrapper.java b/fabric/src/main/java/net/pitan76/mcpitanlib/api/lookup/block/BlockApiLookupWrapper.java new file mode 100644 index 000000000..0651be594 --- /dev/null +++ b/fabric/src/main/java/net/pitan76/mcpitanlib/api/lookup/block/BlockApiLookupWrapper.java @@ -0,0 +1,57 @@ +package net.pitan76.mcpitanlib.api.lookup.block; + +import net.fabricmc.fabric.api.lookup.v1.block.BlockApiLookup; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityTypeWrapper; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.BiFunction; + +public class BlockApiLookupWrapper { + + private final BlockApiLookup<@NotNull A, C> lookup; + + public BlockApiLookupWrapper(BlockApiLookup<@NotNull A, C> lookup) { + this.lookup = lookup; + } + + public BlockApiLookup<@NotNull A, C> getRaw() { + return lookup; + } + + public static BlockApiLookupWrapper of(BlockApiLookup<@NotNull A, C> lookup) { + return new BlockApiLookupWrapper<>(lookup); + } + + public @Nullable A find(World world, BlockPos pos, C context) { + return lookup.find(world.getRaw(), pos.toMinecraft(), context); + } + + public @Nullable A find(World world, BlockPos pos, BlockState state, BlockEntity blockEntity, C context) { + return lookup.find(world.getRaw(), pos.toMinecraft(), state.toMinecraft(), blockEntity, context); + } + + public @Nullable A find(World world, BlockPos pos, BlockState state, BlockEntityWrapper blockEntity, C context) { + return lookup.find(world.getRaw(), pos.toMinecraft(), state.toMinecraft(), blockEntity.get(), context); + } + + public void registerForBlockEntity(BiFunction provider, BlockEntityType blockEntityType) { + lookup.registerForBlockEntity(provider, blockEntityType); + } + + public void registerForBlockEntityWrapper(BiFunction provider, BlockEntityTypeWrapper blockEntityWrapperType) { + lookup.registerForBlockEntity((blockEntity, context) -> + provider.apply(BlockEntityWrapper.of(blockEntity), context), blockEntityWrapperType.get()); + } + + public CompatIdentifier getId() { + return CompatIdentifier.fromMinecraft(lookup.getId()); + } +} \ No newline at end of file From 00c0458dfb2c104b99472797e544baec1fdb40a6 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 20 Mar 2026 13:40:14 +0900 Subject: [PATCH 591/617] [cp] feat: add methods to retrieve Midohra world, position, state, and block entity wrapper in NeighborUpdateEvent --- .../api/event/block/NeighborUpdateEvent.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/NeighborUpdateEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/NeighborUpdateEvent.java index 399bb414a..7f6ca1eaf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/NeighborUpdateEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/NeighborUpdateEvent.java @@ -7,6 +7,7 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.util.WorldUtil; +import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; public class NeighborUpdateEvent extends BaseEvent { public BlockState state; @@ -60,4 +61,20 @@ public BlockEntity getBlockEntity() { public boolean hasBlockEntity() { return WorldUtil.hasBlockEntity(world, pos); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(world); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(pos); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } + + public BlockEntityWrapper getBlockEntityWrapper() { + return BlockEntityWrapper.of(getBlockEntity()); + } } From 46c07f139fb724ab4620cf76964baa681fb2497c Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 20 Mar 2026 13:40:35 +0900 Subject: [PATCH 592/617] [cp] feat: add FluidWrapper methods and enhance FluidStateUtil for fluid retrieval --- .../mcpitanlib/api/util/FluidStateUtil.java | 19 +++++++++++++++++++ .../midohra/fluid/FluidWrapper.java | 13 +++++++++++++ .../mcpitanlib/midohra/world/IWorldView.java | 5 +++++ 3 files changed, 37 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java index 5edcfb79b..b133842ad 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/FluidStateUtil.java @@ -4,6 +4,9 @@ import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.tag.FluidTags; +import net.pitan76.mcpitanlib.midohra.fluid.FluidWrapper; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.World; public class FluidStateUtil { public static boolean isWater(FluidState state) { @@ -26,4 +29,20 @@ public static FluidState getDefaultState(Fluid state) { public static Fluid getFluid(FluidState state) { return state.getFluid(); } + + public static FluidWrapper getFluidWrapper(FluidState state) { + return FluidWrapper.of(getFluid(state)); + } + + public static FluidWrapper getFluidWrapper(BlockState state) { + return getFluidWrapper(getFluidState(state)); + } + + public static FluidWrapper getFluidWrapper(net.pitan76.mcpitanlib.midohra.block.BlockState state) { + return getFluidWrapper(state.toMinecraft()); + } + + public static FluidWrapper getFluidWrapper(World world, BlockPos pos) { + return getFluidWrapper(world.getBlockState(pos)); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java index 387ecd2f5..720de5698 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/fluid/FluidWrapper.java @@ -84,4 +84,17 @@ public ItemWrapper getBucketItem() { public boolean rawEquals(FluidWrapper fluid) { return get() == fluid.get(); } + + @Override + public int hashCode() { + return isEmpty() ? 0 : get().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + FluidWrapper other = (FluidWrapper) obj; + return rawEquals(other); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/IWorldView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/IWorldView.java index d520e0e3a..95d95ab78 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/IWorldView.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/IWorldView.java @@ -5,6 +5,7 @@ import net.minecraft.fluid.FluidState; import net.minecraft.util.math.BlockPos; import net.pitan76.mcpitanlib.midohra.block.entity.BlockEntityWrapper; +import net.pitan76.mcpitanlib.midohra.fluid.FluidWrapper; public interface IWorldView { BlockEntity getBlockEntity(BlockPos pos); @@ -20,4 +21,8 @@ default BlockEntityWrapper getBlockEntity(net.pitan76.mcpitanlib.midohra.util.ma default net.pitan76.mcpitanlib.midohra.block.BlockState getBlockState(net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { return net.pitan76.mcpitanlib.midohra.block.BlockState.of(getBlockState(pos.toMinecraft())); } + + default FluidWrapper getFluid(net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { + return FluidWrapper.of(getFluidState(pos.toMinecraft()).getFluid()); + } } From af1db6dd16bfa67767873fc23345645d31d812da Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 20 Mar 2026 16:40:41 +0900 Subject: [PATCH 593/617] [cp] feat: add DirectionBoolPropertyUtil for managing directional boolean properties in block states --- .../api/event/block/AppendPropertiesArgs.java | 5 ++ .../api/util/DirectionBoolPropertyUtil.java | 58 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/DirectionBoolPropertyUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java index 9bd8fa2a1..087efa37b 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/AppendPropertiesArgs.java @@ -6,6 +6,7 @@ import net.minecraft.state.property.Property; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.state.property.IProperty; +import net.pitan76.mcpitanlib.api.util.DirectionBoolPropertyUtil; public class AppendPropertiesArgs extends BaseEvent { public StateManager.Builder builder; @@ -27,4 +28,8 @@ public void addProperty(IProperty... properties) { builder.add(property.getProperty()); } } + + public void addAllDirectionBoolProperties() { + DirectionBoolPropertyUtil.addProperties(this); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/DirectionBoolPropertyUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DirectionBoolPropertyUtil.java new file mode 100644 index 000000000..efad0af51 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DirectionBoolPropertyUtil.java @@ -0,0 +1,58 @@ +package net.pitan76.mcpitanlib.api.util; + +import net.pitan76.mcpitanlib.api.event.block.AppendPropertiesArgs; +import net.pitan76.mcpitanlib.api.state.property.CompatProperties; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.util.math.Direction; +import net.pitan76.mcpitanlib.midohra.world.World; + +public class DirectionBoolPropertyUtil { + /** + * 指定位置のブロック状態に対して、方向に対応する Boolean プロパティを設定してワールドに反映する。 + * 例: Direction.UP => CompatProperties.UP + * @return プロパティが存在して設定に成功した場合は true、プロパティが存在しない場合やブロック状態が null の場合は false + */ + public static boolean setProperty(World world, BlockPos pos, Direction dir, boolean value) { + BlockState state = world.getBlockState(pos); + + if (dir == Direction.UP && state.contains(CompatProperties.UP)) { + state = state.with(CompatProperties.UP, value); + } else if (dir == Direction.DOWN && state.contains(CompatProperties.DOWN)) { + state = state.with(CompatProperties.DOWN, value); + } else if (dir == Direction.NORTH && state.contains(CompatProperties.NORTH)) { + state = state.with(CompatProperties.NORTH, value); + } else if (dir == Direction.SOUTH && state.contains(CompatProperties.SOUTH)) { + state = state.with(CompatProperties.SOUTH, value); + } else if (dir == Direction.WEST && state.contains(CompatProperties.WEST)) { + state = state.with(CompatProperties.WEST, value); + } else if (dir == Direction.EAST && state.contains(CompatProperties.EAST)) { + state = state.with(CompatProperties.EAST, value); + } else { + return false; + } + + world.setBlockState(pos, state); + return true; + } + + public static boolean hasAll(BlockState state) { + return state.contains(CompatProperties.UP) && state.contains(CompatProperties.DOWN) && state.contains(CompatProperties.NORTH) && + state.contains(CompatProperties.SOUTH) && state.contains(CompatProperties.WEST) && state.contains(CompatProperties.EAST); + } + + public static BlockState clearAll(BlockState state) { + return state + .with(CompatProperties.UP, false) + .with(CompatProperties.DOWN, false) + .with(CompatProperties.NORTH, false) + .with(CompatProperties.EAST, false) + .with(CompatProperties.SOUTH, false) + .with(CompatProperties.WEST, false); + } + + public static void addProperties(AppendPropertiesArgs args) { + args.addProperty(CompatProperties.UP, CompatProperties.DOWN, CompatProperties.NORTH, + CompatProperties.EAST, CompatProperties.SOUTH, CompatProperties.WEST); + } +} From bf8f5bec08600a941840c24cd58eb65105d818eb Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Fri, 20 Mar 2026 16:41:44 +0900 Subject: [PATCH 594/617] [cp] bump version 3.4.8 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index 9d49d0af2..e3bbd3ddc 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.7 +mod_version=3.4.8 maven_group=net.pitan76 changelog=Add Compat APIs From 9a7a790dcea65bb86acf154ad02717f506d3f704 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 21 Mar 2026 22:55:28 +0900 Subject: [PATCH 595/617] [cp] feat: enhance block entity rendering with new CompatItemRenderUtil and CompatItemDisplayContext --- .../entity/CompatBlockEntityRenderer.java | 2 +- .../entity/event/BlockEntityRenderEvent.java | 20 ++++++++++ .../entity/v2/CompatBlockEntityRenderer.java | 6 ++- .../api/event/block/StateReplacedEvent.java | 14 ++++++- .../render/CompatItemDisplayContext.java | 39 +++++++++++++++++++ .../client/render/CompatItemRenderUtil.java | 27 +++++++++++++ 6 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/CompatItemDisplayContext.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/CompatItemRenderUtil.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java index 22589bd1c..0db5cb14c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/CompatBlockEntityRenderer.java @@ -12,7 +12,7 @@ public interface CompatBlockEntityRenderer extends @Override default void render(T entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { - render(new BlockEntityRenderEvent<>(entity, tickDelta, matrices, vertexConsumers, light, overlay)); + render(new BlockEntityRenderEvent<>(this, entity, tickDelta, matrices, vertexConsumers, light, overlay)); } default boolean rendersOutsideBoundingBoxOverride(T blockEntity) { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java index dac9b8cb5..0bbb72193 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/event/BlockEntityRenderEvent.java @@ -5,15 +5,19 @@ import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Matrix3f; import net.minecraft.util.math.Matrix4f; +import net.pitan76.mcpitanlib.api.client.registry.CompatRegistryClient; import net.pitan76.mcpitanlib.api.client.render.CompatRenderLayer; import net.pitan76.mcpitanlib.api.client.render.DrawObjectMV; +import net.pitan76.mcpitanlib.api.client.render.block.entity.CompatBlockEntityRenderer; import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; import net.pitan76.mcpitanlib.api.util.MathUtil; import net.pitan76.mcpitanlib.api.util.client.ClientUtil; import net.pitan76.mcpitanlib.api.util.client.MatrixStackUtil; +import net.pitan76.mcpitanlib.api.util.client.render.CompatItemRenderUtil; public class BlockEntityRenderEvent { public T blockEntity; @@ -120,4 +124,20 @@ public BlockPos getPos() { public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(getPos()); } + + //---- + + @Deprecated + public CompatRegistryClient.BlockEntityRendererFactory.Context ctx; + + public BlockEntityRenderEvent(CompatBlockEntityRenderer renderer, T blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + this(blockEntity, tickDelta, matrices, vertexConsumers, light, overlay); + if (renderer instanceof net.pitan76.mcpitanlib.api.client.render.block.entity.v2.CompatBlockEntityRenderer) { + this.ctx = ((net.pitan76.mcpitanlib.api.client.render.block.entity.v2.CompatBlockEntityRenderer) renderer).ctx; + } + } + + public void renderItemFixed(ItemStack stack) { + CompatItemRenderUtil.renderItemFixed(stack, this, blockEntity.callGetWorld()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/v2/CompatBlockEntityRenderer.java b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/v2/CompatBlockEntityRenderer.java index cec057a47..2d3b4f911 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/v2/CompatBlockEntityRenderer.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/client/render/block/entity/v2/CompatBlockEntityRenderer.java @@ -5,11 +5,15 @@ import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity; public abstract class CompatBlockEntityRenderer implements net.pitan76.mcpitanlib.api.client.render.block.entity.CompatBlockEntityRenderer { + + @Deprecated + public CompatRegistryClient.BlockEntityRendererFactory.Context ctx; + public CompatBlockEntityRenderer(CompatBlockEntityRendererConstructArgs args) { } public CompatBlockEntityRenderer(CompatRegistryClient.BlockEntityRendererFactory.Context ctx) { - + this.ctx = ctx; } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java index a3e2d0e08..4be061fb6 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/StateReplacedEvent.java @@ -19,12 +19,17 @@ public class StateReplacedEvent extends BaseEvent { public BlockState newState; public boolean moved; + // Captured at construction time so getBlockEntity() works even after the world (1.21.x) + private final BlockEntity cachedBlockEntity; + public StateReplacedEvent(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) { this.state = state; this.world = world; this.pos = pos; this.newState = newState; this.moved = moved; + + this.cachedBlockEntity = WorldUtil.hasBlockEntity(world, pos) ? WorldUtil.getBlockEntity(world, pos) : null; } public BlockState getState() { @@ -61,17 +66,22 @@ public boolean isSameState() { /** * check if the block has a block entity - * @return BlockEntity + * @return boolean */ public boolean hasBlockEntity() { - return WorldUtil.hasBlockEntity(world, pos); + return getBlockEntity() != null; } /** * get the block entity + *

+ * The block entity is captured at event creation time, so this returns a valid + * reference even in MC 1.21.x where the world removes the BE before + * onStateReplaced is invoked. * @return BlockEntity */ public BlockEntity getBlockEntity() { + if (cachedBlockEntity != null) return cachedBlockEntity; return WorldUtil.getBlockEntity(world, pos); } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/CompatItemDisplayContext.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/CompatItemDisplayContext.java new file mode 100644 index 000000000..527a710e6 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/CompatItemDisplayContext.java @@ -0,0 +1,39 @@ +package net.pitan76.mcpitanlib.api.util.client.render; + +import net.minecraft.client.render.model.json.ModelTransformation; +import net.pitan76.mcpitanlib.api.util.CompatStringIdentifiable; + +public class CompatItemDisplayContext implements CompatStringIdentifiable { + private final ModelTransformation.Mode context; + + public static final CompatItemDisplayContext NONE = of(ModelTransformation.Mode.NONE); + public static final CompatItemDisplayContext THIRD_PERSON_LEFT_HAND = of(ModelTransformation.Mode.THIRD_PERSON_LEFT_HAND); + public static final CompatItemDisplayContext THIRD_PERSON_RIGHT_HAND = of(ModelTransformation.Mode.THIRD_PERSON_RIGHT_HAND); + public static final CompatItemDisplayContext FIRST_PERSON_LEFT_HAND = of(ModelTransformation.Mode.FIRST_PERSON_LEFT_HAND); + public static final CompatItemDisplayContext FIRST_PERSON_RIGHT_HAND = of(ModelTransformation.Mode.FIRST_PERSON_RIGHT_HAND); + public static final CompatItemDisplayContext HEAD = of(ModelTransformation.Mode.HEAD); + public static final CompatItemDisplayContext GUI = of(ModelTransformation.Mode.GUI); + public static final CompatItemDisplayContext GROUND = of(ModelTransformation.Mode.GROUND); + public static final CompatItemDisplayContext FIXED = of(ModelTransformation.Mode.FIXED); + + public CompatItemDisplayContext(ModelTransformation.Mode context) { + this.context = context; + } + + public static CompatItemDisplayContext of(ModelTransformation.Mode context) { + return new CompatItemDisplayContext(context); + } + + public ModelTransformation.Mode getContext() { + return context; + } + + public String getName() { + return context.name(); + } + + @Override + public String asString_compat() { + return getName(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/CompatItemRenderUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/CompatItemRenderUtil.java new file mode 100644 index 000000000..0b37fdc04 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/client/render/CompatItemRenderUtil.java @@ -0,0 +1,27 @@ +package net.pitan76.mcpitanlib.api.util.client.render; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.pitan76.mcpitanlib.api.client.render.block.entity.event.BlockEntityRenderEvent; + +/** + * Cross-version utility for rendering items in block entity renderers. + */ +public class CompatItemRenderUtil { + /** + * Renders an ItemStack in FIXED transform mode. + */ + public static void renderItemFixed(ItemStack stack, BlockEntityRenderEvent e, World world) { + renderItem(stack, CompatItemDisplayContext.FIXED, e, world); + } + + /** + * Renders an ItemStack + */ + public static void renderItem(ItemStack stack, CompatItemDisplayContext displayContext, BlockEntityRenderEvent e, World world) { + ItemRenderer renderer = e.getItemRenderer() != null ? e.getItemRenderer() : MinecraftClient.getInstance().getItemRenderer(); + renderer.renderItem(stack, displayContext.getContext(), e.getLight(), e.getOverlay(), e.matrices, e.vertexConsumers, 0); + } +} From de2d317a340ee99b13eb182aac3216a4bd1c1ec3 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sat, 21 Mar 2026 23:57:55 +0900 Subject: [PATCH 596/617] [cp] feat: introduce CompatFormatting, CompatStyle, and CompatTextColor for enhanced text styling --- .../pitan76/mcpitanlib/api/entity/Player.java | 9 ++ .../api/event/ServerCommandEvent.java | 13 +++ .../event/item/ItemAppendTooltipEvent.java | 5 + .../mcpitanlib/api/text/CompatFormatting.java | 86 ++++++++++++++ .../mcpitanlib/api/text/CompatStyle.java | 105 ++++++++++++++++++ .../mcpitanlib/api/text/CompatTextColor.java | 79 +++++++++++++ .../mcpitanlib/api/text/TextComponent.java | 20 ++++ .../pitan76/mcpitanlib/api/util/TextUtil.java | 4 + 8 files changed, 321 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatStyle.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java index 84c564fe3..98ebbb472 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/Player.java @@ -36,6 +36,7 @@ import net.pitan76.mcpitanlib.api.item.CompatFoodComponent; import net.pitan76.mcpitanlib.api.sound.CompatSoundCategory; import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; +import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; import net.pitan76.mcpitanlib.api.util.ScreenHandlerUtil; import net.pitan76.mcpitanlib.api.util.TextUtil; @@ -521,4 +522,12 @@ public void sendActionBar(String message) { public void sendMessagef(String format, Object... args) { sendMessage(TextUtil.of(String.format(format, args))); } + + public void sendMessage(TextComponent textComponent) { + sendMessage(textComponent.getText()); + } + + public void sendActionBar(TextComponent textComponent) { + sendActionBar(textComponent.getText()); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java index 87f65c080..d7206a4f0 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/ServerCommandEvent.java @@ -10,6 +10,7 @@ import net.minecraft.text.Text; import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.entity.Player; +import net.pitan76.mcpitanlib.api.text.TextComponent; import net.pitan76.mcpitanlib.api.util.TextUtil; import net.pitan76.mcpitanlib.api.util.WorldUtil; @@ -118,4 +119,16 @@ public void sendFailureRaw(String message) { public boolean isClient() { return WorldUtil.isClient(getWorld()); } + + public void sendSuccess(TextComponent message, boolean broadcastToOps) { + sendSuccess(message.getText(), broadcastToOps); + } + + public void sendSuccess(TextComponent message) { + sendSuccess(message.getText()); + } + + public void sendFailure(TextComponent message) { + sendFailure(message.getText()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java index dd45ff1d4..cf1ba69c1 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/item/ItemAppendTooltipEvent.java @@ -7,6 +7,7 @@ import net.minecraft.world.World; import net.pitan76.mcpitanlib.api.event.BaseEvent; import net.pitan76.mcpitanlib.api.registry.CompatRegistryLookup; +import net.pitan76.mcpitanlib.api.text.TextComponent; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -71,4 +72,8 @@ public boolean isAdvanced() { public CompatRegistryLookup getRegistryLookup() { return new CompatRegistryLookup(); } + + public void addTooltip(TextComponent textComponent) { + addTooltip(textComponent.getText()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java new file mode 100644 index 000000000..1de5acf72 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java @@ -0,0 +1,86 @@ +package net.pitan76.mcpitanlib.api.text; + +import net.minecraft.util.Formatting; +import net.pitan76.mcpitanlib.api.util.CompatStringIdentifiable; + +public class CompatFormatting implements CompatStringIdentifiable { + private final Formatting formatting; + + public static final CompatFormatting BLACK = of(Formatting.BLACK); + public static final CompatFormatting DARK_BLUE = of(Formatting.DARK_BLUE); + public static final CompatFormatting DARK_GREEN = of(Formatting.DARK_GREEN); + public static final CompatFormatting DARK_AQUA = of(Formatting.DARK_AQUA); + public static final CompatFormatting DARK_RED = of(Formatting.DARK_RED); + public static final CompatFormatting DARK_PURPLE = of(Formatting.DARK_PURPLE); + public static final CompatFormatting GOLD = of(Formatting.GOLD); + public static final CompatFormatting GRAY = of(Formatting.GRAY); + public static final CompatFormatting DARK_GRAY = of(Formatting.DARK_GRAY); + public static final CompatFormatting BLUE = of(Formatting.BLUE); + public static final CompatFormatting GREEN = of(Formatting.GREEN); + public static final CompatFormatting AQUA = of(Formatting.AQUA); + public static final CompatFormatting RED = of(Formatting.RED); + public static final CompatFormatting LIGHT_PURPLE = of(Formatting.LIGHT_PURPLE); + public static final CompatFormatting YELLOW = of(Formatting.YELLOW); + public static final CompatFormatting WHITE = of(Formatting.WHITE); + public static final CompatFormatting OBFUSCATED = of(Formatting.OBFUSCATED); + public static final CompatFormatting BOLD = of(Formatting.BOLD); + public static final CompatFormatting STRIKETHROUGH = of(Formatting.STRIKETHROUGH); + public static final CompatFormatting UNDERLINE = of(Formatting.UNDERLINE); + public static final CompatFormatting ITALIC = of(Formatting.ITALIC); + public static final CompatFormatting RESET = of(Formatting.RESET); + + public CompatFormatting(Formatting formatting) { + this.formatting = formatting; + } + + public static CompatFormatting of(Formatting formatting) { + return new CompatFormatting(formatting); + } + + public Formatting getRaw() { + return formatting; + } + + @Override + public String asString_compat() { + return formatting.asString(); + } + + public boolean isColor() { + return formatting.isColor(); + } + + public boolean isModifier() { + return formatting.isModifier(); + } + + public char getCode() { + return formatting.getCode(); + } + + public Integer getColorValue() { + return formatting.getColorValue(); + } + + public int getColorIndex() { + return formatting.getColorIndex(); + } + + @Override + public String toString() { + return formatting.toString(); + } + + @Override + public int hashCode() { + return formatting.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + CompatFormatting other = (CompatFormatting) obj; + return formatting.equals(other.formatting); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatStyle.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatStyle.java new file mode 100644 index 000000000..43b9aee73 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatStyle.java @@ -0,0 +1,105 @@ +package net.pitan76.mcpitanlib.api.text; + +import net.minecraft.text.Style; + +public class CompatStyle { + private final Style style; + + public CompatStyle(Style style) { + this.style = style; + } + + public CompatStyle() { + this(Style.EMPTY); + } + + public static CompatStyle of(Style style) { + return new CompatStyle(style); + } + + public static CompatStyle of() { + return new CompatStyle(); + } + + public CompatStyle withColor(CompatTextColor color) { + return new CompatStyle(style.withColor(color.getRaw())); + } + + public CompatStyle withColor(CompatFormatting formatting) { + return new CompatStyle(style.withColor(formatting.getRaw())); + } + + public CompatStyle withColor(int rgbColor) { + return new CompatStyle(style.withColor(rgbColor)); + } + + public CompatStyle withBold(boolean bold) { + return new CompatStyle(style.withBold(bold)); + } + + public CompatStyle withItalic(boolean italic) { + return new CompatStyle(style.withItalic(italic)); + } + + public CompatStyle withUnderline(boolean underline) { + return new CompatStyle(style.withUnderline(underline)); + } + + public CompatStyle withStrikethrough(boolean strikethrough) { + return new CompatStyle(style.withStrikethrough(strikethrough)); + } + + public CompatStyle withObfuscated(boolean obfuscated) { + return new CompatStyle(style.withObfuscated(obfuscated)); + } + + public CompatTextColor getColor() { + if (style.getColor() == null) return null; + return new CompatTextColor(style.getColor()); + } + + public boolean isBold() { + return style.isBold(); + } + + public boolean isItalic() { + return style.isItalic(); + } + + public boolean isUnderlined() { + return style.isUnderlined(); + } + + public boolean isStrikethrough() { + return style.isStrikethrough(); + } + + public boolean isObfuscated() { + return style.isObfuscated(); + } + + public boolean isEmpty() { + return style.isEmpty(); + } + + public CompatStyle withFormatting(CompatFormatting formatting) { + return withColor(formatting); + } + + public Style getRaw() { + return style; + } + + @Override + public int hashCode() { + return style.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + CompatStyle that = (CompatStyle) obj; + return style.equals(that.style); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java new file mode 100644 index 000000000..37b31c50c --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java @@ -0,0 +1,79 @@ +package net.pitan76.mcpitanlib.api.text; + +import net.minecraft.text.TextColor; +import net.minecraft.util.Formatting; + +public class CompatTextColor { + private final TextColor textColor; + + public static final CompatTextColor BLACK = of(TextColor.fromFormatting(Formatting.BLACK)); + public static final CompatTextColor DARK_BLUE = of(TextColor.fromFormatting(Formatting.DARK_BLUE)); + public static final CompatTextColor DARK_GREEN = of(TextColor.fromFormatting(Formatting.DARK_GREEN)); + public static final CompatTextColor DARK_AQUA = of(TextColor.fromFormatting(Formatting.DARK_AQUA)); + public static final CompatTextColor DARK_RED = of(TextColor.fromFormatting(Formatting.DARK_RED)); + public static final CompatTextColor DARK_PURPLE = of(TextColor.fromFormatting(Formatting.DARK_PURPLE)); + public static final CompatTextColor GOLD = of(TextColor.fromFormatting(Formatting.GOLD)); + public static final CompatTextColor GRAY = of(TextColor.fromFormatting(Formatting.GRAY)); + public static final CompatTextColor DARK_GRAY = of(TextColor.fromFormatting(Formatting.DARK_GRAY)); + public static final CompatTextColor BLUE = of(TextColor.fromFormatting(Formatting.BLUE)); + public static final CompatTextColor GREEN = of(TextColor.fromFormatting(Formatting.GREEN)); + public static final CompatTextColor AQUA = of(TextColor.fromFormatting(Formatting.AQUA)); + public static final CompatTextColor RED = of(TextColor.fromFormatting(Formatting.RED)); + public static final CompatTextColor LIGHT_PURPLE = of(TextColor.fromFormatting(Formatting.LIGHT_PURPLE)); + public static final CompatTextColor YELLOW = of(TextColor.fromFormatting(Formatting.YELLOW)); + public static final CompatTextColor WHITE = of(TextColor.fromFormatting(Formatting.WHITE)); + + public CompatTextColor(TextColor textColor) { + this.textColor = textColor; + } + + public TextColor getRaw() { + return textColor; + } + + public static CompatTextColor of(TextColor textColor) { + return new CompatTextColor(textColor); + } + + public static CompatTextColor fromFormatting(Formatting formatting) { + return new CompatTextColor(TextColor.fromFormatting(formatting)); + } + + public static CompatTextColor fromFormatting(CompatFormatting formatting) { + return fromFormatting(formatting.getRaw()); + } + + public static CompatTextColor fromRgb(int rgb) { + return new CompatTextColor(TextColor.fromRgb(rgb)); + } + + public static CompatTextColor fromRgb(int r, int g, int b) { + int rgb = (r << 16) | (g << 8) | b; + return fromRgb(rgb); + } + + public static CompatTextColor parse(String string) { + try { + return parseOrThrow(string); + } catch (Exception e) { + return null; + } + } + + public static CompatTextColor parseOrThrow(String string) { + return new CompatTextColor(TextColor.parse(string).get().orThrow()); + } + + @Override + public int hashCode() { + return textColor.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + CompatTextColor other = (CompatTextColor) obj; + return textColor.equals(other.textColor); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java index 758c55653..08ee2e869 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/TextComponent.java @@ -62,6 +62,14 @@ public static TextComponent translatable(String key, Object... args) { return new TextComponent(TextUtil.translatable(key, args)); } + public static TextComponent empty() { + return new TextComponent(TextUtil.empty()); + } + + public static TextComponent format(String format, Object... args) { + return literal(String.format(format, args)); + } + @Override public String toString() { return getString(); @@ -90,6 +98,18 @@ public TextComponent setStyle(Style style) { return this; } + public TextComponent setStyle(CompatStyle style) { + return setStyle(style.getRaw()); + } + + public CompatStyle getCompatStyle() { + return CompatStyle.of(getStyle()); + } + + public boolean contains(TextComponent other) { + return TextUtil.contains(getText(), other.getText()); + } + /** * Convert string to TextComponent with formatting * @param text String diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java index 357fccce9..2b14da678 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java @@ -68,4 +68,8 @@ public static MutableText convert(String text) { public static MutableText convertWithTranslatable(String text) { return TextConverter.convert(text, true); } + + public static boolean contains(Text text, Text text1) { + return text.contains(text1); + } } \ No newline at end of file From f47b455a98e10aa431db72379572227e0639b06d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Mar 2026 00:22:52 +0900 Subject: [PATCH 597/617] [cp] docs: update README to include cross-version and cross-platform support details --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index ca3eaecdb..98a622d0e 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,19 @@ MCPitanLibはライブラリです。 1つのjarで複数のMCバージョンを 開発中であるため、予告なく仕様が変更されることがあったり、不具合があるかもしれません。
私専用につくっているため、他の方が使うことをあまり想定していません。
+クロスバージョンかつクロスプラットフォームを目指しています。 + +### 対応状況 +- アイテムの追加 +- ブロックの追加 +- エンティティの追加 +- ブロックエンティティの追加 +- クリエイティブタブの追加 +- GUIの追加 +- サウンドの追加 + +となります。 + ### 前提MOD - MODローダー - [FabricMC](https://fabricmc.net/) @@ -54,6 +67,17 @@ MCPitanLib is a library. It is for supporting multiple MC versions with one jar. It is under development, so the specification may change without notice, and there may be bugs.
I am creating it for my own use, so I don't expect others to use it much.
+It aims to be cross-version and cross-platform. + +### Supported features +- Adding items +- Adding blocks +- Adding entities +- Adding block entities +- Adding creative tabs +- Adding GUIs +- Adding sounds + ### Required MOD - MOD Loader - [FabricMC](https://fabricmc.net/) From f730e86839505c5fbfe0d76f2258d0f0cdc3b062 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Mar 2026 00:24:22 +0900 Subject: [PATCH 598/617] [cp] chore: bump version 3.4.9 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index e3bbd3ddc..e5b2bf5ff 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.8 +mod_version=3.4.9 maven_group=net.pitan76 changelog=Add Compat APIs From 619d1fab621cb173cf08d55aff2845cf4fe10279 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Mar 2026 01:49:00 +0900 Subject: [PATCH 599/617] [cp] fix: parseOrThrow in CompatTextColor --- .../java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java index 37b31c50c..0bfa99110 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatTextColor.java @@ -61,7 +61,7 @@ public static CompatTextColor parse(String string) { } public static CompatTextColor parseOrThrow(String string) { - return new CompatTextColor(TextColor.parse(string).get().orThrow()); + return new CompatTextColor(TextColor.parse(string)); } @Override From 72371ec938f8edc8b23e58d6409f5cddaf955ae4 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Sun, 22 Mar 2026 01:54:08 +0900 Subject: [PATCH 600/617] fix: fix CompatFormatting and TextUtil --- .../java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java | 2 +- .../src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java index 1de5acf72..1f09295bd 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/text/CompatFormatting.java @@ -43,7 +43,7 @@ public Formatting getRaw() { @Override public String asString_compat() { - return formatting.asString(); + return formatting.toString(); } public boolean isColor() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java index 2b14da678..4d37f2b3a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/TextUtil.java @@ -70,6 +70,6 @@ public static MutableText convertWithTranslatable(String text) { } public static boolean contains(Text text, Text text1) { - return text.contains(text1); + return text.getString().contains(text1.getString()); } } \ No newline at end of file From f3e297e22bd0cfeab4b083b4beb76b01c05fe7a5 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 01:36:10 +0900 Subject: [PATCH 601/617] [cp] feat: add CompatParticleType and CompatParticleTypes for enhanced particle handling --- .../api/tile/CompatBlockEntity.java | 29 +++++ .../mcpitanlib/api/util/WorldUtil.java | 8 ++ .../api/util/particle/CompatParticleType.java | 34 +++++ .../util/particle/CompatParticleTypes.java | 121 ++++++++++++++++++ 4 files changed, 192 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleType.java create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java index a0dc1a24f..c00649923 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/tile/CompatBlockEntity.java @@ -144,4 +144,33 @@ public ServerWorld getServerWorld() { return BlockEntityUtil.getServerWorld(this); } + public void callMarkDirty() { + BlockEntityUtil.markDirty(this); + } + + @Deprecated + @Override + public void markRemoved() { + markRemovedOverride(); + } + + public void markRemovedOverride() { + super.markRemoved(); + } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(callGetWorld()); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(callGetPos()); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraBlockState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(callGetBlockState()); + } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraCachedState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(callGetCachedState()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java index 46ae9c4cf..f5c096063 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/WorldUtil.java @@ -28,6 +28,7 @@ import net.pitan76.mcpitanlib.api.sound.CompatSoundEvent; import net.pitan76.mcpitanlib.api.util.math.BoxUtil; import net.pitan76.mcpitanlib.api.util.math.random.CompatRandom; +import net.pitan76.mcpitanlib.api.util.particle.CompatParticleType; import net.pitan76.mcpitanlib.midohra.block.BlockWrapper; import net.pitan76.mcpitanlib.midohra.entity.EntityTypeWrapper; import net.pitan76.mcpitanlib.midohra.util.math.Vector3d; @@ -464,4 +465,11 @@ public static List getEntitiesByType(World world, EntityTypeWrapper filter, n return getEntitiesByType(world, filter, box.toMinecraft(), predicate); } + /** + * ParticleType is a ParticleEffect only. + */ + public static void addParticle(World world, CompatParticleType parameters, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { + if (parameters.getRaw() instanceof ParticleEffect) + addParticle(world, (ParticleEffect) parameters.getRaw(), x, y, z, velocityX, velocityY, velocityZ); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleType.java new file mode 100644 index 000000000..758900a07 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleType.java @@ -0,0 +1,34 @@ +package net.pitan76.mcpitanlib.api.util.particle; + +import net.minecraft.particle.ParticleType; +import net.minecraft.registry.Registries; +import net.minecraft.util.Identifier; +import net.pitan76.mcpitanlib.api.util.CompatIdentifier; + +public class CompatParticleType { + private final ParticleType particleType; + + public CompatParticleType(ParticleType particleType) { + this.particleType = particleType; + } + + public static CompatParticleType of(ParticleType particleType) { + return new CompatParticleType(particleType); + } + + public ParticleType getRaw() { + return particleType; + } + + public boolean shouldAlwaysSpawn() { + return particleType.shouldAlwaysSpawn(); + } + + public Identifier getId() { + return Registries.PARTICLE_TYPE.getId(particleType); + } + + public CompatIdentifier getCompatId() { + return CompatIdentifier.fromMinecraft(getId()); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java new file mode 100644 index 000000000..5562d9bda --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -0,0 +1,121 @@ +package net.pitan76.mcpitanlib.api.util.particle; + +import net.minecraft.particle.*; + +public class CompatParticleTypes { + public static final CompatParticleType ANGRY_VILLAGER = new CompatParticleType(ParticleTypes.ANGRY_VILLAGER); + public static final CompatParticleType BLOCK = new CompatParticleType(ParticleTypes.BLOCK); + public static final CompatParticleType BLOCK_MARKER = new CompatParticleType(ParticleTypes.BLOCK_MARKER); + public static final CompatParticleType BUBBLE = new CompatParticleType(ParticleTypes.BUBBLE); + public static final CompatParticleType CLOUD = new CompatParticleType(ParticleTypes.CLOUD); + public static final CompatParticleType COPPER_FIRE_FLAME = new CompatParticleType(ParticleTypes.COPPER_FIRE_FLAME); + public static final CompatParticleType CRIT = new CompatParticleType(ParticleTypes.CRIT); + public static final CompatParticleType DAMAGE_INDICATOR = new CompatParticleType(ParticleTypes.DAMAGE_INDICATOR); + public static final CompatParticleType DRAGON_BREATH = new CompatParticleType(ParticleTypes.DRAGON_BREATH); + public static final CompatParticleType DRIPPING_LAVA = new CompatParticleType(ParticleTypes.DRIPPING_LAVA); + public static final CompatParticleType FALLING_LAVA = new CompatParticleType(ParticleTypes.FALLING_LAVA); + public static final CompatParticleType LANDING_LAVA = new CompatParticleType(ParticleTypes.LANDING_LAVA); + public static final CompatParticleType DRIPPING_WATER = new CompatParticleType(ParticleTypes.DRIPPING_WATER); + public static final CompatParticleType FALLING_WATER = new CompatParticleType(ParticleTypes.FALLING_WATER); + public static final CompatParticleType DUST = new CompatParticleType(ParticleTypes.DUST); + public static final CompatParticleType DUST_COLOR_TRANSITION = new CompatParticleType(ParticleTypes.DUST_COLOR_TRANSITION); + public static final CompatParticleType EFFECT = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType ELDER_GUARDIAN = new CompatParticleType(ParticleTypes.ELDER_GUARDIAN); + public static final CompatParticleType ENCHANTED_HIT = new CompatParticleType(ParticleTypes.ENCHANTED_HIT); + public static final CompatParticleType ENCHANT = new CompatParticleType(ParticleTypes.ENCHANT); + public static final CompatParticleType END_ROD = new CompatParticleType(ParticleTypes.END_ROD); + public static final CompatParticleType ENTITY_EFFECT = new CompatParticleType(ParticleTypes.ENTITY_EFFECT); + public static final CompatParticleType EXPLOSION_EMITTER = new CompatParticleType(ParticleTypes.EXPLOSION_EMITTER); + public static final CompatParticleType EXPLOSION = new CompatParticleType(ParticleTypes.EXPLOSION); + public static final CompatParticleType GUST = new CompatParticleType(ParticleTypes.GUST); + public static final CompatParticleType SMALL_GUST = new CompatParticleType(ParticleTypes.SMALL_GUST); + public static final CompatParticleType GUST_EMITTER_LARGE = new CompatParticleType(ParticleTypes.GUST_EMITTER_LARGE); + public static final CompatParticleType GUST_EMITTER_SMALL = new CompatParticleType(ParticleTypes.GUST_EMITTER_SMALL); + public static final CompatParticleType SONIC_BOOM = new CompatParticleType(ParticleTypes.SONIC_BOOM); + public static final CompatParticleType FALLING_DUST = new CompatParticleType(ParticleTypes.FALLING_DUST); + public static final CompatParticleType FIREWORK = new CompatParticleType(ParticleTypes.FIREWORK); + public static final CompatParticleType FISHING = new CompatParticleType(ParticleTypes.FISHING); + public static final CompatParticleType FLAME = new CompatParticleType(ParticleTypes.FLAME); + public static final CompatParticleType INFESTED = new CompatParticleType(ParticleTypes.INFESTED); + public static final CompatParticleType CHERRY_LEAVES = new CompatParticleType(ParticleTypes.CHERRY_LEAVES); + public static final CompatParticleType PALE_OAK_LEAVES = new CompatParticleType(ParticleTypes.PALE_OAK_LEAVES); + public static final CompatParticleType TINTED_LEAVES = new CompatParticleType(ParticleTypes.TINTED_LEAVES); + public static final CompatParticleType SCULK_SOUL = new CompatParticleType(ParticleTypes.SCULK_SOUL); + public static final CompatParticleType SCULK_CHARGE = new CompatParticleType(ParticleTypes.SCULK_CHARGE); + public static final CompatParticleType SCULK_CHARGE_POP = new CompatParticleType(ParticleTypes.SCULK_CHARGE_POP); + public static final CompatParticleType SOUL_FIRE_FLAME = new CompatParticleType(ParticleTypes.SOUL_FIRE_FLAME); + public static final CompatParticleType SOUL = new CompatParticleType(ParticleTypes.SOUL); + public static final CompatParticleType FLASH = new CompatParticleType(ParticleTypes.FLASH); + public static final CompatParticleType HAPPY_VILLAGER = new CompatParticleType(ParticleTypes.HAPPY_VILLAGER); + public static final CompatParticleType COMPOSTER = new CompatParticleType(ParticleTypes.COMPOSTER); + public static final CompatParticleType HEART = new CompatParticleType(ParticleTypes.HEART); + public static final CompatParticleType INSTANT_EFFECT = new CompatParticleType(ParticleTypes.INSTANT_EFFECT); + public static final CompatParticleType ITEM = new CompatParticleType(ParticleTypes.ITEM); + public static final CompatParticleType VIBRATION = new CompatParticleType(ParticleTypes.VIBRATION); + public static final CompatParticleType TRAIL = new CompatParticleType(ParticleTypes.TRAIL); + public static final CompatParticleType ITEM_SLIME = new CompatParticleType(ParticleTypes.ITEM_SLIME); + public static final CompatParticleType ITEM_COBWEB = new CompatParticleType(ParticleTypes.ITEM_COBWEB); + public static final CompatParticleType ITEM_SNOWBALL = new CompatParticleType(ParticleTypes.ITEM_SNOWBALL); + public static final CompatParticleType LARGE_SMOKE = new CompatParticleType(ParticleTypes.LARGE_SMOKE); + public static final CompatParticleType LAVA = new CompatParticleType(ParticleTypes.LAVA); + public static final CompatParticleType MYCELIUM = new CompatParticleType(ParticleTypes.MYCELIUM); + public static final CompatParticleType NOTE = new CompatParticleType(ParticleTypes.NOTE); + public static final CompatParticleType POOF = new CompatParticleType(ParticleTypes.POOF); + public static final CompatParticleType PORTAL = new CompatParticleType(ParticleTypes.PORTAL); + public static final CompatParticleType RAIN = new CompatParticleType(ParticleTypes.RAIN); + public static final CompatParticleType SMOKE = new CompatParticleType(ParticleTypes.SMOKE); + public static final CompatParticleType WHITE_SMOKE = new CompatParticleType(ParticleTypes.WHITE_SMOKE); + public static final CompatParticleType SNEEZE = new CompatParticleType(ParticleTypes.SNEEZE); + public static final CompatParticleType SPIT = new CompatParticleType(ParticleTypes.SPIT); + public static final CompatParticleType SQUID_INK = new CompatParticleType(ParticleTypes.SQUID_INK); + public static final CompatParticleType SWEEP_ATTACK = new CompatParticleType(ParticleTypes.SWEEP_ATTACK); + public static final CompatParticleType TOTEM_OF_UNDYING = new CompatParticleType(ParticleTypes.TOTEM_OF_UNDYING); + public static final CompatParticleType UNDERWATER = new CompatParticleType(ParticleTypes.UNDERWATER); + public static final CompatParticleType SPLASH = new CompatParticleType(ParticleTypes.SPLASH); + public static final CompatParticleType WITCH = new CompatParticleType(ParticleTypes.WITCH); + public static final CompatParticleType BUBBLE_POP = new CompatParticleType(ParticleTypes.BUBBLE_POP); + public static final CompatParticleType CURRENT_DOWN = new CompatParticleType(ParticleTypes.CURRENT_DOWN); + public static final CompatParticleType BUBBLE_COLUMN_UP = new CompatParticleType(ParticleTypes.BUBBLE_COLUMN_UP); + public static final CompatParticleType NAUTILUS = new CompatParticleType(ParticleTypes.NAUTILUS); + public static final CompatParticleType DOLPHIN = new CompatParticleType(ParticleTypes.DOLPHIN); + public static final CompatParticleType CAMPFIRE_COSY_SMOKE = new CompatParticleType(ParticleTypes.CAMPFIRE_COSY_SMOKE); + public static final CompatParticleType CAMPFIRE_SIGNAL_SMOKE = new CompatParticleType(ParticleTypes.CAMPFIRE_SIGNAL_SMOKE); + public static final CompatParticleType DRIPPING_HONEY = new CompatParticleType(ParticleTypes.DRIPPING_HONEY); + public static final CompatParticleType FALLING_HONEY = new CompatParticleType(ParticleTypes.FALLING_HONEY); + public static final CompatParticleType LANDING_HONEY = new CompatParticleType(ParticleTypes.LANDING_HONEY); + public static final CompatParticleType FALLING_NECTAR = new CompatParticleType(ParticleTypes.FALLING_NECTAR); + public static final CompatParticleType FALLING_SPORE_BLOSSOM = new CompatParticleType(ParticleTypes.FALLING_SPORE_BLOSSOM); + public static final CompatParticleType ASH = new CompatParticleType(ParticleTypes.ASH); + public static final CompatParticleType CRIMSON_SPORE = new CompatParticleType(ParticleTypes.CRIMSON_SPORE); + public static final CompatParticleType WARPED_SPORE = new CompatParticleType(ParticleTypes.WARPED_SPORE); + public static final CompatParticleType SPORE_BLOSSOM_AIR = new CompatParticleType(ParticleTypes.SPORE_BLOSSOM_AIR); + public static final CompatParticleType DRIPPING_OBSIDIAN_TEAR = new CompatParticleType(ParticleTypes.DRIPPING_OBSIDIAN_TEAR); + public static final CompatParticleType FALLING_OBSIDIAN_TEAR = new CompatParticleType(ParticleTypes.FALLING_OBSIDIAN_TEAR); + public static final CompatParticleType LANDING_OBSIDIAN_TEAR = new CompatParticleType(ParticleTypes.LANDING_OBSIDIAN_TEAR); + public static final CompatParticleType REVERSE_PORTAL = new CompatParticleType(ParticleTypes.REVERSE_PORTAL); + public static final CompatParticleType WHITE_ASH = new CompatParticleType(ParticleTypes.WHITE_ASH); + public static final CompatParticleType SMALL_FLAME = new CompatParticleType(ParticleTypes.SMALL_FLAME); + public static final CompatParticleType SNOWFLAKE = new CompatParticleType(ParticleTypes.SNOWFLAKE); + public static final CompatParticleType DRIPPING_DRIPSTONE_LAVA = new CompatParticleType(ParticleTypes.DRIPPING_DRIPSTONE_LAVA); + public static final CompatParticleType FALLING_DRIPSTONE_LAVA = new CompatParticleType(ParticleTypes.FALLING_DRIPSTONE_LAVA); + public static final CompatParticleType DRIPPING_DRIPSTONE_WATER = new CompatParticleType(ParticleTypes.DRIPPING_DRIPSTONE_WATER); + public static final CompatParticleType FALLING_DRIPSTONE_WATER = new CompatParticleType(ParticleTypes.FALLING_DRIPSTONE_WATER); + public static final CompatParticleType GLOW_SQUID_INK = new CompatParticleType(ParticleTypes.GLOW_SQUID_INK); + public static final CompatParticleType GLOW = new CompatParticleType(ParticleTypes.GLOW); + public static final CompatParticleType WAX_ON = new CompatParticleType(ParticleTypes.WAX_ON); + public static final CompatParticleType WAX_OFF = new CompatParticleType(ParticleTypes.WAX_OFF); + public static final CompatParticleType ELECTRIC_SPARK = new CompatParticleType(ParticleTypes.ELECTRIC_SPARK); + public static final CompatParticleType SCRAPE = new CompatParticleType(ParticleTypes.SCRAPE); + public static final CompatParticleType SHRIEK = new CompatParticleType(ParticleTypes.SHRIEK); + public static final CompatParticleType EGG_CRACK = new CompatParticleType(ParticleTypes.EGG_CRACK); + public static final CompatParticleType DUST_PLUME = new CompatParticleType(ParticleTypes.DUST_PLUME); + public static final CompatParticleType TRIAL_SPAWNER_DETECTION = new CompatParticleType(ParticleTypes.TRIAL_SPAWNER_DETECTION); + public static final CompatParticleType TRIAL_SPAWNER_DETECTION_OMINOUS = new CompatParticleType(ParticleTypes.TRIAL_SPAWNER_DETECTION_OMINOUS); + public static final CompatParticleType VAULT_CONNECTION = new CompatParticleType(ParticleTypes.VAULT_CONNECTION); + public static final CompatParticleType DUST_PILLAR = new CompatParticleType(ParticleTypes.DUST_PILLAR); + public static final CompatParticleType OMINOUS_SPAWNING = new CompatParticleType(ParticleTypes.OMINOUS_SPAWNING); + public static final CompatParticleType RAID_OMEN = new CompatParticleType(ParticleTypes.RAID_OMEN); + public static final CompatParticleType TRIAL_OMEN = new CompatParticleType(ParticleTypes.TRIAL_OMEN); + public static final CompatParticleType BLOCK_CRUMBLE = new CompatParticleType(ParticleTypes.BLOCK_CRUMBLE); + public static final CompatParticleType FIREFLY = new CompatParticleType(ParticleTypes.FIREFLY); +} From 39a25a53f452e46337d255467b6f32754ca72916 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 03:07:00 +0900 Subject: [PATCH 602/617] [cp] feat: add utility methods for BlockEntity and BlockPos iteration --- .../mcpitanlib/api/util/BlockEntityUtil.java | 4 +++ .../mcpitanlib/api/util/world/TickerUtil.java | 6 +++- .../midohra/util/math/BlockPos.java | 33 +++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java index fcbf2733e..16f93d52f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockEntityUtil.java @@ -93,4 +93,8 @@ public static void writeToStack(ItemStack stack, BlockEntity blockEntity, Compat BlockEntityDataUtil.setBlockEntityNbt(stack, nbt); } + + public static boolean isRemoved(BlockEntity blockEntity) { + return blockEntity.isRemoved(); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/TickerUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/TickerUtil.java index 9b1a31163..eebe3f823 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/TickerUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/world/TickerUtil.java @@ -10,7 +10,7 @@ public class TickerUtil { public static void tick(T blockEntity, World world, BlockPos pos, BlockState state) { - if (blockEntity instanceof BlockEntityTicker) + if (isTicker(blockEntity)) ((BlockEntityTicker) blockEntity).tick(world, pos, state, blockEntity); } @@ -25,4 +25,8 @@ public static void tick(T blockEntity) { public static void tick(T entity) { entity.tick(); } + + public static boolean isTicker(BlockEntity blockEntity) { + return blockEntity instanceof BlockEntityTicker; + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java index 73d9bf7d2..fe07631fe 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/util/math/BlockPos.java @@ -2,6 +2,8 @@ import net.minecraft.util.math.Vec3i; +import java.util.Iterator; + public class BlockPos { private final net.minecraft.util.math.BlockPos blockPos; @@ -101,4 +103,35 @@ public boolean equals(Object obj) { BlockPos pos = (BlockPos) obj; return blockPos.equals(pos.blockPos); } + + public static Iterator iterate(BlockPos start, BlockPos end) { + return new Iterator() { + private final net.minecraft.util.math.BlockPos startRaw = start.toMinecraft(); + private final net.minecraft.util.math.BlockPos endRaw = end.toMinecraft(); + private int x = startRaw.getX(); + private int y = startRaw.getY(); + private int z = startRaw.getZ(); + + @Override + public boolean hasNext() { + return x <= endRaw.getX() && y <= endRaw.getY() && z <= endRaw.getZ(); + } + + @Override + public BlockPos next() { + BlockPos current = new BlockPos(new net.minecraft.util.math.BlockPos(x, y, z)); + if (x < endRaw.getX()) { + x++; + } else if (y < endRaw.getY()) { + x = startRaw.getX(); + y++; + } else if (z < endRaw.getZ()) { + x = startRaw.getX(); + y = startRaw.getY(); + z++; + } + return current; + } + }; + } } \ No newline at end of file From 307f74703212e1dbd8b3ae8d145e311d51c1dbc3 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 13:38:03 +0900 Subject: [PATCH 603/617] [cp] feat: add utility methods for BlockState manipulation in IProperty and DirectionBoolPropertyUtil --- .../mcpitanlib/api/state/property/IProperty.java | 16 ++++++++++++++++ .../api/util/DirectionBoolPropertyUtil.java | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java index 549d2708e..2274a41e3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/state/property/IProperty.java @@ -30,4 +30,20 @@ default String getName() { } Property getProperty(); + + default net.pitan76.mcpitanlib.midohra.block.BlockState with(net.pitan76.mcpitanlib.midohra.block.BlockState state, T value) { + return state.with(getProperty(), value); + } + + default T get(net.pitan76.mcpitanlib.midohra.block.BlockState state) { + return state.get(getProperty()); + } + + default boolean contains(net.pitan76.mcpitanlib.midohra.block.BlockState state) { + return state.contains(getProperty()); + } + + default net.pitan76.mcpitanlib.midohra.block.BlockState cycle(net.pitan76.mcpitanlib.midohra.block.BlockState state) { + return state.cycle(getProperty()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/DirectionBoolPropertyUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DirectionBoolPropertyUtil.java index efad0af51..13d9ad550 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/DirectionBoolPropertyUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/DirectionBoolPropertyUtil.java @@ -55,4 +55,14 @@ public static void addProperties(AppendPropertiesArgs args) { args.addProperty(CompatProperties.UP, CompatProperties.DOWN, CompatProperties.NORTH, CompatProperties.EAST, CompatProperties.SOUTH, CompatProperties.WEST); } + + public static BlockState withAll(BlockState state, boolean value) { + return state + .with(CompatProperties.UP, value) + .with(CompatProperties.DOWN, value) + .with(CompatProperties.NORTH, value) + .with(CompatProperties.EAST, value) + .with(CompatProperties.SOUTH, value) + .with(CompatProperties.WEST, value); + } } From 8bafa5d133bffeaa1f8c22d460f83d38324ce4cf Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 13:52:19 +0900 Subject: [PATCH 604/617] [cp] feat: implement hashCode and equals methods for various wrapper classes and add utility methods for BlockState --- .../api/event/block/FluidStateArgs.java | 4 ++++ .../mcpitanlib/midohra/block/BlockState.java | 21 +++++++++++++++++++ .../midohra/block/BlockWrapper.java | 13 ++++++++++++ .../midohra/client/render/CameraWrapper.java | 18 +++++++++++----- .../midohra/entity/EntityTypeWrapper.java | 13 ++++++++++++ .../mcpitanlib/midohra/world/WorldView.java | 13 ++++++++++++ 6 files changed, 77 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/FluidStateArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/FluidStateArgs.java index 12482458a..9bcda6872 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/FluidStateArgs.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/event/block/FluidStateArgs.java @@ -12,4 +12,8 @@ public FluidStateArgs(BlockState state) { public BlockState getState() { return state; } + + public net.pitan76.mcpitanlib.midohra.block.BlockState getMidohraState() { + return net.pitan76.mcpitanlib.midohra.block.BlockState.of(state); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java index 8cce5880f..b2f6a36ff 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java @@ -104,4 +104,25 @@ public > boolean contains(IProperty property) { public boolean contains(DirectionProperty property) { return contains(property.getProperty()); } + + @Override + public int hashCode() { + return toMinecraft().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + BlockState state = (BlockState) obj; + return toMinecraft().equals(state.toMinecraft()); + } + + public boolean isOpaque() { + return BlockStateUtil.isOpaque(toMinecraft()); + } + + public boolean hasRandomTicks() { + return BlockStateUtil.hasRandomTicks(toMinecraft()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java index fa1618e11..9b0a7b54a 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockWrapper.java @@ -90,4 +90,17 @@ public BlockState getDefaultState() { public boolean rawEquals(BlockWrapper block) { return get() == block.get(); } + + @Override + public int hashCode() { + return get() != null ? get().hashCode() : 0; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + BlockWrapper other = (BlockWrapper) obj; + return rawEquals(other); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java index e605609e1..f6203ec42 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/client/render/CameraWrapper.java @@ -4,6 +4,8 @@ import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; import net.pitan76.mcpitanlib.midohra.util.math.Vector3d; +import java.util.Objects; + public class CameraWrapper { private final Camera camera; @@ -55,10 +57,16 @@ public float getPitch() { return camera.getPitch(); } + @Override + public int hashCode() { + return camera != null ? camera.hashCode() : 0; + } - - - - - + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + CameraWrapper other = (CameraWrapper) obj; + return Objects.equals(camera, other.camera); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypeWrapper.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypeWrapper.java index bf90199bb..af0d640c8 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypeWrapper.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/entity/EntityTypeWrapper.java @@ -53,4 +53,17 @@ public String getTranslationKey() { public boolean rawEquals(EntityTypeWrapper other) { return entityType == other.entityType; } + + @Override + public int hashCode() { + return get() != null ? get().hashCode() : 0; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + EntityTypeWrapper other = (EntityTypeWrapper) obj; + return rawEquals(other); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java index fa5f7a011..40f88673c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/world/WorldView.java @@ -71,4 +71,17 @@ public FluidState getFluidState(net.minecraft.util.math.BlockPos pos) { public net.minecraft.world.WorldView getRedstoneView() { return getRaw(); } + + @Override + public int hashCode() { + return getRaw() != null ? getRaw().hashCode() : 0; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + WorldView other = (WorldView) obj; + return getRaw() != null ? getRaw().equals(other.getRaw()) : other.getRaw() == null; + } } From 0c0935bde8530dfbf2dd60eb85fd83631608c390 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:04:39 +0900 Subject: [PATCH 605/617] [cp] feat: add canPlaceAt method and CanPlaceAtArgs class for block placement validation --- .../api/block/args/v2/CanPlaceAtArgs.java | 54 +++++++++++++++++++ .../mcpitanlib/api/block/v2/CompatBlock.java | 10 ++++ .../mcpitanlib/api/util/BlockStateUtil.java | 8 +++ .../mcpitanlib/midohra/block/BlockState.java | 6 +++ 4 files changed, 78 insertions(+) create mode 100644 common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CanPlaceAtArgs.java diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CanPlaceAtArgs.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CanPlaceAtArgs.java new file mode 100644 index 000000000..c111c0aa3 --- /dev/null +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/args/v2/CanPlaceAtArgs.java @@ -0,0 +1,54 @@ +package net.pitan76.mcpitanlib.api.block.args.v2; + +import net.pitan76.mcpitanlib.api.event.BaseEvent; +import net.pitan76.mcpitanlib.midohra.block.BlockState; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.WorldView; + +public class CanPlaceAtArgs extends BaseEvent { + public final net.minecraft.block.BlockState state; + public final net.minecraft.world.WorldView world; + public final net.minecraft.util.math.BlockPos pos; + + public CanPlaceAtArgs(net.minecraft.block.BlockState state, net.minecraft.world.WorldView world, net.minecraft.util.math.BlockPos pos) { + this.state = state; + this.world = world; + this.pos = pos; + } + + public CanPlaceAtArgs(BlockState state, WorldView world, BlockPos pos) { + this(state.toMinecraft(), world.toMinecraft(), pos.toMinecraft()); + } + + public net.minecraft.block.BlockState getState() { + return state; + } + + public net.minecraft.world.WorldView getWorld() { + return world; + } + + public net.minecraft.util.math.BlockPos getPos() { + return pos; + } + + public BlockState getMidohraState() { + return BlockState.of(state); + } + + public WorldView getMidohraWorld() { + return WorldView.of(world); + } + + public BlockPos getMidohraPos() { + return BlockPos.of(pos); + } + + public boolean isClient() { + return world.isClient(); + } + + public boolean isServer() { + return !world.isClient(); + } +} diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index fd5a9f635..d562006bf 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -163,4 +163,14 @@ public int getComparatorOutput(BlockState state, World world, BlockPos pos) { public int getComparatorOutput(GetComparatorOutputArgs args) { return super.getComparatorOutput(args.state, args.world, args.pos); } + + @Deprecated + @Override + protected boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + return canPlaceAt(new CanPlaceAtArgs(state, world, pos)); + } + + public boolean canPlaceAt(CanPlaceAtArgs args) { + return super.canPlaceAt(args.state, args.world, args.pos); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java index 1d978392f..b19b50a89 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/BlockStateUtil.java @@ -144,4 +144,12 @@ public static int getOpacity(net.pitan76.mcpitanlib.midohra.block.BlockState sta public static int getComparatorOutput(net.pitan76.mcpitanlib.midohra.block.BlockState state, net.pitan76.mcpitanlib.midohra.world.World world, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos) { return getComparatorOutput(state.toMinecraft(), world.getRaw(), pos.toMinecraft()); } + + public static boolean canPlaceAt(BlockState state, BlockPos pos, World world) { + return state.canPlaceAt(world, pos); + } + + public static boolean canPlaceAt(net.pitan76.mcpitanlib.midohra.block.BlockState state, net.pitan76.mcpitanlib.midohra.util.math.BlockPos pos, net.pitan76.mcpitanlib.midohra.world.World world) { + return canPlaceAt(state.toMinecraft(), pos.toMinecraft(), world.getRaw()); + } } diff --git a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java index b2f6a36ff..7d6d9d0f3 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/midohra/block/BlockState.java @@ -5,6 +5,8 @@ import net.pitan76.mcpitanlib.api.state.property.DirectionProperty; import net.pitan76.mcpitanlib.api.state.property.IProperty; import net.pitan76.mcpitanlib.api.util.BlockStateUtil; +import net.pitan76.mcpitanlib.midohra.util.math.BlockPos; +import net.pitan76.mcpitanlib.midohra.world.World; public class BlockState { private final net.minecraft.block.BlockState state; @@ -125,4 +127,8 @@ public boolean isOpaque() { public boolean hasRandomTicks() { return BlockStateUtil.hasRandomTicks(toMinecraft()); } + + public boolean canPlaceAt(BlockPos pos, World world) { + return BlockStateUtil.canPlaceAt(this, pos, world); + } } From 03300026f6b51646c2753f4adfa0cc8af85ea347 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:05:19 +0900 Subject: [PATCH 606/617] [cp] chore: bump version 3.5.0 --- info.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.properties b/info.properties index e5b2bf5ff..d6856a9aa 100644 --- a/info.properties +++ b/info.properties @@ -1,4 +1,4 @@ archives_base_name=mcpitanlib -mod_version=3.4.9 +mod_version=3.5.0 maven_group=net.pitan76 changelog=Add Compat APIs From a16b9e0479996545360f448aaa35bdc9caf62b10 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 13:34:50 +0900 Subject: [PATCH 607/617] [cp] feat: add methods for Midohra world and position handling in CompatEntity and PosUtil --- .../mcpitanlib/api/entity/CompatEntity.java | 17 +++++++++++++++++ .../mcpitanlib/api/util/math/PosUtil.java | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java index ee6f26d47..f0e9d6905 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/entity/CompatEntity.java @@ -12,6 +12,7 @@ import net.pitan76.mcpitanlib.api.event.entity.InitDataTrackerArgs; import net.pitan76.mcpitanlib.api.event.nbt.ReadNbtArgs; import net.pitan76.mcpitanlib.api.event.nbt.WriteNbtArgs; +import net.pitan76.mcpitanlib.midohra.util.math.Vector3d; public class CompatEntity extends Entity { public CompatEntity(EntityType type, World world) { @@ -98,4 +99,20 @@ public boolean hasServerWorld() { public ServerWorld getServerWorld() { return (ServerWorld) getWorld(); } + + public net.pitan76.mcpitanlib.midohra.world.World getMidohraWorld() { + return net.pitan76.mcpitanlib.midohra.world.World.of(callGetWorld()); + } + + public net.pitan76.mcpitanlib.midohra.util.math.BlockPos getMidohraBlockPos() { + return net.pitan76.mcpitanlib.midohra.util.math.BlockPos.of(callGetBlockPos()); + } + + public Vector3d getMidohraPos() { + return Vector3d.of(callGetPos()); + } + + public net.pitan76.mcpitanlib.midohra.world.ServerWorld getMidohraServerWorld() { + return net.pitan76.mcpitanlib.midohra.world.ServerWorld.of(getServerWorld()); + } } \ No newline at end of file diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java index 0bda52c86..78417b3de 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/math/PosUtil.java @@ -105,4 +105,8 @@ public static BlockPos offset(BlockPos pos, net.pitan76.mcpitanlib.midohra.util. public static BlockPos offset(BlockPos pos, net.pitan76.mcpitanlib.midohra.util.math.Direction direction, int n) { return pos.offset(direction.toMinecraft(), n); } + + public static BlockPos toImmutable(BlockPos pos) { + return pos.toImmutable(); + } } From 156f0b98844a799f21c958dbf4da2e93c301a250 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:15:27 +0900 Subject: [PATCH 608/617] [cp] fix: update COPPER_FIRE_FLAME particle type to use FLAME type --- .../mcpitanlib/api/util/particle/CompatParticleTypes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java index 5562d9bda..f1bb122a9 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -8,7 +8,7 @@ public class CompatParticleTypes { public static final CompatParticleType BLOCK_MARKER = new CompatParticleType(ParticleTypes.BLOCK_MARKER); public static final CompatParticleType BUBBLE = new CompatParticleType(ParticleTypes.BUBBLE); public static final CompatParticleType CLOUD = new CompatParticleType(ParticleTypes.CLOUD); - public static final CompatParticleType COPPER_FIRE_FLAME = new CompatParticleType(ParticleTypes.COPPER_FIRE_FLAME); + public static final CompatParticleType COPPER_FIRE_FLAME = new CompatParticleType(ParticleTypes.FLAME); public static final CompatParticleType CRIT = new CompatParticleType(ParticleTypes.CRIT); public static final CompatParticleType DAMAGE_INDICATOR = new CompatParticleType(ParticleTypes.DAMAGE_INDICATOR); public static final CompatParticleType DRAGON_BREATH = new CompatParticleType(ParticleTypes.DRAGON_BREATH); From b51c3f116623fb29a3ed3191aa5c3b0032bd0def Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:30:40 +0900 Subject: [PATCH 609/617] [cp] fix: update TINTED_LEAVES and FIREFLY particle types to use PALE_OAK_LEAVES and NOTE types respectively --- .../mcpitanlib/api/util/particle/CompatParticleTypes.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java index f1bb122a9..5a6767daa 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -39,7 +39,7 @@ public class CompatParticleTypes { public static final CompatParticleType INFESTED = new CompatParticleType(ParticleTypes.INFESTED); public static final CompatParticleType CHERRY_LEAVES = new CompatParticleType(ParticleTypes.CHERRY_LEAVES); public static final CompatParticleType PALE_OAK_LEAVES = new CompatParticleType(ParticleTypes.PALE_OAK_LEAVES); - public static final CompatParticleType TINTED_LEAVES = new CompatParticleType(ParticleTypes.TINTED_LEAVES); + public static final CompatParticleType TINTED_LEAVES = new CompatParticleType(ParticleTypes.PALE_OAK_LEAVES); public static final CompatParticleType SCULK_SOUL = new CompatParticleType(ParticleTypes.SCULK_SOUL); public static final CompatParticleType SCULK_CHARGE = new CompatParticleType(ParticleTypes.SCULK_CHARGE); public static final CompatParticleType SCULK_CHARGE_POP = new CompatParticleType(ParticleTypes.SCULK_CHARGE_POP); @@ -117,5 +117,5 @@ public class CompatParticleTypes { public static final CompatParticleType RAID_OMEN = new CompatParticleType(ParticleTypes.RAID_OMEN); public static final CompatParticleType TRIAL_OMEN = new CompatParticleType(ParticleTypes.TRIAL_OMEN); public static final CompatParticleType BLOCK_CRUMBLE = new CompatParticleType(ParticleTypes.BLOCK_CRUMBLE); - public static final CompatParticleType FIREFLY = new CompatParticleType(ParticleTypes.FIREFLY); + public static final CompatParticleType FIREFLY = new CompatParticleType(ParticleTypes.NOTE); } From 64ccfccc0baae2c62359903731f95696d009d3f7 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:33:05 +0900 Subject: [PATCH 610/617] [cp] fix: update PALE_OAK_LEAVES and TINTED_LEAVES particle types to use BLOCK type --- .../mcpitanlib/api/util/particle/CompatParticleTypes.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java index 5a6767daa..d0b25a5fe 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -38,8 +38,8 @@ public class CompatParticleTypes { public static final CompatParticleType FLAME = new CompatParticleType(ParticleTypes.FLAME); public static final CompatParticleType INFESTED = new CompatParticleType(ParticleTypes.INFESTED); public static final CompatParticleType CHERRY_LEAVES = new CompatParticleType(ParticleTypes.CHERRY_LEAVES); - public static final CompatParticleType PALE_OAK_LEAVES = new CompatParticleType(ParticleTypes.PALE_OAK_LEAVES); - public static final CompatParticleType TINTED_LEAVES = new CompatParticleType(ParticleTypes.PALE_OAK_LEAVES); + public static final CompatParticleType PALE_OAK_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); + public static final CompatParticleType TINTED_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType SCULK_SOUL = new CompatParticleType(ParticleTypes.SCULK_SOUL); public static final CompatParticleType SCULK_CHARGE = new CompatParticleType(ParticleTypes.SCULK_CHARGE); public static final CompatParticleType SCULK_CHARGE_POP = new CompatParticleType(ParticleTypes.SCULK_CHARGE_POP); From 9236fdc4aa008a593515d61a9e3153fb6efe174d Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:35:09 +0900 Subject: [PATCH 611/617] [cp] fix: add import for WorldView in CompatBlock.java --- .../java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index d562006bf..431e17994 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -11,6 +11,7 @@ import net.minecraft.world.BlockView; import net.minecraft.world.World; import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; import net.pitan76.mcpitanlib.api.block.CompatBlockRenderType; import net.pitan76.mcpitanlib.api.block.ExtendBlock; import net.pitan76.mcpitanlib.api.block.args.RenderTypeArgs; From 98b93886173d83cc7602ac109eb9565e33cc5189 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:35:58 +0900 Subject: [PATCH 612/617] [cp] fix CompatParticleTypes1211 --- .../mcpitanlib/api/util/particle/CompatParticleTypes.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java index d0b25a5fe..e19059ab7 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -52,7 +52,7 @@ public class CompatParticleTypes { public static final CompatParticleType INSTANT_EFFECT = new CompatParticleType(ParticleTypes.INSTANT_EFFECT); public static final CompatParticleType ITEM = new CompatParticleType(ParticleTypes.ITEM); public static final CompatParticleType VIBRATION = new CompatParticleType(ParticleTypes.VIBRATION); - public static final CompatParticleType TRAIL = new CompatParticleType(ParticleTypes.TRAIL); + public static final CompatParticleType TRAIL = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType ITEM_SLIME = new CompatParticleType(ParticleTypes.ITEM_SLIME); public static final CompatParticleType ITEM_COBWEB = new CompatParticleType(ParticleTypes.ITEM_COBWEB); public static final CompatParticleType ITEM_SNOWBALL = new CompatParticleType(ParticleTypes.ITEM_SNOWBALL); @@ -116,6 +116,6 @@ public class CompatParticleTypes { public static final CompatParticleType OMINOUS_SPAWNING = new CompatParticleType(ParticleTypes.OMINOUS_SPAWNING); public static final CompatParticleType RAID_OMEN = new CompatParticleType(ParticleTypes.RAID_OMEN); public static final CompatParticleType TRIAL_OMEN = new CompatParticleType(ParticleTypes.TRIAL_OMEN); - public static final CompatParticleType BLOCK_CRUMBLE = new CompatParticleType(ParticleTypes.BLOCK_CRUMBLE); + public static final CompatParticleType BLOCK_CRUMBLE = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType FIREFLY = new CompatParticleType(ParticleTypes.NOTE); } From 6b309f03ea6123a887e15853e7cd66dabece7f9f Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:37:24 +0900 Subject: [PATCH 613/617] [cp] fix: change canPlaceAt method visibility from protected to public in CompatBlock.java --- .../java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java index 431e17994..8d0eb4a4d 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/block/v2/CompatBlock.java @@ -167,7 +167,7 @@ public int getComparatorOutput(GetComparatorOutputArgs args) { @Deprecated @Override - protected boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { return canPlaceAt(new CanPlaceAtArgs(state, world, pos)); } From f96c98e9b109c584a984e98cde42480e348cd365 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:38:57 +0900 Subject: [PATCH 614/617] [cp] fix: CompatParticleTypes 1204 --- .../util/particle/CompatParticleTypes.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java index e19059ab7..c1217ee27 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -28,15 +28,15 @@ public class CompatParticleTypes { public static final CompatParticleType EXPLOSION_EMITTER = new CompatParticleType(ParticleTypes.EXPLOSION_EMITTER); public static final CompatParticleType EXPLOSION = new CompatParticleType(ParticleTypes.EXPLOSION); public static final CompatParticleType GUST = new CompatParticleType(ParticleTypes.GUST); - public static final CompatParticleType SMALL_GUST = new CompatParticleType(ParticleTypes.SMALL_GUST); - public static final CompatParticleType GUST_EMITTER_LARGE = new CompatParticleType(ParticleTypes.GUST_EMITTER_LARGE); - public static final CompatParticleType GUST_EMITTER_SMALL = new CompatParticleType(ParticleTypes.GUST_EMITTER_SMALL); + public static final CompatParticleType SMALL_GUST = new CompatParticleType(ParticleTypes.GUST); + public static final CompatParticleType GUST_EMITTER_LARGE = new CompatParticleType(ParticleTypes.GUST_EMITTER); + public static final CompatParticleType GUST_EMITTER_SMALL = new CompatParticleType(ParticleTypes.GUST_EMITTER); public static final CompatParticleType SONIC_BOOM = new CompatParticleType(ParticleTypes.SONIC_BOOM); public static final CompatParticleType FALLING_DUST = new CompatParticleType(ParticleTypes.FALLING_DUST); public static final CompatParticleType FIREWORK = new CompatParticleType(ParticleTypes.FIREWORK); public static final CompatParticleType FISHING = new CompatParticleType(ParticleTypes.FISHING); public static final CompatParticleType FLAME = new CompatParticleType(ParticleTypes.FLAME); - public static final CompatParticleType INFESTED = new CompatParticleType(ParticleTypes.INFESTED); + public static final CompatParticleType INFESTED = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType CHERRY_LEAVES = new CompatParticleType(ParticleTypes.CHERRY_LEAVES); public static final CompatParticleType PALE_OAK_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType TINTED_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); @@ -54,7 +54,7 @@ public class CompatParticleTypes { public static final CompatParticleType VIBRATION = new CompatParticleType(ParticleTypes.VIBRATION); public static final CompatParticleType TRAIL = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType ITEM_SLIME = new CompatParticleType(ParticleTypes.ITEM_SLIME); - public static final CompatParticleType ITEM_COBWEB = new CompatParticleType(ParticleTypes.ITEM_COBWEB); + public static final CompatParticleType ITEM_COBWEB = new CompatParticleType(ParticleTypes.ITEM); public static final CompatParticleType ITEM_SNOWBALL = new CompatParticleType(ParticleTypes.ITEM_SNOWBALL); public static final CompatParticleType LARGE_SMOKE = new CompatParticleType(ParticleTypes.LARGE_SMOKE); public static final CompatParticleType LAVA = new CompatParticleType(ParticleTypes.LAVA); @@ -110,12 +110,12 @@ public class CompatParticleTypes { public static final CompatParticleType EGG_CRACK = new CompatParticleType(ParticleTypes.EGG_CRACK); public static final CompatParticleType DUST_PLUME = new CompatParticleType(ParticleTypes.DUST_PLUME); public static final CompatParticleType TRIAL_SPAWNER_DETECTION = new CompatParticleType(ParticleTypes.TRIAL_SPAWNER_DETECTION); - public static final CompatParticleType TRIAL_SPAWNER_DETECTION_OMINOUS = new CompatParticleType(ParticleTypes.TRIAL_SPAWNER_DETECTION_OMINOUS); - public static final CompatParticleType VAULT_CONNECTION = new CompatParticleType(ParticleTypes.VAULT_CONNECTION); - public static final CompatParticleType DUST_PILLAR = new CompatParticleType(ParticleTypes.DUST_PILLAR); - public static final CompatParticleType OMINOUS_SPAWNING = new CompatParticleType(ParticleTypes.OMINOUS_SPAWNING); - public static final CompatParticleType RAID_OMEN = new CompatParticleType(ParticleTypes.RAID_OMEN); - public static final CompatParticleType TRIAL_OMEN = new CompatParticleType(ParticleTypes.TRIAL_OMEN); + public static final CompatParticleType TRIAL_SPAWNER_DETECTION_OMINOUS = new CompatParticleType(ParticleTypes.TRIAL_SPAWNER_DETECTION); + public static final CompatParticleType VAULT_CONNECTION = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType DUST_PILLAR = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType OMINOUS_SPAWNING = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType RAID_OMEN = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType TRIAL_OMEN = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType BLOCK_CRUMBLE = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType FIREFLY = new CompatParticleType(ParticleTypes.NOTE); } From e235693c95f6e50d7dc8fc9878a8db181f6b3a58 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:41:32 +0900 Subject: [PATCH 615/617] [cp] fix: CompatParticleTypes 1201 --- .../api/util/particle/CompatParticleTypes.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java index c1217ee27..8e74c9aaa 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -27,10 +27,10 @@ public class CompatParticleTypes { public static final CompatParticleType ENTITY_EFFECT = new CompatParticleType(ParticleTypes.ENTITY_EFFECT); public static final CompatParticleType EXPLOSION_EMITTER = new CompatParticleType(ParticleTypes.EXPLOSION_EMITTER); public static final CompatParticleType EXPLOSION = new CompatParticleType(ParticleTypes.EXPLOSION); - public static final CompatParticleType GUST = new CompatParticleType(ParticleTypes.GUST); - public static final CompatParticleType SMALL_GUST = new CompatParticleType(ParticleTypes.GUST); - public static final CompatParticleType GUST_EMITTER_LARGE = new CompatParticleType(ParticleTypes.GUST_EMITTER); - public static final CompatParticleType GUST_EMITTER_SMALL = new CompatParticleType(ParticleTypes.GUST_EMITTER); + public static final CompatParticleType GUST = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType SMALL_GUST = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType GUST_EMITTER_LARGE = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType GUST_EMITTER_SMALL = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType SONIC_BOOM = new CompatParticleType(ParticleTypes.SONIC_BOOM); public static final CompatParticleType FALLING_DUST = new CompatParticleType(ParticleTypes.FALLING_DUST); public static final CompatParticleType FIREWORK = new CompatParticleType(ParticleTypes.FIREWORK); @@ -64,7 +64,7 @@ public class CompatParticleTypes { public static final CompatParticleType PORTAL = new CompatParticleType(ParticleTypes.PORTAL); public static final CompatParticleType RAIN = new CompatParticleType(ParticleTypes.RAIN); public static final CompatParticleType SMOKE = new CompatParticleType(ParticleTypes.SMOKE); - public static final CompatParticleType WHITE_SMOKE = new CompatParticleType(ParticleTypes.WHITE_SMOKE); + public static final CompatParticleType WHITE_SMOKE = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType SNEEZE = new CompatParticleType(ParticleTypes.SNEEZE); public static final CompatParticleType SPIT = new CompatParticleType(ParticleTypes.SPIT); public static final CompatParticleType SQUID_INK = new CompatParticleType(ParticleTypes.SQUID_INK); @@ -108,9 +108,9 @@ public class CompatParticleTypes { public static final CompatParticleType SCRAPE = new CompatParticleType(ParticleTypes.SCRAPE); public static final CompatParticleType SHRIEK = new CompatParticleType(ParticleTypes.SHRIEK); public static final CompatParticleType EGG_CRACK = new CompatParticleType(ParticleTypes.EGG_CRACK); - public static final CompatParticleType DUST_PLUME = new CompatParticleType(ParticleTypes.DUST_PLUME); - public static final CompatParticleType TRIAL_SPAWNER_DETECTION = new CompatParticleType(ParticleTypes.TRIAL_SPAWNER_DETECTION); - public static final CompatParticleType TRIAL_SPAWNER_DETECTION_OMINOUS = new CompatParticleType(ParticleTypes.TRIAL_SPAWNER_DETECTION); + public static final CompatParticleType DUST_PLUME = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType TRIAL_SPAWNER_DETECTION = new CompatParticleType(ParticleTypes.EFFECT); + public static final CompatParticleType TRIAL_SPAWNER_DETECTION_OMINOUS = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType VAULT_CONNECTION = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType DUST_PILLAR = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType OMINOUS_SPAWNING = new CompatParticleType(ParticleTypes.EFFECT); From 420204b06499c00f65f8f0803f1d8a2ad66ad9f2 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:44:24 +0900 Subject: [PATCH 616/617] [cp] fix: CompatParticleTypes 1192 --- .../mcpitanlib/api/util/particle/CompatParticleType.java | 4 ++-- .../mcpitanlib/api/util/particle/CompatParticleTypes.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleType.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleType.java index 758900a07..d9914830f 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleType.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleType.java @@ -1,8 +1,8 @@ package net.pitan76.mcpitanlib.api.util.particle; import net.minecraft.particle.ParticleType; -import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import net.pitan76.mcpitanlib.api.util.CompatIdentifier; public class CompatParticleType { @@ -25,7 +25,7 @@ public boolean shouldAlwaysSpawn() { } public Identifier getId() { - return Registries.PARTICLE_TYPE.getId(particleType); + return Registry.PARTICLE_TYPE.getId(particleType); } public CompatIdentifier getCompatId() { diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java index 8e74c9aaa..fe56ede91 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -37,7 +37,7 @@ public class CompatParticleTypes { public static final CompatParticleType FISHING = new CompatParticleType(ParticleTypes.FISHING); public static final CompatParticleType FLAME = new CompatParticleType(ParticleTypes.FLAME); public static final CompatParticleType INFESTED = new CompatParticleType(ParticleTypes.EFFECT); - public static final CompatParticleType CHERRY_LEAVES = new CompatParticleType(ParticleTypes.CHERRY_LEAVES); + public static final CompatParticleType CHERRY_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType PALE_OAK_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType TINTED_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType SCULK_SOUL = new CompatParticleType(ParticleTypes.SCULK_SOUL); @@ -107,7 +107,7 @@ public class CompatParticleTypes { public static final CompatParticleType ELECTRIC_SPARK = new CompatParticleType(ParticleTypes.ELECTRIC_SPARK); public static final CompatParticleType SCRAPE = new CompatParticleType(ParticleTypes.SCRAPE); public static final CompatParticleType SHRIEK = new CompatParticleType(ParticleTypes.SHRIEK); - public static final CompatParticleType EGG_CRACK = new CompatParticleType(ParticleTypes.EGG_CRACK); + public static final CompatParticleType EGG_CRACK = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType DUST_PLUME = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType TRIAL_SPAWNER_DETECTION = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType TRIAL_SPAWNER_DETECTION_OMINOUS = new CompatParticleType(ParticleTypes.EFFECT); From 741a27abbc1e544013210381ea61d624878fdc43 Mon Sep 17 00:00:00 2001 From: PTOM76 Date: Mon, 23 Mar 2026 14:46:12 +0900 Subject: [PATCH 617/617] [cp] fix: CompatParticleTypes 1182 --- .../api/util/particle/CompatParticleTypes.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java index fe56ede91..208a8787c 100644 --- a/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java +++ b/common/src/main/java/net/pitan76/mcpitanlib/api/util/particle/CompatParticleTypes.java @@ -31,7 +31,7 @@ public class CompatParticleTypes { public static final CompatParticleType SMALL_GUST = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType GUST_EMITTER_LARGE = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType GUST_EMITTER_SMALL = new CompatParticleType(ParticleTypes.EFFECT); - public static final CompatParticleType SONIC_BOOM = new CompatParticleType(ParticleTypes.SONIC_BOOM); + public static final CompatParticleType SONIC_BOOM = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType FALLING_DUST = new CompatParticleType(ParticleTypes.FALLING_DUST); public static final CompatParticleType FIREWORK = new CompatParticleType(ParticleTypes.FIREWORK); public static final CompatParticleType FISHING = new CompatParticleType(ParticleTypes.FISHING); @@ -40,9 +40,9 @@ public class CompatParticleTypes { public static final CompatParticleType CHERRY_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType PALE_OAK_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType TINTED_LEAVES = new CompatParticleType(ParticleTypes.BLOCK); - public static final CompatParticleType SCULK_SOUL = new CompatParticleType(ParticleTypes.SCULK_SOUL); - public static final CompatParticleType SCULK_CHARGE = new CompatParticleType(ParticleTypes.SCULK_CHARGE); - public static final CompatParticleType SCULK_CHARGE_POP = new CompatParticleType(ParticleTypes.SCULK_CHARGE_POP); + public static final CompatParticleType SCULK_SOUL = new CompatParticleType(ParticleTypes.BLOCK); + public static final CompatParticleType SCULK_CHARGE = new CompatParticleType(ParticleTypes.BLOCK); + public static final CompatParticleType SCULK_CHARGE_POP = new CompatParticleType(ParticleTypes.BLOCK); public static final CompatParticleType SOUL_FIRE_FLAME = new CompatParticleType(ParticleTypes.SOUL_FIRE_FLAME); public static final CompatParticleType SOUL = new CompatParticleType(ParticleTypes.SOUL); public static final CompatParticleType FLASH = new CompatParticleType(ParticleTypes.FLASH); @@ -106,7 +106,7 @@ public class CompatParticleTypes { public static final CompatParticleType WAX_OFF = new CompatParticleType(ParticleTypes.WAX_OFF); public static final CompatParticleType ELECTRIC_SPARK = new CompatParticleType(ParticleTypes.ELECTRIC_SPARK); public static final CompatParticleType SCRAPE = new CompatParticleType(ParticleTypes.SCRAPE); - public static final CompatParticleType SHRIEK = new CompatParticleType(ParticleTypes.SHRIEK); + public static final CompatParticleType SHRIEK = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType EGG_CRACK = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType DUST_PLUME = new CompatParticleType(ParticleTypes.EFFECT); public static final CompatParticleType TRIAL_SPAWNER_DETECTION = new CompatParticleType(ParticleTypes.EFFECT);