From e4f942b0fd64a2d238b27819c40a0e4957167706 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Fri, 9 Feb 2024 18:03:36 -0600 Subject: [PATCH 01/17] optimized lang & new config entries --- src/main/resources/assets/sit/lang/en_us.json | 57 ++++++++++--------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/src/main/resources/assets/sit/lang/en_us.json b/src/main/resources/assets/sit/lang/en_us.json index fe8916c..8285920 100644 --- a/src/main/resources/assets/sit/lang/en_us.json +++ b/src/main/resources/assets/sit/lang/en_us.json @@ -1,7 +1,4 @@ { - "config.sit.empty": "Empty", - "config.sit.restrictive": "Restrictive", - "config.sit.none": "None", "config.sit.category.general": "General", "config.sit.category.general.tooltip": "General settings", "config.sit.category.main_hand": "Main Hand", @@ -22,30 +19,34 @@ "config.sit.general.sittable.custom.description": "Enables adding custom blocks to sit on.", "config.sit.general.sittable_blocks": "Custom Sittable Blocks", "config.sit.general.sittable_blocks.description": "Add custom sittable blocks!", - "config.sit.general.sittable_blocks.description_2": "Example: %s", - "config.sit.general.sittable_blocks.description_4": "First entry: custom block", - "config.sit.general.sittable_blocks.description_5": "Second entry: sitting height (number from 0-1 eg 0.52)", - "config.sit.general.sittable_blocks.description_6": "Third entry: hitbox size (where the player spawns above the entity when dismounting)", - "config.sit.general.sittable_blocks.description_7": "Fourth entry (optional): required blockstate to sit (Put a \"!\" to exclude blockstates)", - "config.sit.general.sittable_blocks.description_8": "Separate different entries with \"|\"!", + "config.sit.general.sittable_blocks.description.2": "First entry: custom block id", + "config.sit.general.sittable_blocks.description.3": "Second entry: sitting height (number from 0-1 eg 0.52)", + "config.sit.general.sittable_blocks.description.4": "Third entry: hitbox size (where the player spawns above the entity when dismounting)", + "config.sit.general.sittable_blocks.description.5": "Fourth entry (optional): required blockstate to sit (Put a \"!\" to exclude blockstates)", + "config.sit.general.sittable_blocks.description.6": "Separate different entries with \"|\"!", "config.sit.hand": "Hand Settings", - "config.sit.hand.requirements": "Requirements", - "config.sit.hand.requirements.description": "Hand requirements for sitting.", - "config.sit.hand.requirements.description_2": "Empty = hand has to be empty", - "config.sit.hand.requirements.description_3": "Restrictive = set restrictions for hand state", - "config.sit.hand.requirements.description_4": "None = can sit whenever", - "config.sit.hand.restrictions": "Restrictions", - "config.sit.hand.restrictions.description": "Toggle preset hand restrictions for sitting.", - "config.sit.hand.restrictions.blocks": "Blocks", - "config.sit.hand.restrictions.food": "Food", - "config.sit.hand.restrictions.usable": "Usable", - "config.sit.hand.restrictions.usable.description": "eg. bows, tridents, shield", - "config.sit.hand.whitelist": "Whitelist", - "config.sit.hand.whitelist.description": "Make a custom whitelist for items that the player can use to sit with.", - "config.sit.hand.blacklist": "Blacklist", - "config.sit.hand.blacklist.description": "Make a custom blacklist for items that the player can't use to sit with.", - "config.sit.hand.list.description": "Example: ", - "config.sit.hand.list.description_2": "\"minecraft:torch\"", - "key.sit.command.reloaded": "Reloaded the config!", - "key.sit.command.purged": "Purged all active chair entities!" + "config.sit.hand.requirement": "Requirements", + "config.sit.hand.requirement.empty": "Empty", + "config.sit.hand.requirement.restrictive": "Restrictive", + "config.sit.hand.requirement.none": "None", + "config.sit.hand.requirement.description": "Hand requirements for sitting.", + "config.sit.hand.requirement.description.2": "%s: hand has to be empty", + "config.sit.hand.requirement.description.3": "%s: set restrictions for hand state", + "config.sit.hand.requirement.description.4": "%s: can sit whenever", + "config.sit.hand.requirement.options": "Options: %s", + "config.sit.hand.restriction": "Restrictions", + "config.sit.hand.restriction.description": "Toggle custom hand restrictions for sitting.", + "config.sit.hand.restriction.blocks": "Blocks", + "config.sit.hand.restriction.food": "Food", + "config.sit.hand.restriction.usable": "Usable", + "config.sit.hand.restriction.usable.description": "eg. bows, tridents, shield", + "config.sit.hand.restriction.list": "Item Restrictions", + "config.sit.hand.restriction.list.description": "Allow or block certain items when the hand requirement is restrictive.", + "config.sit.hand.restriction.whitelist": "Whitelist", + "config.sit.hand.restriction.blacklist": "Blacklist", + "config.sit.example": "Example: %s", + "key.sit.msg.sit_toggle.on": "Enabled Sitting!", + "key.sit.msg.sit_toggle.off": "Disabled Sitting!", + "key.sit.msg.reloaded": "Reloaded the config!", + "key.sit.msg.purged": "Purged all active chair entities!" } \ No newline at end of file From f646bf13e36e400d73d02d0b8d27a244cf0bea50 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Fri, 9 Feb 2024 18:03:46 -0600 Subject: [PATCH 02/17] better config --- src/main/java/one/oth3r/sit/config.java | 41 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/src/main/java/one/oth3r/sit/config.java b/src/main/java/one/oth3r/sit/config.java index 7e52df9..261a56c 100644 --- a/src/main/java/one/oth3r/sit/config.java +++ b/src/main/java/one/oth3r/sit/config.java @@ -24,7 +24,7 @@ public class config { public static boolean fullBlocksOn = defaults.fullBlocksOn; public static boolean customOn = defaults.customOn; public static List customBlocks = defaults.customBlocks; - enum HandRequirement { + public enum HandRequirement { empty, restrictive, none; @@ -149,32 +149,43 @@ public class config { file.write("\ncustom=" + customOn); file.write("\n# "+Sit.lang("config.sit."+ "general.sittable_blocks.description") - .append("\n# ").append(lang("general.sittable_blocks.description_2", - "\"minecraft:campfire|0.255|1|lit=false\"")) - .append("\n# ").append(lang("general.sittable_blocks.description_4")) - .append("\n# ").append(lang("general.sittable_blocks.description_5")) - .append("\n# ").append(lang("general.sittable_blocks.description_6")) - .append("\n# ").append(lang("general.sittable_blocks.description_7")) - .append("\n# ").append(lang("general.sittable_blocks.description_8")).getString()); + .append("\n# ").append(lang("example",Utl.Assets.CUSTOM_BLOCKS)) + .append("\n# ").append(lang("general.sittable_blocks.description.2")) + .append("\n# ").append(lang("general.sittable_blocks.description.3")) + .append("\n# ").append(lang("general.sittable_blocks.description.4")) + .append("\n# ").append(lang("general.sittable_blocks.description.5")) + .append("\n# ").append(lang("general.sittable_blocks.description.6")).getString()); file.write("\ncustom-blocks="+gson.toJson(customBlocks)); file.write("\n\n# "+lang("hand")); file.write("\n# "+Sit.lang("config.sit."+ - "hand.requirements.description") - .append("\n# ").append(lang("hand.requirements.description_2")) - .append("\n# ").append(lang("hand.requirements.description_3")) - .append("\n# ").append(lang("hand.requirements.description_4")).getString()); + "hand.requirement.description") + .append("\n# ").append(lang("hand.requirement.description.2",HandRequirement.empty)) + .append("\n# ").append(lang("hand.requirement.description.3",HandRequirement.restrictive)) + .append("\n# ").append(lang("hand.requirement.description.4",HandRequirement.none)).getString()); + file.write("\n# "+lang("hand.requirement.options",Utl.Assets.REQUIREMENT_OPTIONS)); file.write("\nhand.main.requirement=" + mainReq); + file.write("\n#"); + file.write("\nhand.off.requirement=" + offReq); + + file.write("\n\n# "+lang("hand.restriction")); + file.write("\n# "+lang("hand.restriction.description")); file.write("\nhand.main.block=" + mainBlock); file.write("\nhand.main.food=" + mainFood); file.write("\nhand.main.usable=" + mainUsable); - file.write("\nhand.main.whitelist="+gson.toJson(mainWhitelist)); - file.write("\nhand.main.blacklist="+gson.toJson(mainBlacklist)); - file.write("\nhand.off.requirement=" + offReq); + file.write("\n#"); file.write("\nhand.off.block=" + offBlock); file.write("\nhand.off.food=" + offFood); file.write("\nhand.off.usable=" + offUsable); + + file.write("\n\n# "+lang("hand.restriction.list")); + file.write("\n# "+lang("hand.restriction.list.description")); + file.write("\n# "+lang("example",Utl.Assets.LIST)); + file.write("\nhand.main.whitelist="+gson.toJson(mainWhitelist)); + file.write("\nhand.main.blacklist="+gson.toJson(mainBlacklist)); + file.write("\n#"); file.write("\nhand.off.whitelist="+gson.toJson(offWhitelist)); file.write("\nhand.off.blacklist="+gson.toJson(offBlacklist)); + // send packets to update the settings on the server if (SitClient.inGame) SitClient.sendPackets(); } catch (Exception e) { From d5504310f0f471f40a78353b1c29db70ff5bde89 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Fri, 9 Feb 2024 18:04:10 -0600 Subject: [PATCH 03/17] better way of choosing settings & new final config strings --- src/main/java/one/oth3r/sit/Events.java | 22 ++++---- src/main/java/one/oth3r/sit/Utl.java | 75 ++++++++++++++++--------- 2 files changed, 61 insertions(+), 36 deletions(-) diff --git a/src/main/java/one/oth3r/sit/Events.java b/src/main/java/one/oth3r/sit/Events.java index 9fd9ef8..9ed4bc3 100644 --- a/src/main/java/one/oth3r/sit/Events.java +++ b/src/main/java/one/oth3r/sit/Events.java @@ -24,6 +24,8 @@ import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import one.oth3r.sit.Utl.HandType; +import one.oth3r.sit.Utl.PlayerSettings; +import one.oth3r.sit.Utl.PlayerSettings.Setting; import java.util.*; @@ -46,17 +48,17 @@ public class Events { for (HandType type:HandType.values()) { ItemStack targetStack = itemMap.get(type); // if req is empty and the item isn't empty, false - if (Utl.getReq(player,type).equals(config.HandRequirement.empty) && !targetStack.isEmpty()) return false; + if (PlayerSettings.getRequirement(player,type).equals(config.HandRequirement.empty) && !targetStack.isEmpty()) return false; // if req is restrictive - if (Utl.getReq(player,type).equals(config.HandRequirement.restrictive)) { + if (PlayerSettings.getRequirement(player,type).equals(config.HandRequirement.restrictive)) { // if item is in blacklist, false - if (checkList(Utl.getList(player,type,"blacklist"),targetStack)) return false; + if (checkList(PlayerSettings.getList(player,type,Setting.blacklist),targetStack)) return false; // if item is NOT in whitelist - if (!checkList(Utl.getList(player,type,"whitelist"),targetStack)) { + if (!checkList(PlayerSettings.getList(player,type,Setting.whitelist),targetStack)) { // if block is restricted and items is block, false, ect - if (Utl.getBool(player,type,"block") && (targetStack.getItem() instanceof BlockItem)) return false; - if (Utl.getBool(player,type,"food") && food.contains(targetStack.getUseAction())) return false; - if (Utl.getBool(player,type,"usable") && !notUsable.contains(targetStack.getUseAction())) return false; + if (PlayerSettings.getToggle(player,type,Setting.block) && (targetStack.getItem() instanceof BlockItem)) return false; + if (PlayerSettings.getToggle(player,type,Setting.food) && food.contains(targetStack.getUseAction())) return false; + if (PlayerSettings.getToggle(player,type,Setting.usable) && !notUsable.contains(targetStack.getUseAction())) return false; } } } @@ -105,7 +107,7 @@ public class Events { if (block instanceof CarpetBlock && config.carpetsOn) return true; if (blockState.isFullCube(world,pos.add(0,1,0)) && config.fullBlocksOn) return true; // custom checker - if (config.customOn && config.customBlocks.size() != 0) { + if (config.customOn && !config.customBlocks.isEmpty()) { for (HashMap map:getCustomBlocks().values()) { String blockID = Registries.BLOCK.getId(block).toString(); if (map.get("block").equals(blockID)) { @@ -149,7 +151,7 @@ public class Events { entity.updatePositionAndAngles(pos.getX() + 0.5, pos.getY()+.78, pos.getZ() + 0.5, 0, 0); hitBoxY = 2; } - if (config.customOn && config.customBlocks.size() != 0) { + if (config.customOn && !config.customBlocks.isEmpty()) { for (HashMap map:getCustomBlocks().values()) { String blockID = Registries.BLOCK.getId(block).toString(); if (map.get("block").equals(blockID)) { @@ -174,7 +176,7 @@ public class Events { ServerPlayerEntity player = handler.player; checkPlayers.put(player,2); // put server settings in the player settings - Sit.playerSettings.put(player,Utl.getHandSettings()); + Sit.playerSettings.put(player, PlayerSettings.getHandSettings()); }); ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> { ServerPlayerEntity player = handler.player; diff --git a/src/main/java/one/oth3r/sit/Utl.java b/src/main/java/one/oth3r/sit/Utl.java index 3045ec1..c7e5056 100644 --- a/src/main/java/one/oth3r/sit/Utl.java +++ b/src/main/java/one/oth3r/sit/Utl.java @@ -11,35 +11,58 @@ import java.util.HashMap; import java.util.List; public class Utl { - enum HandType { + public enum HandType { main, off } - public static HashMap getHandSettings() { - Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - HashMap settings = new HashMap<>(); - settings.put("hand.main.requirement",String.valueOf(config.mainReq)); - settings.put("hand.main.block",String.valueOf(config.mainBlock)); - settings.put("hand.main.food",String.valueOf(config.mainFood)); - settings.put("hand.main.usable",String.valueOf(config.mainUsable)); - settings.put("hand.main.whitelist",gson.toJson(config.mainWhitelist)); - settings.put("hand.main.blacklist",gson.toJson(config.mainBlacklist)); - settings.put("hand.off.requirement",String.valueOf(config.offReq)); - settings.put("hand.off.block",String.valueOf(config.offBlock)); - settings.put("hand.off.food",String.valueOf(config.offFood)); - settings.put("hand.off.usable",String.valueOf(config.offUsable)); - settings.put("hand.off.whitelist",gson.toJson(config.offWhitelist)); - settings.put("hand.off.blacklist",gson.toJson(config.offBlacklist)); - return settings; + public static class PlayerSettings { + public enum Setting { + requirement, + block, + food, + usable, + whitelist, + blacklist + } + /** + * Gets a HashMap of all player configurable settings. + * @return a map with player hand settings. + */ + public static HashMap getHandSettings() { + Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + HashMap settings = new HashMap<>(); + // main hand + settings.put("hand.main."+Setting.requirement,String.valueOf(config.mainReq)); + settings.put("hand.main."+Setting.block,String.valueOf(config.mainBlock)); + settings.put("hand.main."+Setting.food,String.valueOf(config.mainFood)); + settings.put("hand.main."+Setting.usable,String.valueOf(config.mainUsable)); + settings.put("hand.main."+Setting.whitelist,gson.toJson(config.mainWhitelist)); + settings.put("hand.main."+Setting.blacklist,gson.toJson(config.mainBlacklist)); + // copy but offhand + settings.put("hand.off."+Setting.requirement,String.valueOf(config.offReq)); + settings.put("hand.off."+Setting.block,String.valueOf(config.offBlock)); + settings.put("hand.off."+Setting.food,String.valueOf(config.offFood)); + settings.put("hand.off."+Setting.usable,String.valueOf(config.offUsable)); + settings.put("hand.off."+Setting.whitelist,gson.toJson(config.offWhitelist)); + settings.put("hand.off."+Setting.blacklist,gson.toJson(config.offBlacklist)); + return settings; + } + // returns specific items from the player config + public static config.HandRequirement getRequirement(ServerPlayerEntity player, HandType type) { + return config.HandRequirement.get(Sit.playerSettings.get(player).get("hand."+type+".requirement")); + } + public static List getList(ServerPlayerEntity player, HandType type, Setting setting) { + Type listType = new TypeToken>() {}.getType(); + return new Gson().fromJson(Sit.playerSettings.get(player).get("hand."+type+"."+setting),listType); + } + public static boolean getToggle(ServerPlayerEntity player, HandType type, Setting setting) { + return Boolean.parseBoolean(Sit.playerSettings.get(player).get("hand."+type+"."+setting)); + } } - public static config.HandRequirement getReq(ServerPlayerEntity player, HandType type) { - return config.HandRequirement.get(Sit.playerSettings.get(player).get("hand."+type+".requirement")); - } - public static List getList(ServerPlayerEntity player, HandType type, String setting) { - Type listType = new TypeToken>() {}.getType(); - return new Gson().fromJson(Sit.playerSettings.get(player).get("hand."+type+"."+setting),listType); - } - public static boolean getBool(ServerPlayerEntity player, HandType type, String setting) { - return Boolean.parseBoolean(Sit.playerSettings.get(player).get("hand."+type+"."+setting)); + public static class Assets { + public static final String CUSTOM_BLOCKS = "\"minecraft:campfire|0.255|1|lit=false\""; + public static final String REQUIREMENT_OPTIONS = String.format("%s, %s, %s", + config.HandRequirement.empty,config.HandRequirement.restrictive,config.HandRequirement.none); + public static final String LIST = "\"minecraft:torch\""; } } From 47087db49e804460ce2a251665993c7e88d4fd6a Mon Sep 17 00:00:00 2001 From: Oth3r Date: Fri, 9 Feb 2024 18:04:29 -0600 Subject: [PATCH 04/17] new config locations --- src/main/java/one/oth3r/sit/ModMenu.java | 94 ++++++++++----------- src/main/java/one/oth3r/sit/SitCommand.java | 6 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/main/java/one/oth3r/sit/ModMenu.java b/src/main/java/one/oth3r/sit/ModMenu.java index 7283b17..ca679d5 100644 --- a/src/main/java/one/oth3r/sit/ModMenu.java +++ b/src/main/java/one/oth3r/sit/ModMenu.java @@ -71,7 +71,7 @@ public class ModMenu implements ModMenuApi { .name(lang("general.sittable_blocks")) .description(OptionDescription.of( lang("general.sittable_blocks.description") - .append("\n\n").append(lang("general.sittable_blocks.description_2", + .append("\n\n").append(lang("example", Text.literal("\"") .append(Text.literal("minecraft:campfire").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) .append("|") @@ -80,12 +80,12 @@ public class ModMenu implements ModMenuApi { .append(Text.literal("1").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) .append("|") .append(Text.literal("lit=false").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD)))) - .append("\"").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))) - .append("\n\n").append(lang("general.sittable_blocks.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) - .append("\n").append(lang("general.sittable_blocks.description_5").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))) - .append("\n").append(lang("general.sittable_blocks.description_6").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) - .append("\n").append(lang("general.sittable_blocks.description_7").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD)))) - .append("\n\n").append(lang("general.sittable_blocks.description_8").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.YELLOW)))))) + .append("\"").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GRAY))))) + .append("\n\n").append(lang("general.sittable_blocks.description.2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) + .append("\n").append(lang("general.sittable_blocks.description.3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))) + .append("\n").append(lang("general.sittable_blocks.description.4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) + .append("\n").append(lang("general.sittable_blocks.description.5").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD)))) + .append("\n\n").append(lang("general.sittable_blocks.description.6").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.YELLOW)))))) .binding(config.defaults.customBlocks, () -> config.customBlocks, n -> config.customBlocks = n) .controller(StringControllerBuilder::create) .initial("") @@ -95,49 +95,49 @@ public class ModMenu implements ModMenuApi { .name(lang("category.main_hand")) .tooltip(lang("category.main_hand.tooltip")) .option(Option.createBuilder() - .name(lang("hand.requirements")) - .description(OptionDescription.of(lang("hand.requirements.description") - .append("\n\n").append(lang("hand.requirements.description_2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) - .append("\n").append(lang("hand.requirements.description_3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) - .append("\n").append(lang("hand.requirements.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) + .name(lang("hand.requirement")) + .description(OptionDescription.of(lang("hand.requirement.description") + .append("\n\n").append(lang("hand.requirement.description.2",lang("hand.requirement.empty")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) + .append("\n").append(lang("hand.requirement.description.3",lang("hand.requirement.restrictive")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) + .append("\n").append(lang("hand.requirement.description.4",lang("hand.requirement.none")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) .binding(config.defaults.mainReq, () -> config.mainReq, n -> config.mainReq = n) .controller(opt -> EnumControllerBuilder.create(opt).enumClass(config.HandRequirement.class) - .formatValue(v -> Text.translatable("config.sit."+v.name().toLowerCase()))) + .formatValue(v -> lang("hand.requirement."+v.toString()))) .build()) .group(OptionGroup.createBuilder() - .name(lang("hand.restrictions")) - .description(OptionDescription.of(lang("hand.restrictions.description"))) + .name(lang("hand.restriction")) + .description(OptionDescription.of(lang("hand.restriction.description"))) .option(Option.createBuilder() - .name(lang("hand.restrictions.blocks")) + .name(lang("hand.restriction.blocks")) .binding(config.defaults.mainBlock,()-> config.mainBlock,n -> config.mainBlock = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() - .name(lang("hand.restrictions.food")) + .name(lang("hand.restriction.food")) .binding(config.defaults.mainFood,()-> config.mainFood,n -> config.mainFood = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() - .name(lang("hand.restrictions.usable")) - .description(OptionDescription.of(lang("hand.restrictions.usable.description"))) + .name(lang("hand.restriction.usable")) + .description(OptionDescription.of(lang("hand.restriction.usable.description"))) .binding(config.defaults.mainUsable,()-> config.mainUsable,n -> config.mainUsable = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .build()) .group(ListOption.createBuilder() - .name(lang("hand.whitelist")) - .description(OptionDescription.of(lang("hand.whitelist.description") - .append("\n\n").append(lang("hand.list.description")) - .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) + .name(lang("hand.restriction.whitelist")) + .description(OptionDescription.of(lang("hand.restriction.list.description") + .append("\n\n").append(lang("example", + Text.empty().append(Utl.Assets.LIST).styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))) .binding(config.defaults.mainWhitelist, () -> config.mainWhitelist, n -> config.mainWhitelist = n) .controller(StringControllerBuilder::create) .initial("") .build()) .group(ListOption.createBuilder() - .name(lang("hand.blacklist")) - .description(OptionDescription.of(lang("hand.blacklist.description") - .append("\n\n").append(lang("hand.list.description")) - .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) + .name(lang("hand.restriction.blacklist")) + .description(OptionDescription.of(lang("hand.restriction.list.description") + .append("\n\n").append(lang("example", + Text.empty().append(Utl.Assets.LIST).styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))) .binding(config.defaults.mainBlacklist, () -> config.mainBlacklist, n -> config.mainBlacklist = n) .controller(StringControllerBuilder::create) .initial("") @@ -147,49 +147,49 @@ public class ModMenu implements ModMenuApi { .name(lang("category.off_hand")) .tooltip(lang("category.off_hand.tooltip")) .option(Option.createBuilder() - .name(lang("hand.requirements")) - .description(OptionDescription.of(lang("hand.requirements.description") - .append("\n\n").append(lang("hand.requirements.description_2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) - .append("\n").append(lang("hand.requirements.description_3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) - .append("\n").append(lang("hand.requirements.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) + .name(lang("hand.requirement")) + .description(OptionDescription.of(lang("hand.requirement.description") + .append("\n\n").append(lang("hand.requirement.description.2",lang("hand.requirement.empty")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) + .append("\n").append(lang("hand.requirement.description.3",lang("hand.requirement.restrictive")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) + .append("\n").append(lang("hand.requirement.description.4",lang("hand.requirement.none")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) .binding(config.defaults.offReq, () -> config.offReq, n -> config.offReq = n) .controller(opt -> EnumControllerBuilder.create(opt).enumClass(config.HandRequirement.class) - .formatValue(v -> Text.translatable("config.sit."+v.name().toLowerCase()))) + .formatValue(v -> lang("hand.requirement."+v.toString()))) .build()) .group(OptionGroup.createBuilder() - .name(lang("hand.restrictions")) - .description(OptionDescription.of(lang("hand.restrictions.description"))) + .name(lang("hand.restriction")) + .description(OptionDescription.of(lang("hand.restriction.description"))) .option(Option.createBuilder() - .name(lang("hand.restrictions.blocks")) + .name(lang("hand.restriction.blocks")) .binding(config.defaults.offBlock,()-> config.offBlock,n -> config.offBlock = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() - .name(lang("hand.restrictions.food")) + .name(lang("hand.restriction.food")) .binding(config.defaults.offFood,()-> config.offFood,n -> config.offFood = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() - .name(lang("hand.restrictions.usable")) - .description(OptionDescription.of(lang("hand.restrictions.usable.description"))) + .name(lang("hand.restriction.usable")) + .description(OptionDescription.of(lang("hand.restriction.usable.description"))) .binding(config.defaults.offUsable,()-> config.offUsable,n -> config.offUsable = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .build()) .group(ListOption.createBuilder() - .name(lang("hand.whitelist")) - .description(OptionDescription.of(lang("hand.whitelist.description") - .append("\n\n").append(lang("hand.list.description")) - .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) + .name(lang("hand.restriction.whitelist")) + .description(OptionDescription.of(lang("hand.restriction.list.description") + .append("\n\n").append(lang("example", + Text.empty().append(Utl.Assets.LIST).styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))) .binding(config.defaults.offWhitelist, () -> config.offWhitelist, n -> config.offWhitelist = n) .controller(StringControllerBuilder::create) .initial("") .build()) .group(ListOption.createBuilder() - .name(lang("hand.blacklist")) - .description(OptionDescription.of(lang("hand.blacklist.description") - .append("\n\n").append(lang("hand.list.description")) - .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) + .name(lang("hand.restriction.blacklist")) + .description(OptionDescription.of(lang("hand.restriction.list.description") + .append("\n\n").append(lang("example", + Text.empty().append(Utl.Assets.LIST).styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))) .binding(config.defaults.offBlacklist, () -> config.offBlacklist, n -> config.offBlacklist = n) .controller(StringControllerBuilder::create) .initial("") diff --git a/src/main/java/one/oth3r/sit/SitCommand.java b/src/main/java/one/oth3r/sit/SitCommand.java index 0fee18c..f85822e 100644 --- a/src/main/java/one/oth3r/sit/SitCommand.java +++ b/src/main/java/one/oth3r/sit/SitCommand.java @@ -49,7 +49,7 @@ public class SitCommand { if (player == null) { if (args[0].equalsIgnoreCase("reload")) { config.load(); - Sit.LOGGER.info(Sit.lang("key.sit.command.reloaded").getString()); + Sit.LOGGER.info(Sit.lang("key.sit.msg.reloaded").getString()); } return 1; } @@ -81,9 +81,9 @@ public class SitCommand { ParseResults parse = Sit.commandManager.getDispatcher().parse(cmd, player.getCommandSource()); Sit.commandManager.getDispatcher().execute(parse); - player.sendMessage(Sit.lang("key.sit.command.purged")); + player.sendMessage(Sit.lang("key.sit.msg.purged")); } catch (CommandSyntaxException e) { - player.sendMessage(Sit.lang("key.sit.command.purged")); + player.sendMessage(Sit.lang("key.sit.msg.purged")); e.printStackTrace(); } } From 6a2afaf88c0fafee4adea5033893be122a3ab197 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Fri, 9 Feb 2024 18:04:40 -0600 Subject: [PATCH 05/17] updated Utl locations --- src/main/java/one/oth3r/sit/SitClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/one/oth3r/sit/SitClient.java b/src/main/java/one/oth3r/sit/SitClient.java index 2a1d2e1..621c788 100644 --- a/src/main/java/one/oth3r/sit/SitClient.java +++ b/src/main/java/one/oth3r/sit/SitClient.java @@ -20,6 +20,6 @@ public class SitClient implements ClientModInitializer { } public static void sendPackets() { Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - new PacketBuilder(gson.toJson(Utl.getHandSettings())).send(); + new PacketBuilder(gson.toJson(Utl.PlayerSettings.getHandSettings())).send(); } } From d778c7e3492b2c0d4e0b96ea4d29227841a96684 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Fri, 9 Feb 2024 18:04:49 -0600 Subject: [PATCH 06/17] fixed YACL versions --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0d0acaf..f19a333 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,4 +16,4 @@ archives_base_name=sit! # Dependencies fabric_version=0.91.1+1.20.4 modmenu_version=9.0.0 -yacl_version=3.3.1+1.20.4 +yacl_version=3.3.2+1.20.4 From bf093a51b565e62b00e632779b798bbe32a789f3 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Sat, 24 Feb 2024 23:33:44 -0600 Subject: [PATCH 07/17] 2nd lang makeover --- src/main/resources/assets/sit/lang/en_us.json | 103 +++++++++--------- 1 file changed, 53 insertions(+), 50 deletions(-) diff --git a/src/main/resources/assets/sit/lang/en_us.json b/src/main/resources/assets/sit/lang/en_us.json index 8285920..703f71c 100644 --- a/src/main/resources/assets/sit/lang/en_us.json +++ b/src/main/resources/assets/sit/lang/en_us.json @@ -1,52 +1,55 @@ { - "config.sit.category.general": "General", - "config.sit.category.general.tooltip": "General settings", - "config.sit.category.main_hand": "Main Hand", - "config.sit.category.main_hand.tooltip": "Main hand settings", - "config.sit.category.off_hand": "Off Hand", - "config.sit.category.off_hand.tooltip": "Off hand settings", - "config.sit.general.keep_active": "Keep Active", - "config.sit.general.keep_active.description": "Keeps the entities active even when logging off / shutting down", - "config.sit.general.sittable": "Sittable Blocks", - "config.sit.general.sittable.description": "Toggle the ability to sit on different block types.", - "config.sit.general.sit_while_seated": "Sit While Seated", - "config.sit.general.sit_while_seated.description": "Toggle the ability to sit on other blocks while already being seated on one.", - "config.sit.general.sittable.stairs": "Stairs", - "config.sit.general.sittable.slabs": "Slabs", - "config.sit.general.sittable.carpets": "Carpets", - "config.sit.general.sittable.full_blocks": "Full Blocks", - "config.sit.general.sittable.custom": "Custom", - "config.sit.general.sittable.custom.description": "Enables adding custom blocks to sit on.", - "config.sit.general.sittable_blocks": "Custom Sittable Blocks", - "config.sit.general.sittable_blocks.description": "Add custom sittable blocks!", - "config.sit.general.sittable_blocks.description.2": "First entry: custom block id", - "config.sit.general.sittable_blocks.description.3": "Second entry: sitting height (number from 0-1 eg 0.52)", - "config.sit.general.sittable_blocks.description.4": "Third entry: hitbox size (where the player spawns above the entity when dismounting)", - "config.sit.general.sittable_blocks.description.5": "Fourth entry (optional): required blockstate to sit (Put a \"!\" to exclude blockstates)", - "config.sit.general.sittable_blocks.description.6": "Separate different entries with \"|\"!", - "config.sit.hand": "Hand Settings", - "config.sit.hand.requirement": "Requirements", - "config.sit.hand.requirement.empty": "Empty", - "config.sit.hand.requirement.restrictive": "Restrictive", - "config.sit.hand.requirement.none": "None", - "config.sit.hand.requirement.description": "Hand requirements for sitting.", - "config.sit.hand.requirement.description.2": "%s: hand has to be empty", - "config.sit.hand.requirement.description.3": "%s: set restrictions for hand state", - "config.sit.hand.requirement.description.4": "%s: can sit whenever", - "config.sit.hand.requirement.options": "Options: %s", - "config.sit.hand.restriction": "Restrictions", - "config.sit.hand.restriction.description": "Toggle custom hand restrictions for sitting.", - "config.sit.hand.restriction.blocks": "Blocks", - "config.sit.hand.restriction.food": "Food", - "config.sit.hand.restriction.usable": "Usable", - "config.sit.hand.restriction.usable.description": "eg. bows, tridents, shield", - "config.sit.hand.restriction.list": "Item Restrictions", - "config.sit.hand.restriction.list.description": "Allow or block certain items when the hand requirement is restrictive.", - "config.sit.hand.restriction.whitelist": "Whitelist", - "config.sit.hand.restriction.blacklist": "Blacklist", - "config.sit.example": "Example: %s", - "key.sit.msg.sit_toggle.on": "Enabled Sitting!", - "key.sit.msg.sit_toggle.off": "Disabled Sitting!", - "key.sit.msg.reloaded": "Reloaded the config!", - "key.sit.msg.purged": "Purged all active chair entities!" + "category.sit": "Sit!", + "config.category.general": "General", + "config.category.main_hand": "Main Hand", + "config.category.off_hand": "Off Hand", + + "config.general.keep_active": "Keep Active", + "config.general.keep_active.description": "Keeps the entities active even when logging off / shutting down", + "config.general.sittable": "Sittable Blocks", + "config.general.sittable.description": "Toggle the ability to sit on different block types.", + "config.general.sit_while_seated": "Sit While Seated", + "config.general.sit_while_seated.description": "Toggle the ability to sit on other blocks while already being seated on one.", + "config.general.sittable.stairs": "Stairs", + "config.general.sittable.slabs": "Slabs", + "config.general.sittable.carpets": "Carpets", + "config.general.sittable.full_blocks": "Full Blocks", + "config.general.sittable.custom": "Custom", + "config.general.sittable.custom.description": "Enables adding custom blocks to sit on.", + "config.general.sittable_blocks": "Custom Sittable Blocks", + "config.general.sittable_blocks.description": "Add custom sittable blocks!", + "config.general.sittable_blocks.description.2": "First entry: custom block id", + "config.general.sittable_blocks.description.3": "Second entry: sitting height (number from 0-1 eg 0.52)", + "config.general.sittable_blocks.description.4": "Third entry: hitbox size (where the player spawns above the entity when dismounting)", + "config.general.sittable_blocks.description.5": "Fourth entry (optional): required blockstate to sit (Put a \"!\" to exclude blockstates)", + "config.general.sittable_blocks.description.6": "Separate different entries with \"|\"!", + "config.hand": "Hand Settings", + "config.hand.requirement": "Requirements", + "config.hand.requirement.empty": "Empty", + "config.hand.requirement.restrictive": "Restrictive", + "config.hand.requirement.none": "None", + "config.hand.requirement.description": "Hand requirements for sitting.", + "config.hand.requirement.description.2": "%s: hand has to be empty", + "config.hand.requirement.description.3": "%s: set restrictions for hand state", + "config.hand.requirement.description.4": "%s: can sit whenever", + "config.hand.requirement.options": "Options: %s", + "config.hand.restriction": "Restrictions", + "config.hand.restriction.description": "Toggle custom hand restrictions for sitting.", + "config.hand.restriction.blocks": "Blocks", + "config.hand.restriction.food": "Food", + "config.hand.restriction.usable": "Usable", + "config.hand.restriction.usable.description": "eg. bows, tridents, shield", + "config.hand.restriction.list": "Item Restrictions", + "config.hand.restriction.list.description": "Allow or block certain items when the hand requirement is restrictive.", + "config.hand.restriction.whitelist": "Whitelist", + "config.hand.restriction.blacklist": "Blacklist", + "config.example": "Example: %s", + + "msg.sit_toggle.on": "Enabled Sitting!", + "msg.sit_toggle.off": "Disabled Sitting!", + "msg.reloaded": "Reloaded the config!", + "msg.purged": "Purged all active chair entities!", + + "key.toggle": "Toggle Sitting", + "key.sit": "Sit" } \ No newline at end of file From 0bbb46b4f49dc0697a16082b40efc6f1beccc7d6 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Sat, 24 Feb 2024 23:34:20 -0600 Subject: [PATCH 08/17] lang move to Utl, make all references to language file use Utl.lang() --- src/main/java/one/oth3r/sit/ModMenu.java | 8 +------- src/main/java/one/oth3r/sit/Sit.java | 11 ----------- src/main/java/one/oth3r/sit/SitCommand.java | 8 ++++---- src/main/java/one/oth3r/sit/Utl.java | 6 ++++++ src/main/java/one/oth3r/sit/config.java | 6 +++--- 5 files changed, 14 insertions(+), 25 deletions(-) diff --git a/src/main/java/one/oth3r/sit/ModMenu.java b/src/main/java/one/oth3r/sit/ModMenu.java index ca679d5..c61cd40 100644 --- a/src/main/java/one/oth3r/sit/ModMenu.java +++ b/src/main/java/one/oth3r/sit/ModMenu.java @@ -12,11 +12,8 @@ import net.minecraft.text.TextColor; import net.minecraft.util.Formatting; public class ModMenu implements ModMenuApi { - private static MutableText lang(String key) { - return Text.translatable("config.sit."+key); - } private static MutableText lang(String key, Object... args) { - return Text.translatable("config.sit."+key,args); + return Utl.lang("config."+key,args); } @Override public ConfigScreenFactory getModConfigScreenFactory() { @@ -24,7 +21,6 @@ public class ModMenu implements ModMenuApi { .title(Text.of("Sit!")) .category(ConfigCategory.createBuilder() .name(lang("category.general")) - .tooltip(lang("category.general.tooltip")) .option(Option.createBuilder() .name(lang("general.keep_active")) .description(OptionDescription.of(lang("general.keep_active.description"))) @@ -93,7 +89,6 @@ public class ModMenu implements ModMenuApi { .build()) .category(ConfigCategory.createBuilder() .name(lang("category.main_hand")) - .tooltip(lang("category.main_hand.tooltip")) .option(Option.createBuilder() .name(lang("hand.requirement")) .description(OptionDescription.of(lang("hand.requirement.description") @@ -145,7 +140,6 @@ public class ModMenu implements ModMenuApi { .build()) .category(ConfigCategory.createBuilder() .name(lang("category.off_hand")) - .tooltip(lang("category.off_hand.tooltip")) .option(Option.createBuilder() .name(lang("hand.requirement")) .description(OptionDescription.of(lang("hand.requirement.description") diff --git a/src/main/java/one/oth3r/sit/Sit.java b/src/main/java/one/oth3r/sit/Sit.java index 08abcc9..bb837c5 100644 --- a/src/main/java/one/oth3r/sit/Sit.java +++ b/src/main/java/one/oth3r/sit/Sit.java @@ -3,23 +3,16 @@ package one.oth3r.sit; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; -import io.netty.buffer.ByteBuf; -import io.netty.util.ReferenceCountUtil; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.network.PacketByteBuf; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Type; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; import java.util.HashMap; public class Sit implements ModInitializer { @@ -50,8 +43,4 @@ public class Sit implements ModInitializer { }); }); } - public static MutableText lang(String key, Object... args) { - if (isClient) return Text.translatable(key, args); - else return LangReader.of(key, args).getTxT(); - } } \ No newline at end of file diff --git a/src/main/java/one/oth3r/sit/SitCommand.java b/src/main/java/one/oth3r/sit/SitCommand.java index f85822e..b740d5d 100644 --- a/src/main/java/one/oth3r/sit/SitCommand.java +++ b/src/main/java/one/oth3r/sit/SitCommand.java @@ -49,7 +49,7 @@ public class SitCommand { if (player == null) { if (args[0].equalsIgnoreCase("reload")) { config.load(); - Sit.LOGGER.info(Sit.lang("key.sit.msg.reloaded").getString()); + Sit.LOGGER.info(Utl.lang("msg.reloaded").getString()); } return 1; } @@ -73,7 +73,7 @@ public class SitCommand { } if (args[0].equalsIgnoreCase("reload")) { config.load(); - player.sendMessage(Sit.lang("key.sit.command.reloaded").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))); + player.sendMessage(Utl.lang("msg.reloaded").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))); } if (args[0].equalsIgnoreCase("purgeChairEntities")) { String cmd = "kill @e[type=minecraft:text_display,name=\""+Sit.ENTITY_NAME+"\"]"; @@ -81,9 +81,9 @@ public class SitCommand { ParseResults parse = Sit.commandManager.getDispatcher().parse(cmd, player.getCommandSource()); Sit.commandManager.getDispatcher().execute(parse); - player.sendMessage(Sit.lang("key.sit.msg.purged")); + player.sendMessage(Utl.lang("msg.purged")); } catch (CommandSyntaxException e) { - player.sendMessage(Sit.lang("key.sit.msg.purged")); + player.sendMessage(Utl.lang("msg.purged")); e.printStackTrace(); } } diff --git a/src/main/java/one/oth3r/sit/Utl.java b/src/main/java/one/oth3r/sit/Utl.java index c7e5056..b1bd1fd 100644 --- a/src/main/java/one/oth3r/sit/Utl.java +++ b/src/main/java/one/oth3r/sit/Utl.java @@ -4,6 +4,8 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; import java.lang.reflect.Type; import java.util.ArrayList; @@ -11,6 +13,10 @@ import java.util.HashMap; import java.util.List; public class Utl { + public static MutableText lang(String key, Object... args) { + if (Sit.isClient) return Text.translatable(key, args); + else return LangReader.of(key, args).getTxT(); + } public enum HandType { main, off diff --git a/src/main/java/one/oth3r/sit/config.java b/src/main/java/one/oth3r/sit/config.java index 261a56c..cd1c88e 100644 --- a/src/main/java/one/oth3r/sit/config.java +++ b/src/main/java/one/oth3r/sit/config.java @@ -128,7 +128,7 @@ public class config { } } public static String lang(String key, Object... args) { - return LangReader.of("config.sit."+key, args).getTxT().getString(); + return Utl.lang("config."+key, args).getString(); } public static void save() { try (var file = Files.newBufferedWriter(configFile().toPath(), StandardCharsets.UTF_8)) { @@ -147,7 +147,7 @@ public class config { file.write("\ncarpets=" + carpetsOn); file.write("\nfull-blocks=" + fullBlocksOn); file.write("\ncustom=" + customOn); - file.write("\n# "+Sit.lang("config.sit."+ + file.write("\n# "+ Utl.lang("config."+ "general.sittable_blocks.description") .append("\n# ").append(lang("example",Utl.Assets.CUSTOM_BLOCKS)) .append("\n# ").append(lang("general.sittable_blocks.description.2")) @@ -157,7 +157,7 @@ public class config { .append("\n# ").append(lang("general.sittable_blocks.description.6")).getString()); file.write("\ncustom-blocks="+gson.toJson(customBlocks)); file.write("\n\n# "+lang("hand")); - file.write("\n# "+Sit.lang("config.sit."+ + file.write("\n# "+ Utl.lang("config."+ "hand.requirement.description") .append("\n# ").append(lang("hand.requirement.description.2",HandRequirement.empty)) .append("\n# ").append(lang("hand.requirement.description.3",HandRequirement.restrictive)) From 4a7624d595ed28efa1fdacaa45dda1242cc61ae6 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Sun, 10 Mar 2024 23:02:30 -0500 Subject: [PATCH 09/17] undo next version --- gradle.properties | 2 +- src/main/java/one/oth3r/sit/Events.java | 22 ++-- src/main/java/one/oth3r/sit/ModMenu.java | 102 +++++++++--------- src/main/java/one/oth3r/sit/Sit.java | 11 ++ src/main/java/one/oth3r/sit/SitClient.java | 2 +- src/main/java/one/oth3r/sit/SitCommand.java | 8 +- src/main/java/one/oth3r/sit/Utl.java | 81 +++++--------- src/main/java/one/oth3r/sit/config.java | 47 ++++---- src/main/resources/assets/sit/lang/en_us.json | 102 +++++++++--------- 9 files changed, 174 insertions(+), 203 deletions(-) diff --git a/gradle.properties b/gradle.properties index f19a333..0d0acaf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,4 +16,4 @@ archives_base_name=sit! # Dependencies fabric_version=0.91.1+1.20.4 modmenu_version=9.0.0 -yacl_version=3.3.2+1.20.4 +yacl_version=3.3.1+1.20.4 diff --git a/src/main/java/one/oth3r/sit/Events.java b/src/main/java/one/oth3r/sit/Events.java index 9ed4bc3..9fd9ef8 100644 --- a/src/main/java/one/oth3r/sit/Events.java +++ b/src/main/java/one/oth3r/sit/Events.java @@ -24,8 +24,6 @@ import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import one.oth3r.sit.Utl.HandType; -import one.oth3r.sit.Utl.PlayerSettings; -import one.oth3r.sit.Utl.PlayerSettings.Setting; import java.util.*; @@ -48,17 +46,17 @@ public class Events { for (HandType type:HandType.values()) { ItemStack targetStack = itemMap.get(type); // if req is empty and the item isn't empty, false - if (PlayerSettings.getRequirement(player,type).equals(config.HandRequirement.empty) && !targetStack.isEmpty()) return false; + if (Utl.getReq(player,type).equals(config.HandRequirement.empty) && !targetStack.isEmpty()) return false; // if req is restrictive - if (PlayerSettings.getRequirement(player,type).equals(config.HandRequirement.restrictive)) { + if (Utl.getReq(player,type).equals(config.HandRequirement.restrictive)) { // if item is in blacklist, false - if (checkList(PlayerSettings.getList(player,type,Setting.blacklist),targetStack)) return false; + if (checkList(Utl.getList(player,type,"blacklist"),targetStack)) return false; // if item is NOT in whitelist - if (!checkList(PlayerSettings.getList(player,type,Setting.whitelist),targetStack)) { + if (!checkList(Utl.getList(player,type,"whitelist"),targetStack)) { // if block is restricted and items is block, false, ect - if (PlayerSettings.getToggle(player,type,Setting.block) && (targetStack.getItem() instanceof BlockItem)) return false; - if (PlayerSettings.getToggle(player,type,Setting.food) && food.contains(targetStack.getUseAction())) return false; - if (PlayerSettings.getToggle(player,type,Setting.usable) && !notUsable.contains(targetStack.getUseAction())) return false; + if (Utl.getBool(player,type,"block") && (targetStack.getItem() instanceof BlockItem)) return false; + if (Utl.getBool(player,type,"food") && food.contains(targetStack.getUseAction())) return false; + if (Utl.getBool(player,type,"usable") && !notUsable.contains(targetStack.getUseAction())) return false; } } } @@ -107,7 +105,7 @@ public class Events { if (block instanceof CarpetBlock && config.carpetsOn) return true; if (blockState.isFullCube(world,pos.add(0,1,0)) && config.fullBlocksOn) return true; // custom checker - if (config.customOn && !config.customBlocks.isEmpty()) { + if (config.customOn && config.customBlocks.size() != 0) { for (HashMap map:getCustomBlocks().values()) { String blockID = Registries.BLOCK.getId(block).toString(); if (map.get("block").equals(blockID)) { @@ -151,7 +149,7 @@ public class Events { entity.updatePositionAndAngles(pos.getX() + 0.5, pos.getY()+.78, pos.getZ() + 0.5, 0, 0); hitBoxY = 2; } - if (config.customOn && !config.customBlocks.isEmpty()) { + if (config.customOn && config.customBlocks.size() != 0) { for (HashMap map:getCustomBlocks().values()) { String blockID = Registries.BLOCK.getId(block).toString(); if (map.get("block").equals(blockID)) { @@ -176,7 +174,7 @@ public class Events { ServerPlayerEntity player = handler.player; checkPlayers.put(player,2); // put server settings in the player settings - Sit.playerSettings.put(player, PlayerSettings.getHandSettings()); + Sit.playerSettings.put(player,Utl.getHandSettings()); }); ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> { ServerPlayerEntity player = handler.player; diff --git a/src/main/java/one/oth3r/sit/ModMenu.java b/src/main/java/one/oth3r/sit/ModMenu.java index c61cd40..7283b17 100644 --- a/src/main/java/one/oth3r/sit/ModMenu.java +++ b/src/main/java/one/oth3r/sit/ModMenu.java @@ -12,8 +12,11 @@ import net.minecraft.text.TextColor; import net.minecraft.util.Formatting; public class ModMenu implements ModMenuApi { + private static MutableText lang(String key) { + return Text.translatable("config.sit."+key); + } private static MutableText lang(String key, Object... args) { - return Utl.lang("config."+key,args); + return Text.translatable("config.sit."+key,args); } @Override public ConfigScreenFactory getModConfigScreenFactory() { @@ -21,6 +24,7 @@ public class ModMenu implements ModMenuApi { .title(Text.of("Sit!")) .category(ConfigCategory.createBuilder() .name(lang("category.general")) + .tooltip(lang("category.general.tooltip")) .option(Option.createBuilder() .name(lang("general.keep_active")) .description(OptionDescription.of(lang("general.keep_active.description"))) @@ -67,7 +71,7 @@ public class ModMenu implements ModMenuApi { .name(lang("general.sittable_blocks")) .description(OptionDescription.of( lang("general.sittable_blocks.description") - .append("\n\n").append(lang("example", + .append("\n\n").append(lang("general.sittable_blocks.description_2", Text.literal("\"") .append(Text.literal("minecraft:campfire").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) .append("|") @@ -76,12 +80,12 @@ public class ModMenu implements ModMenuApi { .append(Text.literal("1").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) .append("|") .append(Text.literal("lit=false").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD)))) - .append("\"").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GRAY))))) - .append("\n\n").append(lang("general.sittable_blocks.description.2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) - .append("\n").append(lang("general.sittable_blocks.description.3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))) - .append("\n").append(lang("general.sittable_blocks.description.4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) - .append("\n").append(lang("general.sittable_blocks.description.5").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD)))) - .append("\n\n").append(lang("general.sittable_blocks.description.6").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.YELLOW)))))) + .append("\"").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))) + .append("\n\n").append(lang("general.sittable_blocks.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) + .append("\n").append(lang("general.sittable_blocks.description_5").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))) + .append("\n").append(lang("general.sittable_blocks.description_6").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) + .append("\n").append(lang("general.sittable_blocks.description_7").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD)))) + .append("\n\n").append(lang("general.sittable_blocks.description_8").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.YELLOW)))))) .binding(config.defaults.customBlocks, () -> config.customBlocks, n -> config.customBlocks = n) .controller(StringControllerBuilder::create) .initial("") @@ -89,50 +93,51 @@ public class ModMenu implements ModMenuApi { .build()) .category(ConfigCategory.createBuilder() .name(lang("category.main_hand")) + .tooltip(lang("category.main_hand.tooltip")) .option(Option.createBuilder() - .name(lang("hand.requirement")) - .description(OptionDescription.of(lang("hand.requirement.description") - .append("\n\n").append(lang("hand.requirement.description.2",lang("hand.requirement.empty")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) - .append("\n").append(lang("hand.requirement.description.3",lang("hand.requirement.restrictive")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) - .append("\n").append(lang("hand.requirement.description.4",lang("hand.requirement.none")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) + .name(lang("hand.requirements")) + .description(OptionDescription.of(lang("hand.requirements.description") + .append("\n\n").append(lang("hand.requirements.description_2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) + .append("\n").append(lang("hand.requirements.description_3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) + .append("\n").append(lang("hand.requirements.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) .binding(config.defaults.mainReq, () -> config.mainReq, n -> config.mainReq = n) .controller(opt -> EnumControllerBuilder.create(opt).enumClass(config.HandRequirement.class) - .formatValue(v -> lang("hand.requirement."+v.toString()))) + .formatValue(v -> Text.translatable("config.sit."+v.name().toLowerCase()))) .build()) .group(OptionGroup.createBuilder() - .name(lang("hand.restriction")) - .description(OptionDescription.of(lang("hand.restriction.description"))) + .name(lang("hand.restrictions")) + .description(OptionDescription.of(lang("hand.restrictions.description"))) .option(Option.createBuilder() - .name(lang("hand.restriction.blocks")) + .name(lang("hand.restrictions.blocks")) .binding(config.defaults.mainBlock,()-> config.mainBlock,n -> config.mainBlock = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() - .name(lang("hand.restriction.food")) + .name(lang("hand.restrictions.food")) .binding(config.defaults.mainFood,()-> config.mainFood,n -> config.mainFood = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() - .name(lang("hand.restriction.usable")) - .description(OptionDescription.of(lang("hand.restriction.usable.description"))) + .name(lang("hand.restrictions.usable")) + .description(OptionDescription.of(lang("hand.restrictions.usable.description"))) .binding(config.defaults.mainUsable,()-> config.mainUsable,n -> config.mainUsable = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .build()) .group(ListOption.createBuilder() - .name(lang("hand.restriction.whitelist")) - .description(OptionDescription.of(lang("hand.restriction.list.description") - .append("\n\n").append(lang("example", - Text.empty().append(Utl.Assets.LIST).styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))) + .name(lang("hand.whitelist")) + .description(OptionDescription.of(lang("hand.whitelist.description") + .append("\n\n").append(lang("hand.list.description")) + .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) .binding(config.defaults.mainWhitelist, () -> config.mainWhitelist, n -> config.mainWhitelist = n) .controller(StringControllerBuilder::create) .initial("") .build()) .group(ListOption.createBuilder() - .name(lang("hand.restriction.blacklist")) - .description(OptionDescription.of(lang("hand.restriction.list.description") - .append("\n\n").append(lang("example", - Text.empty().append(Utl.Assets.LIST).styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))) + .name(lang("hand.blacklist")) + .description(OptionDescription.of(lang("hand.blacklist.description") + .append("\n\n").append(lang("hand.list.description")) + .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) .binding(config.defaults.mainBlacklist, () -> config.mainBlacklist, n -> config.mainBlacklist = n) .controller(StringControllerBuilder::create) .initial("") @@ -140,50 +145,51 @@ public class ModMenu implements ModMenuApi { .build()) .category(ConfigCategory.createBuilder() .name(lang("category.off_hand")) + .tooltip(lang("category.off_hand.tooltip")) .option(Option.createBuilder() - .name(lang("hand.requirement")) - .description(OptionDescription.of(lang("hand.requirement.description") - .append("\n\n").append(lang("hand.requirement.description.2",lang("hand.requirement.empty")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) - .append("\n").append(lang("hand.requirement.description.3",lang("hand.requirement.restrictive")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) - .append("\n").append(lang("hand.requirement.description.4",lang("hand.requirement.none")).styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) + .name(lang("hand.requirements")) + .description(OptionDescription.of(lang("hand.requirements.description") + .append("\n\n").append(lang("hand.requirements.description_2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) + .append("\n").append(lang("hand.requirements.description_3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) + .append("\n").append(lang("hand.requirements.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) .binding(config.defaults.offReq, () -> config.offReq, n -> config.offReq = n) .controller(opt -> EnumControllerBuilder.create(opt).enumClass(config.HandRequirement.class) - .formatValue(v -> lang("hand.requirement."+v.toString()))) + .formatValue(v -> Text.translatable("config.sit."+v.name().toLowerCase()))) .build()) .group(OptionGroup.createBuilder() - .name(lang("hand.restriction")) - .description(OptionDescription.of(lang("hand.restriction.description"))) + .name(lang("hand.restrictions")) + .description(OptionDescription.of(lang("hand.restrictions.description"))) .option(Option.createBuilder() - .name(lang("hand.restriction.blocks")) + .name(lang("hand.restrictions.blocks")) .binding(config.defaults.offBlock,()-> config.offBlock,n -> config.offBlock = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() - .name(lang("hand.restriction.food")) + .name(lang("hand.restrictions.food")) .binding(config.defaults.offFood,()-> config.offFood,n -> config.offFood = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() - .name(lang("hand.restriction.usable")) - .description(OptionDescription.of(lang("hand.restriction.usable.description"))) + .name(lang("hand.restrictions.usable")) + .description(OptionDescription.of(lang("hand.restrictions.usable.description"))) .binding(config.defaults.offUsable,()-> config.offUsable,n -> config.offUsable = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .build()) .group(ListOption.createBuilder() - .name(lang("hand.restriction.whitelist")) - .description(OptionDescription.of(lang("hand.restriction.list.description") - .append("\n\n").append(lang("example", - Text.empty().append(Utl.Assets.LIST).styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))) + .name(lang("hand.whitelist")) + .description(OptionDescription.of(lang("hand.whitelist.description") + .append("\n\n").append(lang("hand.list.description")) + .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) .binding(config.defaults.offWhitelist, () -> config.offWhitelist, n -> config.offWhitelist = n) .controller(StringControllerBuilder::create) .initial("") .build()) .group(ListOption.createBuilder() - .name(lang("hand.restriction.blacklist")) - .description(OptionDescription.of(lang("hand.restriction.list.description") - .append("\n\n").append(lang("example", - Text.empty().append(Utl.Assets.LIST).styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))) + .name(lang("hand.blacklist")) + .description(OptionDescription.of(lang("hand.blacklist.description") + .append("\n\n").append(lang("hand.list.description")) + .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) .binding(config.defaults.offBlacklist, () -> config.offBlacklist, n -> config.offBlacklist = n) .controller(StringControllerBuilder::create) .initial("") diff --git a/src/main/java/one/oth3r/sit/Sit.java b/src/main/java/one/oth3r/sit/Sit.java index bb837c5..08abcc9 100644 --- a/src/main/java/one/oth3r/sit/Sit.java +++ b/src/main/java/one/oth3r/sit/Sit.java @@ -3,16 +3,23 @@ package one.oth3r.sit; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; +import io.netty.buffer.ByteBuf; +import io.netty.util.ReferenceCountUtil; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.PacketByteBuf; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.HashMap; public class Sit implements ModInitializer { @@ -43,4 +50,8 @@ public class Sit implements ModInitializer { }); }); } + public static MutableText lang(String key, Object... args) { + if (isClient) return Text.translatable(key, args); + else return LangReader.of(key, args).getTxT(); + } } \ No newline at end of file diff --git a/src/main/java/one/oth3r/sit/SitClient.java b/src/main/java/one/oth3r/sit/SitClient.java index 621c788..2a1d2e1 100644 --- a/src/main/java/one/oth3r/sit/SitClient.java +++ b/src/main/java/one/oth3r/sit/SitClient.java @@ -20,6 +20,6 @@ public class SitClient implements ClientModInitializer { } public static void sendPackets() { Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - new PacketBuilder(gson.toJson(Utl.PlayerSettings.getHandSettings())).send(); + new PacketBuilder(gson.toJson(Utl.getHandSettings())).send(); } } diff --git a/src/main/java/one/oth3r/sit/SitCommand.java b/src/main/java/one/oth3r/sit/SitCommand.java index b740d5d..0fee18c 100644 --- a/src/main/java/one/oth3r/sit/SitCommand.java +++ b/src/main/java/one/oth3r/sit/SitCommand.java @@ -49,7 +49,7 @@ public class SitCommand { if (player == null) { if (args[0].equalsIgnoreCase("reload")) { config.load(); - Sit.LOGGER.info(Utl.lang("msg.reloaded").getString()); + Sit.LOGGER.info(Sit.lang("key.sit.command.reloaded").getString()); } return 1; } @@ -73,7 +73,7 @@ public class SitCommand { } if (args[0].equalsIgnoreCase("reload")) { config.load(); - player.sendMessage(Utl.lang("msg.reloaded").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))); + player.sendMessage(Sit.lang("key.sit.command.reloaded").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))); } if (args[0].equalsIgnoreCase("purgeChairEntities")) { String cmd = "kill @e[type=minecraft:text_display,name=\""+Sit.ENTITY_NAME+"\"]"; @@ -81,9 +81,9 @@ public class SitCommand { ParseResults parse = Sit.commandManager.getDispatcher().parse(cmd, player.getCommandSource()); Sit.commandManager.getDispatcher().execute(parse); - player.sendMessage(Utl.lang("msg.purged")); + player.sendMessage(Sit.lang("key.sit.command.purged")); } catch (CommandSyntaxException e) { - player.sendMessage(Utl.lang("msg.purged")); + player.sendMessage(Sit.lang("key.sit.command.purged")); e.printStackTrace(); } } diff --git a/src/main/java/one/oth3r/sit/Utl.java b/src/main/java/one/oth3r/sit/Utl.java index b1bd1fd..3045ec1 100644 --- a/src/main/java/one/oth3r/sit/Utl.java +++ b/src/main/java/one/oth3r/sit/Utl.java @@ -4,8 +4,6 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; import java.lang.reflect.Type; import java.util.ArrayList; @@ -13,62 +11,35 @@ import java.util.HashMap; import java.util.List; public class Utl { - public static MutableText lang(String key, Object... args) { - if (Sit.isClient) return Text.translatable(key, args); - else return LangReader.of(key, args).getTxT(); - } - public enum HandType { + enum HandType { main, off } - public static class PlayerSettings { - public enum Setting { - requirement, - block, - food, - usable, - whitelist, - blacklist - } - /** - * Gets a HashMap of all player configurable settings. - * @return a map with player hand settings. - */ - public static HashMap getHandSettings() { - Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - HashMap settings = new HashMap<>(); - // main hand - settings.put("hand.main."+Setting.requirement,String.valueOf(config.mainReq)); - settings.put("hand.main."+Setting.block,String.valueOf(config.mainBlock)); - settings.put("hand.main."+Setting.food,String.valueOf(config.mainFood)); - settings.put("hand.main."+Setting.usable,String.valueOf(config.mainUsable)); - settings.put("hand.main."+Setting.whitelist,gson.toJson(config.mainWhitelist)); - settings.put("hand.main."+Setting.blacklist,gson.toJson(config.mainBlacklist)); - // copy but offhand - settings.put("hand.off."+Setting.requirement,String.valueOf(config.offReq)); - settings.put("hand.off."+Setting.block,String.valueOf(config.offBlock)); - settings.put("hand.off."+Setting.food,String.valueOf(config.offFood)); - settings.put("hand.off."+Setting.usable,String.valueOf(config.offUsable)); - settings.put("hand.off."+Setting.whitelist,gson.toJson(config.offWhitelist)); - settings.put("hand.off."+Setting.blacklist,gson.toJson(config.offBlacklist)); - return settings; - } - // returns specific items from the player config - public static config.HandRequirement getRequirement(ServerPlayerEntity player, HandType type) { - return config.HandRequirement.get(Sit.playerSettings.get(player).get("hand."+type+".requirement")); - } - public static List getList(ServerPlayerEntity player, HandType type, Setting setting) { - Type listType = new TypeToken>() {}.getType(); - return new Gson().fromJson(Sit.playerSettings.get(player).get("hand."+type+"."+setting),listType); - } - public static boolean getToggle(ServerPlayerEntity player, HandType type, Setting setting) { - return Boolean.parseBoolean(Sit.playerSettings.get(player).get("hand."+type+"."+setting)); - } + public static HashMap getHandSettings() { + Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + HashMap settings = new HashMap<>(); + settings.put("hand.main.requirement",String.valueOf(config.mainReq)); + settings.put("hand.main.block",String.valueOf(config.mainBlock)); + settings.put("hand.main.food",String.valueOf(config.mainFood)); + settings.put("hand.main.usable",String.valueOf(config.mainUsable)); + settings.put("hand.main.whitelist",gson.toJson(config.mainWhitelist)); + settings.put("hand.main.blacklist",gson.toJson(config.mainBlacklist)); + settings.put("hand.off.requirement",String.valueOf(config.offReq)); + settings.put("hand.off.block",String.valueOf(config.offBlock)); + settings.put("hand.off.food",String.valueOf(config.offFood)); + settings.put("hand.off.usable",String.valueOf(config.offUsable)); + settings.put("hand.off.whitelist",gson.toJson(config.offWhitelist)); + settings.put("hand.off.blacklist",gson.toJson(config.offBlacklist)); + return settings; } - public static class Assets { - public static final String CUSTOM_BLOCKS = "\"minecraft:campfire|0.255|1|lit=false\""; - public static final String REQUIREMENT_OPTIONS = String.format("%s, %s, %s", - config.HandRequirement.empty,config.HandRequirement.restrictive,config.HandRequirement.none); - public static final String LIST = "\"minecraft:torch\""; + public static config.HandRequirement getReq(ServerPlayerEntity player, HandType type) { + return config.HandRequirement.get(Sit.playerSettings.get(player).get("hand."+type+".requirement")); + } + public static List getList(ServerPlayerEntity player, HandType type, String setting) { + Type listType = new TypeToken>() {}.getType(); + return new Gson().fromJson(Sit.playerSettings.get(player).get("hand."+type+"."+setting),listType); + } + public static boolean getBool(ServerPlayerEntity player, HandType type, String setting) { + return Boolean.parseBoolean(Sit.playerSettings.get(player).get("hand."+type+"."+setting)); } } diff --git a/src/main/java/one/oth3r/sit/config.java b/src/main/java/one/oth3r/sit/config.java index cd1c88e..7e52df9 100644 --- a/src/main/java/one/oth3r/sit/config.java +++ b/src/main/java/one/oth3r/sit/config.java @@ -24,7 +24,7 @@ public class config { public static boolean fullBlocksOn = defaults.fullBlocksOn; public static boolean customOn = defaults.customOn; public static List customBlocks = defaults.customBlocks; - public enum HandRequirement { + enum HandRequirement { empty, restrictive, none; @@ -128,7 +128,7 @@ public class config { } } public static String lang(String key, Object... args) { - return Utl.lang("config."+key, args).getString(); + return LangReader.of("config.sit."+key, args).getTxT().getString(); } public static void save() { try (var file = Files.newBufferedWriter(configFile().toPath(), StandardCharsets.UTF_8)) { @@ -147,45 +147,34 @@ public class config { file.write("\ncarpets=" + carpetsOn); file.write("\nfull-blocks=" + fullBlocksOn); file.write("\ncustom=" + customOn); - file.write("\n# "+ Utl.lang("config."+ + file.write("\n# "+Sit.lang("config.sit."+ "general.sittable_blocks.description") - .append("\n# ").append(lang("example",Utl.Assets.CUSTOM_BLOCKS)) - .append("\n# ").append(lang("general.sittable_blocks.description.2")) - .append("\n# ").append(lang("general.sittable_blocks.description.3")) - .append("\n# ").append(lang("general.sittable_blocks.description.4")) - .append("\n# ").append(lang("general.sittable_blocks.description.5")) - .append("\n# ").append(lang("general.sittable_blocks.description.6")).getString()); + .append("\n# ").append(lang("general.sittable_blocks.description_2", + "\"minecraft:campfire|0.255|1|lit=false\"")) + .append("\n# ").append(lang("general.sittable_blocks.description_4")) + .append("\n# ").append(lang("general.sittable_blocks.description_5")) + .append("\n# ").append(lang("general.sittable_blocks.description_6")) + .append("\n# ").append(lang("general.sittable_blocks.description_7")) + .append("\n# ").append(lang("general.sittable_blocks.description_8")).getString()); file.write("\ncustom-blocks="+gson.toJson(customBlocks)); file.write("\n\n# "+lang("hand")); - file.write("\n# "+ Utl.lang("config."+ - "hand.requirement.description") - .append("\n# ").append(lang("hand.requirement.description.2",HandRequirement.empty)) - .append("\n# ").append(lang("hand.requirement.description.3",HandRequirement.restrictive)) - .append("\n# ").append(lang("hand.requirement.description.4",HandRequirement.none)).getString()); - file.write("\n# "+lang("hand.requirement.options",Utl.Assets.REQUIREMENT_OPTIONS)); + file.write("\n# "+Sit.lang("config.sit."+ + "hand.requirements.description") + .append("\n# ").append(lang("hand.requirements.description_2")) + .append("\n# ").append(lang("hand.requirements.description_3")) + .append("\n# ").append(lang("hand.requirements.description_4")).getString()); file.write("\nhand.main.requirement=" + mainReq); - file.write("\n#"); - file.write("\nhand.off.requirement=" + offReq); - - file.write("\n\n# "+lang("hand.restriction")); - file.write("\n# "+lang("hand.restriction.description")); file.write("\nhand.main.block=" + mainBlock); file.write("\nhand.main.food=" + mainFood); file.write("\nhand.main.usable=" + mainUsable); - file.write("\n#"); + file.write("\nhand.main.whitelist="+gson.toJson(mainWhitelist)); + file.write("\nhand.main.blacklist="+gson.toJson(mainBlacklist)); + file.write("\nhand.off.requirement=" + offReq); file.write("\nhand.off.block=" + offBlock); file.write("\nhand.off.food=" + offFood); file.write("\nhand.off.usable=" + offUsable); - - file.write("\n\n# "+lang("hand.restriction.list")); - file.write("\n# "+lang("hand.restriction.list.description")); - file.write("\n# "+lang("example",Utl.Assets.LIST)); - file.write("\nhand.main.whitelist="+gson.toJson(mainWhitelist)); - file.write("\nhand.main.blacklist="+gson.toJson(mainBlacklist)); - file.write("\n#"); file.write("\nhand.off.whitelist="+gson.toJson(offWhitelist)); file.write("\nhand.off.blacklist="+gson.toJson(offBlacklist)); - // send packets to update the settings on the server if (SitClient.inGame) SitClient.sendPackets(); } catch (Exception e) { diff --git a/src/main/resources/assets/sit/lang/en_us.json b/src/main/resources/assets/sit/lang/en_us.json index 703f71c..fe8916c 100644 --- a/src/main/resources/assets/sit/lang/en_us.json +++ b/src/main/resources/assets/sit/lang/en_us.json @@ -1,55 +1,51 @@ { - "category.sit": "Sit!", - "config.category.general": "General", - "config.category.main_hand": "Main Hand", - "config.category.off_hand": "Off Hand", - - "config.general.keep_active": "Keep Active", - "config.general.keep_active.description": "Keeps the entities active even when logging off / shutting down", - "config.general.sittable": "Sittable Blocks", - "config.general.sittable.description": "Toggle the ability to sit on different block types.", - "config.general.sit_while_seated": "Sit While Seated", - "config.general.sit_while_seated.description": "Toggle the ability to sit on other blocks while already being seated on one.", - "config.general.sittable.stairs": "Stairs", - "config.general.sittable.slabs": "Slabs", - "config.general.sittable.carpets": "Carpets", - "config.general.sittable.full_blocks": "Full Blocks", - "config.general.sittable.custom": "Custom", - "config.general.sittable.custom.description": "Enables adding custom blocks to sit on.", - "config.general.sittable_blocks": "Custom Sittable Blocks", - "config.general.sittable_blocks.description": "Add custom sittable blocks!", - "config.general.sittable_blocks.description.2": "First entry: custom block id", - "config.general.sittable_blocks.description.3": "Second entry: sitting height (number from 0-1 eg 0.52)", - "config.general.sittable_blocks.description.4": "Third entry: hitbox size (where the player spawns above the entity when dismounting)", - "config.general.sittable_blocks.description.5": "Fourth entry (optional): required blockstate to sit (Put a \"!\" to exclude blockstates)", - "config.general.sittable_blocks.description.6": "Separate different entries with \"|\"!", - "config.hand": "Hand Settings", - "config.hand.requirement": "Requirements", - "config.hand.requirement.empty": "Empty", - "config.hand.requirement.restrictive": "Restrictive", - "config.hand.requirement.none": "None", - "config.hand.requirement.description": "Hand requirements for sitting.", - "config.hand.requirement.description.2": "%s: hand has to be empty", - "config.hand.requirement.description.3": "%s: set restrictions for hand state", - "config.hand.requirement.description.4": "%s: can sit whenever", - "config.hand.requirement.options": "Options: %s", - "config.hand.restriction": "Restrictions", - "config.hand.restriction.description": "Toggle custom hand restrictions for sitting.", - "config.hand.restriction.blocks": "Blocks", - "config.hand.restriction.food": "Food", - "config.hand.restriction.usable": "Usable", - "config.hand.restriction.usable.description": "eg. bows, tridents, shield", - "config.hand.restriction.list": "Item Restrictions", - "config.hand.restriction.list.description": "Allow or block certain items when the hand requirement is restrictive.", - "config.hand.restriction.whitelist": "Whitelist", - "config.hand.restriction.blacklist": "Blacklist", - "config.example": "Example: %s", - - "msg.sit_toggle.on": "Enabled Sitting!", - "msg.sit_toggle.off": "Disabled Sitting!", - "msg.reloaded": "Reloaded the config!", - "msg.purged": "Purged all active chair entities!", - - "key.toggle": "Toggle Sitting", - "key.sit": "Sit" + "config.sit.empty": "Empty", + "config.sit.restrictive": "Restrictive", + "config.sit.none": "None", + "config.sit.category.general": "General", + "config.sit.category.general.tooltip": "General settings", + "config.sit.category.main_hand": "Main Hand", + "config.sit.category.main_hand.tooltip": "Main hand settings", + "config.sit.category.off_hand": "Off Hand", + "config.sit.category.off_hand.tooltip": "Off hand settings", + "config.sit.general.keep_active": "Keep Active", + "config.sit.general.keep_active.description": "Keeps the entities active even when logging off / shutting down", + "config.sit.general.sittable": "Sittable Blocks", + "config.sit.general.sittable.description": "Toggle the ability to sit on different block types.", + "config.sit.general.sit_while_seated": "Sit While Seated", + "config.sit.general.sit_while_seated.description": "Toggle the ability to sit on other blocks while already being seated on one.", + "config.sit.general.sittable.stairs": "Stairs", + "config.sit.general.sittable.slabs": "Slabs", + "config.sit.general.sittable.carpets": "Carpets", + "config.sit.general.sittable.full_blocks": "Full Blocks", + "config.sit.general.sittable.custom": "Custom", + "config.sit.general.sittable.custom.description": "Enables adding custom blocks to sit on.", + "config.sit.general.sittable_blocks": "Custom Sittable Blocks", + "config.sit.general.sittable_blocks.description": "Add custom sittable blocks!", + "config.sit.general.sittable_blocks.description_2": "Example: %s", + "config.sit.general.sittable_blocks.description_4": "First entry: custom block", + "config.sit.general.sittable_blocks.description_5": "Second entry: sitting height (number from 0-1 eg 0.52)", + "config.sit.general.sittable_blocks.description_6": "Third entry: hitbox size (where the player spawns above the entity when dismounting)", + "config.sit.general.sittable_blocks.description_7": "Fourth entry (optional): required blockstate to sit (Put a \"!\" to exclude blockstates)", + "config.sit.general.sittable_blocks.description_8": "Separate different entries with \"|\"!", + "config.sit.hand": "Hand Settings", + "config.sit.hand.requirements": "Requirements", + "config.sit.hand.requirements.description": "Hand requirements for sitting.", + "config.sit.hand.requirements.description_2": "Empty = hand has to be empty", + "config.sit.hand.requirements.description_3": "Restrictive = set restrictions for hand state", + "config.sit.hand.requirements.description_4": "None = can sit whenever", + "config.sit.hand.restrictions": "Restrictions", + "config.sit.hand.restrictions.description": "Toggle preset hand restrictions for sitting.", + "config.sit.hand.restrictions.blocks": "Blocks", + "config.sit.hand.restrictions.food": "Food", + "config.sit.hand.restrictions.usable": "Usable", + "config.sit.hand.restrictions.usable.description": "eg. bows, tridents, shield", + "config.sit.hand.whitelist": "Whitelist", + "config.sit.hand.whitelist.description": "Make a custom whitelist for items that the player can use to sit with.", + "config.sit.hand.blacklist": "Blacklist", + "config.sit.hand.blacklist.description": "Make a custom blacklist for items that the player can't use to sit with.", + "config.sit.hand.list.description": "Example: ", + "config.sit.hand.list.description_2": "\"minecraft:torch\"", + "key.sit.command.reloaded": "Reloaded the config!", + "key.sit.command.purged": "Purged all active chair entities!" } \ No newline at end of file From 911133de23bda8bc06c9a8d4e24a8c40e2f50c50 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Mon, 1 Apr 2024 17:58:26 -0500 Subject: [PATCH 10/17] readme update for caligo --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2dc0f0a..4f01e02 100644 --- a/README.md +++ b/README.md @@ -7,17 +7,23 @@ Sit on **stairs**, **slabs**, **carpets** by default, and sit on everything else using the config! You can also customize hand restrictions to stop accidentally sitting down! The mod also has full Geyser support! Enjoy sitting with everyone, weather they are on Bedrock or Java! + ### Where to install? -**Sit!** works on the server (singleplayer included), with support for clients that join in to use their own settings to sit. +**Sit!** works on the server (singleplayer included), also with support for clients that join in to use their own settings to sit. + ## Help localize Sit! on [Crowdin](https://crowdin.com/project/oth3r-sit)! ![overview](https://github.com/Oth3r/Sit/blob/master/media/overview.gif?raw=true) + ## Check out my other Projects! +[![Caligo badge](https://github.com/Oth3r/Caligo/blob/master/media/promo_badge.png?raw=true)](https://modrinth.com/mod/caligo) [![DirectionHUD badge](https://github.com/Oth3r/DirectionHUD/blob/master/media/mod-badge.png?raw=true)](https://modrinth.com/mod/directionhud) [![DirectionHUD Spigot badge](https://github.com/Oth3r/DirectionHUD/blob/master/media/plugin-badge.png?raw=true)](https://modrinth.com/plugin/directionhud-plugin) # Features + ### Hand Restrictions Don't want to accidentally sit down? Set custom restrictions for each hand in the config! + * Per player hand restrictions when connecting to a `Sit!` server on a `Sit!` Client! ![hand restrictions](https://github.com/Oth3r/Sit/blob/master/media/hand-restrictions.gif?raw=true) @@ -26,6 +32,7 @@ Don't want to accidentally sit down? Set custom restrictions for each hand in th Want to sit on _**EVERY**_ block? With the config you can add more options to sit on! Custom block states are also supported. ![custom blocks](https://github.com/Oth3r/Sit/blob/master/media/custom-blocks.gif?raw=true) + ### Customizable Config Configure to your hearts desire with the in-game config with **[ModMenu](https://modrinth.com/mod/modmenu)** & **[YetAnotherConfigLib](https://modrinth.com/mod/yacl)**, or use the provided config file for servers! @@ -35,3 +42,5 @@ Configure to your hearts desire with the in-game config with **[ModMenu](https:/ ## Future Goals * Forge Port (probably NeoForge 1.21) * Custom dismounting logic + * better config (coming soon!) + * keybindings (next update) From 8b78bf4651e20009c8bfe29ee4776f583039eb25 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Wed, 3 Apr 2024 15:45:22 -0500 Subject: [PATCH 11/17] make a common sit method --- src/main/java/one/oth3r/sit/Events.java | 38 +++++++++++++-------- src/main/java/one/oth3r/sit/SitCommand.java | 18 +++------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/main/java/one/oth3r/sit/Events.java b/src/main/java/one/oth3r/sit/Events.java index 9fd9ef8..5a610d7 100644 --- a/src/main/java/one/oth3r/sit/Events.java +++ b/src/main/java/one/oth3r/sit/Events.java @@ -167,6 +167,24 @@ public class Events { if (entity.getY() <= pos.getY()+.35+oneTwentyTwo) entity.setPitch(90); // below else entity.setPitch(-90); // above } + public static boolean sit(ServerPlayerEntity player, BlockPos pos) { + // todo interactions entity to make the sitting hitbox? + World world = player.getWorld(); + DisplayEntity.TextDisplayEntity entity = new DisplayEntity.TextDisplayEntity(EntityType.TEXT_DISPLAY,player.getServerWorld()); + setEntity(pos,world,entity); + if (checkBlocks(pos,world,isAboveBlockheight(entity))) { + if (entities.containsKey(player)) { + if (!config.sitWhileSeated) return false; + entities.get(player).setRemoved(Entity.RemovalReason.DISCARDED); + entities.remove(player); + } + player.getServerWorld().spawnEntity(entity); + player.startRiding(entity); + entities.put(player,entity); + return true; + } + return false; + } public static void register() { ServerTickEvents.END_SERVER_TICK.register(minecraftServer -> minecraftServer.execute(Events::cleanUp)); // PLAYER JOIN @@ -196,22 +214,12 @@ public class Events { if (player == null) return ActionResult.PASS; if (hand == net.minecraft.util.Hand.MAIN_HAND && hitResult.getType() == HitResult.Type.BLOCK) { BlockPos pos = hitResult.getBlockPos(); + // check the players hands if (!checkLogic(player)) return ActionResult.PASS; - // todo interactions entity to make the hitbox? - // make the entity first before checking to make sure the blocks around are fine - DisplayEntity.TextDisplayEntity entity = new DisplayEntity.TextDisplayEntity(EntityType.TEXT_DISPLAY,player.getServerWorld()); - setEntity(pos,world,entity); - if (checkBlocks(pos,world,isAboveBlockheight(entity))) { - if (entities.containsKey(player)) { - if (!config.sitWhileSeated) return ActionResult.PASS; - entities.get(player).setRemoved(Entity.RemovalReason.DISCARDED); - entities.remove(player); - } - player.getServerWorld().spawnEntity(entity); - player.startRiding(entity); - entities.put(player,entity); - return ActionResult.FAIL; - } + // make the player sit + boolean status = sit(player,pos); + // if sat, cancel / FAIL the use block event + if (status) return ActionResult.FAIL; } return ActionResult.PASS; }); diff --git a/src/main/java/one/oth3r/sit/SitCommand.java b/src/main/java/one/oth3r/sit/SitCommand.java index 0fee18c..281cd94 100644 --- a/src/main/java/one/oth3r/sit/SitCommand.java +++ b/src/main/java/one/oth3r/sit/SitCommand.java @@ -7,15 +7,12 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.decoration.DisplayEntity; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.TextColor; import net.minecraft.util.Formatting; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import java.util.concurrent.CompletableFuture; @@ -55,21 +52,14 @@ public class SitCommand { } if (args[0].equalsIgnoreCase("sit")) { BlockPos pos = player.getBlockPos(); - if (!(player.getY() -((int) player.getY()) > 0.00)) { + // get the block under the player if player on top of a solid + if (!(player.getY() - ((int) player.getY()) > 0.00)) { pos = pos.add(0,-1,0); } - World world = player.getWorld(); // if already sitting, ignore if (Events.entities.containsKey(player)) return 1; - // make entity first to check the blocks - DisplayEntity.TextDisplayEntity entity = new DisplayEntity.TextDisplayEntity(EntityType.TEXT_DISPLAY,player.getServerWorld()); - Events.setEntity(pos,world,entity); - if (Events.checkBlocks(pos,world,Events.isAboveBlockheight(entity))) { - player.getServerWorld().spawnEntity(entity); - player.startRiding(entity); - Events.entities.put(player,entity); - return 1; - } + // sit + Events.sit(player,pos); } if (args[0].equalsIgnoreCase("reload")) { config.load(); From 132c9dc55a9f1f1558d090d351e40a336fc3da3f Mon Sep 17 00:00:00 2001 From: Oth3r Date: Thu, 4 Apr 2024 21:45:28 -0500 Subject: [PATCH 12/17] config to file package, and capitalize --- src/main/java/one/oth3r/sit/Events.java | 18 +++---- src/main/java/one/oth3r/sit/LangReader.java | 7 +-- src/main/java/one/oth3r/sit/ModMenu.java | 51 ++++++++++--------- src/main/java/one/oth3r/sit/Sit.java | 5 +- src/main/java/one/oth3r/sit/SitCommand.java | 5 +- .../sit/{config.java => file/Config.java} | 4 +- 6 files changed, 46 insertions(+), 44 deletions(-) rename src/main/java/one/oth3r/sit/{config.java => file/Config.java} (99%) diff --git a/src/main/java/one/oth3r/sit/Events.java b/src/main/java/one/oth3r/sit/Events.java index 5a610d7..51e329f 100644 --- a/src/main/java/one/oth3r/sit/Events.java +++ b/src/main/java/one/oth3r/sit/Events.java @@ -72,7 +72,7 @@ public class Events { // get a hashmap of custom blocks HashMap> map = new HashMap<>(); int i = 1; - for (String s:config.customBlocks) { + for (String s: Config.customBlocks) { String[] split = s.split("\\|"); HashMap data = new HashMap<>(); data.put("block",split[0]); @@ -100,12 +100,12 @@ public class Events { for (Entity entity:entities.values()) if (entity.getBlockPos().equals(pos) || entity.getBlockPos().add(0,1,0).equals(pos)) return false; // return for the 4 default types - if (block instanceof StairsBlock && config.stairsOn) return blockState.get(StairsBlock.HALF) == BlockHalf.BOTTOM; - if (block instanceof SlabBlock && config.slabsOn) return blockState.get(SlabBlock.TYPE) == SlabType.BOTTOM; - if (block instanceof CarpetBlock && config.carpetsOn) return true; - if (blockState.isFullCube(world,pos.add(0,1,0)) && config.fullBlocksOn) return true; + if (block instanceof StairsBlock && Config.stairsOn) return blockState.get(StairsBlock.HALF) == BlockHalf.BOTTOM; + if (block instanceof SlabBlock && Config.slabsOn) return blockState.get(SlabBlock.TYPE) == SlabType.BOTTOM; + if (block instanceof CarpetBlock && Config.carpetsOn) return true; + if (blockState.isFullCube(world,pos.add(0,1,0)) && Config.fullBlocksOn) return true; // custom checker - if (config.customOn && config.customBlocks.size() != 0) { + if (Config.customOn && Config.customBlocks.size() != 0) { for (HashMap map:getCustomBlocks().values()) { String blockID = Registries.BLOCK.getId(block).toString(); if (map.get("block").equals(blockID)) { @@ -149,7 +149,7 @@ public class Events { entity.updatePositionAndAngles(pos.getX() + 0.5, pos.getY()+.78, pos.getZ() + 0.5, 0, 0); hitBoxY = 2; } - if (config.customOn && config.customBlocks.size() != 0) { + if (Config.customOn && !Config.customBlocks.isEmpty()) { for (HashMap map:getCustomBlocks().values()) { String blockID = Registries.BLOCK.getId(block).toString(); if (map.get("block").equals(blockID)) { @@ -174,7 +174,7 @@ public class Events { setEntity(pos,world,entity); if (checkBlocks(pos,world,isAboveBlockheight(entity))) { if (entities.containsKey(player)) { - if (!config.sitWhileSeated) return false; + if (!Config.sitWhileSeated) return false; entities.get(player).setRemoved(Entity.RemovalReason.DISCARDED); entities.remove(player); } @@ -197,7 +197,7 @@ public class Events { ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> { ServerPlayerEntity player = handler.player; if (entities.containsKey(player)) { - if (!config.keepActive) { + if (!Config.keepActive) { player.dismountVehicle(); entities.get(player).setRemoved(Entity.RemovalReason.DISCARDED); } diff --git a/src/main/java/one/oth3r/sit/LangReader.java b/src/main/java/one/oth3r/sit/LangReader.java index 0e3cdbd..2f46105 100644 --- a/src/main/java/one/oth3r/sit/LangReader.java +++ b/src/main/java/one/oth3r/sit/LangReader.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import one.oth3r.sit.file.Config; import java.io.InputStream; import java.io.InputStreamReader; @@ -77,10 +78,10 @@ public class LangReader { public static void loadLanguageFile() { try { ClassLoader classLoader = Sit.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream("assets/sit/lang/"+ config.lang+".json"); + InputStream inputStream = classLoader.getResourceAsStream("assets/sit/lang/"+ Config.lang+".json"); if (inputStream == null) { - inputStream = classLoader.getResourceAsStream("assets/sit/lang/"+config.defaults.lang+".json"); - config.lang = config.defaults.lang; + inputStream = classLoader.getResourceAsStream("assets/sit/lang/"+ Config.defaults.lang+".json"); + Config.lang = Config.defaults.lang; } if (inputStream == null) throw new IllegalArgumentException("CANT LOAD THE LANGUAGE FILE. DIRECTIONHUD WILL BREAK."); Type type = new TypeToken>(){}.getType(); diff --git a/src/main/java/one/oth3r/sit/ModMenu.java b/src/main/java/one/oth3r/sit/ModMenu.java index 7283b17..0d45772 100644 --- a/src/main/java/one/oth3r/sit/ModMenu.java +++ b/src/main/java/one/oth3r/sit/ModMenu.java @@ -10,6 +10,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.text.TextColor; import net.minecraft.util.Formatting; +import one.oth3r.sit.file.Config; public class ModMenu implements ModMenuApi { private static MutableText lang(String key) { @@ -20,7 +21,7 @@ public class ModMenu implements ModMenuApi { } @Override public ConfigScreenFactory getModConfigScreenFactory() { - return parent -> YetAnotherConfigLib.createBuilder().save(config::save) + return parent -> YetAnotherConfigLib.createBuilder().save(Config::save) .title(Text.of("Sit!")) .category(ConfigCategory.createBuilder() .name(lang("category.general")) @@ -28,13 +29,13 @@ public class ModMenu implements ModMenuApi { .option(Option.createBuilder() .name(lang("general.keep_active")) .description(OptionDescription.of(lang("general.keep_active.description"))) - .binding(config.defaults.keepActive, () -> config.keepActive, n -> config.keepActive = n) + .binding(Config.defaults.keepActive, () -> Config.keepActive, n -> Config.keepActive = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() .name(lang("general.sit_while_seated")) .description(OptionDescription.of(lang("general.sit_while_seated.description"))) - .binding(config.defaults.sitWhileSeated, () -> config.sitWhileSeated, n -> config.sitWhileSeated = n) + .binding(Config.defaults.sitWhileSeated, () -> Config.sitWhileSeated, n -> Config.sitWhileSeated = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .group(OptionGroup.createBuilder() @@ -42,28 +43,28 @@ public class ModMenu implements ModMenuApi { .description(OptionDescription.of(lang("general.sittable.description"))) .option(Option.createBuilder() .name(lang("general.sittable.stairs")) - .binding(config.defaults.stairsOn, () -> config.stairsOn, n -> config.stairsOn = n) + .binding(Config.defaults.stairsOn, () -> Config.stairsOn, n -> Config.stairsOn = n) .controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter()) .build()) .option(Option.createBuilder() .name(lang("general.sittable.slabs")) - .binding(config.defaults.slabsOn, () -> config.slabsOn, n -> config.slabsOn = n) + .binding(Config.defaults.slabsOn, () -> Config.slabsOn, n -> Config.slabsOn = n) .controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter()) .build()) .option(Option.createBuilder() .name(lang("general.sittable.carpets")) - .binding(config.defaults.carpetsOn, () -> config.carpetsOn, n -> config.carpetsOn = n) + .binding(Config.defaults.carpetsOn, () -> Config.carpetsOn, n -> Config.carpetsOn = n) .controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter()) .build()) .option(Option.createBuilder() .name(lang("general.sittable.full_blocks")) - .binding(config.defaults.fullBlocksOn, () -> config.fullBlocksOn, n -> config.fullBlocksOn = n) + .binding(Config.defaults.fullBlocksOn, () -> Config.fullBlocksOn, n -> Config.fullBlocksOn = n) .controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter()) .build()) .option(Option.createBuilder() .name(lang("general.sittable.custom")) .description(OptionDescription.of(lang("general.sittable.custom.description"))) - .binding(config.defaults.customOn, () -> config.customOn, n -> config.customOn = n) + .binding(Config.defaults.customOn, () -> Config.customOn, n -> Config.customOn = n) .controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter()) .build()) .build()) @@ -86,7 +87,7 @@ public class ModMenu implements ModMenuApi { .append("\n").append(lang("general.sittable_blocks.description_6").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) .append("\n").append(lang("general.sittable_blocks.description_7").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD)))) .append("\n\n").append(lang("general.sittable_blocks.description_8").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.YELLOW)))))) - .binding(config.defaults.customBlocks, () -> config.customBlocks, n -> config.customBlocks = n) + .binding(Config.defaults.customBlocks, () -> Config.customBlocks, n -> Config.customBlocks = n) .controller(StringControllerBuilder::create) .initial("") .build()) @@ -94,14 +95,14 @@ public class ModMenu implements ModMenuApi { .category(ConfigCategory.createBuilder() .name(lang("category.main_hand")) .tooltip(lang("category.main_hand.tooltip")) - .option(Option.createBuilder() + .option(Option.createBuilder() .name(lang("hand.requirements")) .description(OptionDescription.of(lang("hand.requirements.description") .append("\n\n").append(lang("hand.requirements.description_2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) .append("\n").append(lang("hand.requirements.description_3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) .append("\n").append(lang("hand.requirements.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) - .binding(config.defaults.mainReq, () -> config.mainReq, n -> config.mainReq = n) - .controller(opt -> EnumControllerBuilder.create(opt).enumClass(config.HandRequirement.class) + .binding(Config.defaults.mainReq, () -> Config.mainReq, n -> Config.mainReq = n) + .controller(opt -> EnumControllerBuilder.create(opt).enumClass(Config.HandRequirement.class) .formatValue(v -> Text.translatable("config.sit."+v.name().toLowerCase()))) .build()) .group(OptionGroup.createBuilder() @@ -109,18 +110,18 @@ public class ModMenu implements ModMenuApi { .description(OptionDescription.of(lang("hand.restrictions.description"))) .option(Option.createBuilder() .name(lang("hand.restrictions.blocks")) - .binding(config.defaults.mainBlock,()-> config.mainBlock,n -> config.mainBlock = n) + .binding(Config.defaults.mainBlock,()-> Config.mainBlock, n -> Config.mainBlock = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() .name(lang("hand.restrictions.food")) - .binding(config.defaults.mainFood,()-> config.mainFood,n -> config.mainFood = n) + .binding(Config.defaults.mainFood,()-> Config.mainFood, n -> Config.mainFood = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() .name(lang("hand.restrictions.usable")) .description(OptionDescription.of(lang("hand.restrictions.usable.description"))) - .binding(config.defaults.mainUsable,()-> config.mainUsable,n -> config.mainUsable = n) + .binding(Config.defaults.mainUsable,()-> Config.mainUsable, n -> Config.mainUsable = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .build()) @@ -129,7 +130,7 @@ public class ModMenu implements ModMenuApi { .description(OptionDescription.of(lang("hand.whitelist.description") .append("\n\n").append(lang("hand.list.description")) .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) - .binding(config.defaults.mainWhitelist, () -> config.mainWhitelist, n -> config.mainWhitelist = n) + .binding(Config.defaults.mainWhitelist, () -> Config.mainWhitelist, n -> Config.mainWhitelist = n) .controller(StringControllerBuilder::create) .initial("") .build()) @@ -138,7 +139,7 @@ public class ModMenu implements ModMenuApi { .description(OptionDescription.of(lang("hand.blacklist.description") .append("\n\n").append(lang("hand.list.description")) .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) - .binding(config.defaults.mainBlacklist, () -> config.mainBlacklist, n -> config.mainBlacklist = n) + .binding(Config.defaults.mainBlacklist, () -> Config.mainBlacklist, n -> Config.mainBlacklist = n) .controller(StringControllerBuilder::create) .initial("") .build()) @@ -146,14 +147,14 @@ public class ModMenu implements ModMenuApi { .category(ConfigCategory.createBuilder() .name(lang("category.off_hand")) .tooltip(lang("category.off_hand.tooltip")) - .option(Option.createBuilder() + .option(Option.createBuilder() .name(lang("hand.requirements")) .description(OptionDescription.of(lang("hand.requirements.description") .append("\n\n").append(lang("hand.requirements.description_2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA)))) .append("\n").append(lang("hand.requirements.description_3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))) .append("\n").append(lang("hand.requirements.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED)))))) - .binding(config.defaults.offReq, () -> config.offReq, n -> config.offReq = n) - .controller(opt -> EnumControllerBuilder.create(opt).enumClass(config.HandRequirement.class) + .binding(Config.defaults.offReq, () -> Config.offReq, n -> Config.offReq = n) + .controller(opt -> EnumControllerBuilder.create(opt).enumClass(Config.HandRequirement.class) .formatValue(v -> Text.translatable("config.sit."+v.name().toLowerCase()))) .build()) .group(OptionGroup.createBuilder() @@ -161,18 +162,18 @@ public class ModMenu implements ModMenuApi { .description(OptionDescription.of(lang("hand.restrictions.description"))) .option(Option.createBuilder() .name(lang("hand.restrictions.blocks")) - .binding(config.defaults.offBlock,()-> config.offBlock,n -> config.offBlock = n) + .binding(Config.defaults.offBlock,()-> Config.offBlock, n -> Config.offBlock = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() .name(lang("hand.restrictions.food")) - .binding(config.defaults.offFood,()-> config.offFood,n -> config.offFood = n) + .binding(Config.defaults.offFood,()-> Config.offFood, n -> Config.offFood = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .option(Option.createBuilder() .name(lang("hand.restrictions.usable")) .description(OptionDescription.of(lang("hand.restrictions.usable.description"))) - .binding(config.defaults.offUsable,()-> config.offUsable,n -> config.offUsable = n) + .binding(Config.defaults.offUsable,()-> Config.offUsable, n -> Config.offUsable = n) .controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter()) .build()) .build()) @@ -181,7 +182,7 @@ public class ModMenu implements ModMenuApi { .description(OptionDescription.of(lang("hand.whitelist.description") .append("\n\n").append(lang("hand.list.description")) .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) - .binding(config.defaults.offWhitelist, () -> config.offWhitelist, n -> config.offWhitelist = n) + .binding(Config.defaults.offWhitelist, () -> Config.offWhitelist, n -> Config.offWhitelist = n) .controller(StringControllerBuilder::create) .initial("") .build()) @@ -190,7 +191,7 @@ public class ModMenu implements ModMenuApi { .description(OptionDescription.of(lang("hand.blacklist.description") .append("\n\n").append(lang("hand.list.description")) .append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))) - .binding(config.defaults.offBlacklist, () -> config.offBlacklist, n -> config.offBlacklist = n) + .binding(Config.defaults.offBlacklist, () -> Config.offBlacklist, n -> Config.offBlacklist = n) .controller(StringControllerBuilder::create) .initial("") .build()) diff --git a/src/main/java/one/oth3r/sit/Sit.java b/src/main/java/one/oth3r/sit/Sit.java index 08abcc9..1300989 100644 --- a/src/main/java/one/oth3r/sit/Sit.java +++ b/src/main/java/one/oth3r/sit/Sit.java @@ -14,12 +14,11 @@ import net.minecraft.server.command.CommandManager; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import one.oth3r.sit.file.Config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Type; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; import java.util.HashMap; public class Sit implements ModInitializer { @@ -36,7 +35,7 @@ public class Sit implements ModInitializer { //todo future: // make it so it updates the sitting height and pos based on the block so if it changed while offline it still works (or if stair changes shape) // inner stair offset & custom support for that ig - config.load(); + Config.load(); Events.register(); //PACKETS ServerPlayNetworking.registerGlobalReceiver(PacketBuilder.getIdentifier(), diff --git a/src/main/java/one/oth3r/sit/SitCommand.java b/src/main/java/one/oth3r/sit/SitCommand.java index 281cd94..d641d30 100644 --- a/src/main/java/one/oth3r/sit/SitCommand.java +++ b/src/main/java/one/oth3r/sit/SitCommand.java @@ -13,6 +13,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.TextColor; import net.minecraft.util.Formatting; import net.minecraft.util.math.BlockPos; +import one.oth3r.sit.file.Config; import java.util.concurrent.CompletableFuture; @@ -45,7 +46,7 @@ public class SitCommand { // if console if (player == null) { if (args[0].equalsIgnoreCase("reload")) { - config.load(); + Config.load(); Sit.LOGGER.info(Sit.lang("key.sit.command.reloaded").getString()); } return 1; @@ -62,7 +63,7 @@ public class SitCommand { Events.sit(player,pos); } if (args[0].equalsIgnoreCase("reload")) { - config.load(); + Config.load(); player.sendMessage(Sit.lang("key.sit.command.reloaded").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN)))); } if (args[0].equalsIgnoreCase("purgeChairEntities")) { diff --git a/src/main/java/one/oth3r/sit/config.java b/src/main/java/one/oth3r/sit/file/Config.java similarity index 99% rename from src/main/java/one/oth3r/sit/config.java rename to src/main/java/one/oth3r/sit/file/Config.java index 7e52df9..5979ae9 100644 --- a/src/main/java/one/oth3r/sit/config.java +++ b/src/main/java/one/oth3r/sit/file/Config.java @@ -1,4 +1,4 @@ -package one.oth3r.sit; +package one.oth3r.sit.file; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -14,7 +14,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Properties; -public class config { +public class Config { public static String lang = defaults.lang; public static boolean keepActive = defaults.keepActive; public static boolean sitWhileSeated = defaults.sitWhileSeated; From eaef4515a3c526aa3f73858d90a7814e853ae32c Mon Sep 17 00:00:00 2001 From: Oth3r Date: Thu, 4 Apr 2024 21:46:02 -0500 Subject: [PATCH 13/17] more stable config loading, and a custom block validator --- src/main/java/one/oth3r/sit/file/Config.java | 83 ++++++++++++++------ 1 file changed, 60 insertions(+), 23 deletions(-) diff --git a/src/main/java/one/oth3r/sit/file/Config.java b/src/main/java/one/oth3r/sit/file/Config.java index 5979ae9..0910817 100644 --- a/src/main/java/one/oth3r/sit/file/Config.java +++ b/src/main/java/one/oth3r/sit/file/Config.java @@ -2,8 +2,13 @@ package one.oth3r.sit.file; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; import net.fabricmc.loader.api.FabricLoader; +import one.oth3r.sit.LangReader; +import one.oth3r.sit.Sit; +import one.oth3r.sit.SitClient; +import one.oth3r.sit.Utl.*; import java.io.File; import java.io.FileInputStream; @@ -24,7 +29,7 @@ public class Config { public static boolean fullBlocksOn = defaults.fullBlocksOn; public static boolean customOn = defaults.customOn; public static List customBlocks = defaults.customBlocks; - enum HandRequirement { + public enum HandRequirement { empty, restrictive, none; @@ -62,17 +67,35 @@ public class Config { Properties properties = new Properties(); properties.load(fileStream); String ver = (String) properties.computeIfAbsent("version", a -> String.valueOf(defaults.version)); - // if the old version system (v1.0) remove "v: + + // if the old version system (v1.0) remove "v" if (ver.contains("v")) ver = ver.substring(1); + loadVersion(properties,Double.parseDouble(ver)); LangReader.loadLanguageFile(); + save(); - } catch (Exception f) { + } catch (Exception e) { //read fail - f.printStackTrace(); + e.printStackTrace(); save(); } } + public static ArrayList validateCustomBlocks(ArrayList fix) { + ArrayList out = new ArrayList<>(); + for (String entry : fix) { + String[] split = entry.split("\\|"); + // skip if not the right size + if (split.length < 3 || split.length > 4) continue; + // keep going if that block exists +// if (Registries.BLOCK.stream().anyMatch(match -> Registries.BLOCK.getId(match).toString().equals(split[0]))) {} + // if the other entries aren't correct, skip + if (!Num.isFloat(split[1]) || !Num.isInt(split[2])) continue; + // add if everything is a okay + out.add(entry); + } + return out; + } public static void loadVersion(Properties properties, double version) { try { Gson gson = new GsonBuilder().disableHtmlEscaping().create(); @@ -86,17 +109,23 @@ public class Config { carpetsOn = Boolean.parseBoolean((String) properties.computeIfAbsent("carpets", a -> String.valueOf(defaults.carpetsOn))); fullBlocksOn = Boolean.parseBoolean((String) properties.computeIfAbsent("full-blocks", a -> String.valueOf(defaults.fullBlocksOn))); customOn = Boolean.parseBoolean((String) properties.computeIfAbsent("custom", a -> String.valueOf(defaults.customOn))); - customBlocks = new Gson().fromJson((String) - properties.computeIfAbsent("custom-blocks", a -> gson.toJson(defaults.customBlocks)), listType); - mainReq = HandRequirement.valueOf((String) properties.computeIfAbsent("hand.main.requirement", a -> String.valueOf(defaults.mainReq))); + try { + customBlocks = validateCustomBlocks(new Gson().fromJson((String) + properties.computeIfAbsent("custom-blocks", a -> gson.toJson(defaults.customBlocks)), listType)); + } catch (JsonSyntaxException ignore) {} + mainReq = HandRequirement.get((String) properties.computeIfAbsent("hand.main.requirement", a -> String.valueOf(defaults.mainReq))); mainBlock = Boolean.parseBoolean((String) properties.computeIfAbsent("hand.main.block", a -> String.valueOf(defaults.mainBlock))); mainFood = Boolean.parseBoolean((String) properties.computeIfAbsent("hand.main.food", a -> String.valueOf(defaults.mainFood))); mainUsable = Boolean.parseBoolean((String) properties.computeIfAbsent("hand.main.usable", a -> String.valueOf(defaults.mainUsable))); - mainWhitelist = new Gson().fromJson((String) - properties.computeIfAbsent("hand.main.whitelist", a -> gson.toJson(defaults.mainWhitelist)), listType); - mainBlacklist = new Gson().fromJson((String) - properties.computeIfAbsent("hand.main.blacklist", a -> gson.toJson(defaults.mainBlacklist)), listType); - offReq = HandRequirement.valueOf((String) properties.computeIfAbsent("hand.off.requirement", a -> String.valueOf(defaults.offReq))); + try { + mainWhitelist = new Gson().fromJson((String) + properties.computeIfAbsent("hand.main.whitelist", a -> gson.toJson(defaults.mainWhitelist)), listType); + } catch (JsonSyntaxException ignore) {} + try { + mainBlacklist = new Gson().fromJson((String) + properties.computeIfAbsent("hand.main.blacklist", a -> gson.toJson(defaults.mainBlacklist)), listType); + } catch (JsonSyntaxException ignore) {} + offReq = HandRequirement.get((String) properties.computeIfAbsent("hand.off.requirement", a -> String.valueOf(defaults.offReq))); offBlock = Boolean.parseBoolean((String) properties.computeIfAbsent("hand.off.block", a -> String.valueOf(defaults.offBlock))); offFood = Boolean.parseBoolean((String) properties.computeIfAbsent("hand.off.food", a -> String.valueOf(defaults.offFood))); offUsable = Boolean.parseBoolean((String) properties.computeIfAbsent("hand.off.usable", a -> String.valueOf(defaults.offUsable))); @@ -105,22 +134,30 @@ public class Config { offBlacklist = new Gson().fromJson((String) properties.computeIfAbsent("hand.off.blacklist", a -> gson.toJson(defaults.offBlacklist)), listType); if (version == 1.0) { - mainReq = HandRequirement.valueOf((String) properties.computeIfAbsent("main-hand-requirement", a -> String.valueOf(defaults.mainReq))); + mainReq = HandRequirement.get((String) properties.computeIfAbsent("main-hand-requirement", a -> String.valueOf(defaults.mainReq))); mainBlock = Boolean.parseBoolean((String) properties.computeIfAbsent("main-hand-block", a -> String.valueOf(defaults.mainBlock))); mainFood = Boolean.parseBoolean((String) properties.computeIfAbsent("main-hand-food", a -> String.valueOf(defaults.mainFood))); mainUsable = Boolean.parseBoolean((String) properties.computeIfAbsent("main-hand-usable", a -> String.valueOf(defaults.mainUsable))); - mainWhitelist = new Gson().fromJson((String) - properties.computeIfAbsent("main-hand-whitelist", a -> gson.toJson(defaults.mainWhitelist)), listType); - mainBlacklist = new Gson().fromJson((String) - properties.computeIfAbsent("main-hand-blacklist", a -> gson.toJson(defaults.mainBlacklist)), listType); - offReq = HandRequirement.valueOf((String) properties.computeIfAbsent("off-hand-requirement", a -> String.valueOf(defaults.offReq))); + try { + mainWhitelist = new Gson().fromJson((String) + properties.computeIfAbsent("main-hand-whitelist", a -> gson.toJson(defaults.mainWhitelist)), listType); + } catch (JsonSyntaxException ignore) {} + try { + mainBlacklist = new Gson().fromJson((String) + properties.computeIfAbsent("main-hand-blacklist", a -> gson.toJson(defaults.mainBlacklist)), listType); + } catch (JsonSyntaxException ignore) {} + offReq = HandRequirement.get((String) properties.computeIfAbsent("off-hand-requirement", a -> String.valueOf(defaults.offReq))); offBlock = Boolean.parseBoolean((String) properties.computeIfAbsent("off-hand-block", a -> String.valueOf(defaults.offBlock))); offFood = Boolean.parseBoolean((String) properties.computeIfAbsent("off-hand-food", a -> String.valueOf(defaults.offFood))); offUsable = Boolean.parseBoolean((String) properties.computeIfAbsent("off-hand-usable", a -> String.valueOf(defaults.offUsable))); - offWhitelist = new Gson().fromJson((String) - properties.computeIfAbsent("off-hand-whitelist", a -> gson.toJson(defaults.offWhitelist)), listType); - offBlacklist = new Gson().fromJson((String) - properties.computeIfAbsent("off-hand-blacklist", a -> gson.toJson(defaults.offBlacklist)), listType); + try { + offWhitelist = new Gson().fromJson((String) + properties.computeIfAbsent("off-hand-whitelist", a -> gson.toJson(defaults.offWhitelist)), listType); + } catch (JsonSyntaxException ignore) {} + try { + offBlacklist = new Gson().fromJson((String) + properties.computeIfAbsent("off-hand-blacklist", a -> gson.toJson(defaults.offBlacklist)), listType); + } catch (JsonSyntaxException ignore) {} } } catch (Exception e) { Sit.LOGGER.info("ERROR LOADING CONFIG - PLEASE REPORT WITH THE ERROR LOG"); @@ -191,7 +228,7 @@ public class Config { public static boolean carpetsOn = true; public static boolean fullBlocksOn = false; public static boolean customOn = false; - public static List customBlocks = List.of("minecraft:campfire|.46|1|lit=false","minecraft:soul_campfire|.46|1|lit=false"); + public static List customBlocks = List.of("minecraft:campfire|.46|1|lit=false","minecraft:soul_campfire|.46|1|lit=false,waterlogged=false"); public static HandRequirement mainReq = HandRequirement.empty; public static boolean mainBlock = false; public static boolean mainFood = false; From 28616a1974567c7b9a7903b98a8bee0f2064281f Mon Sep 17 00:00:00 2001 From: Oth3r Date: Thu, 4 Apr 2024 21:47:57 -0500 Subject: [PATCH 14/17] move utils to Utl.HandSettings --- src/main/java/one/oth3r/sit/Events.java | 25 +++---- src/main/java/one/oth3r/sit/Sit.java | 3 - src/main/java/one/oth3r/sit/SitClient.java | 2 +- src/main/java/one/oth3r/sit/Utl.java | 83 ++++++++++++++-------- 4 files changed, 68 insertions(+), 45 deletions(-) diff --git a/src/main/java/one/oth3r/sit/Events.java b/src/main/java/one/oth3r/sit/Events.java index 51e329f..61a4c39 100644 --- a/src/main/java/one/oth3r/sit/Events.java +++ b/src/main/java/one/oth3r/sit/Events.java @@ -23,7 +23,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import one.oth3r.sit.Utl.HandType; +import one.oth3r.sit.Utl.HandSettings.HandType; +import one.oth3r.sit.file.Config; import java.util.*; @@ -38,25 +39,25 @@ public class Events { ArrayList notUsable = new ArrayList<>(food); notUsable.add(UseAction.NONE); HashMap itemMap = new HashMap<>(); - itemMap.put(HandType.main,player.getMainHandStack()); - itemMap.put(HandType.off,player.getOffHandStack()); + itemMap.put(Utl.HandSettings.HandType.main,player.getMainHandStack()); + itemMap.put(Utl.HandSettings.HandType.off,player.getOffHandStack()); // if sneaking cant sit if (player.isSneaking()) return false; // for both hands - for (HandType type:HandType.values()) { + for (HandType type: Utl.HandSettings.HandType.values()) { ItemStack targetStack = itemMap.get(type); // if req is empty and the item isn't empty, false - if (Utl.getReq(player,type).equals(config.HandRequirement.empty) && !targetStack.isEmpty()) return false; + if (Utl.HandSettings.getReq(player,type).equals(Config.HandRequirement.empty) && !targetStack.isEmpty()) return false; // if req is restrictive - if (Utl.getReq(player,type).equals(config.HandRequirement.restrictive)) { + if (Utl.HandSettings.getReq(player,type).equals(Config.HandRequirement.restrictive)) { // if item is in blacklist, false - if (checkList(Utl.getList(player,type,"blacklist"),targetStack)) return false; + if (checkList(Utl.HandSettings.getList(player,type,"blacklist"),targetStack)) return false; // if item is NOT in whitelist - if (!checkList(Utl.getList(player,type,"whitelist"),targetStack)) { + if (!checkList(Utl.HandSettings.getList(player,type,"whitelist"),targetStack)) { // if block is restricted and items is block, false, ect - if (Utl.getBool(player,type,"block") && (targetStack.getItem() instanceof BlockItem)) return false; - if (Utl.getBool(player,type,"food") && food.contains(targetStack.getUseAction())) return false; - if (Utl.getBool(player,type,"usable") && !notUsable.contains(targetStack.getUseAction())) return false; + if (Utl.HandSettings.getBool(player,type,"block") && (targetStack.getItem() instanceof BlockItem)) return false; + if (Utl.HandSettings.getBool(player,type,"food") && food.contains(targetStack.getUseAction())) return false; + if (Utl.HandSettings.getBool(player,type,"usable") && !notUsable.contains(targetStack.getUseAction())) return false; } } } @@ -192,7 +193,7 @@ public class Events { ServerPlayerEntity player = handler.player; checkPlayers.put(player,2); // put server settings in the player settings - Sit.playerSettings.put(player,Utl.getHandSettings()); + Sit.playerSettings.put(player, Utl.HandSettings.getHandSettings()); }); ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> { ServerPlayerEntity player = handler.player; diff --git a/src/main/java/one/oth3r/sit/Sit.java b/src/main/java/one/oth3r/sit/Sit.java index 1300989..8b1f44a 100644 --- a/src/main/java/one/oth3r/sit/Sit.java +++ b/src/main/java/one/oth3r/sit/Sit.java @@ -3,12 +3,9 @@ package one.oth3r.sit; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; -import io.netty.buffer.ByteBuf; -import io.netty.util.ReferenceCountUtil; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.network.PacketByteBuf; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.server.network.ServerPlayerEntity; diff --git a/src/main/java/one/oth3r/sit/SitClient.java b/src/main/java/one/oth3r/sit/SitClient.java index 2a1d2e1..d8285fb 100644 --- a/src/main/java/one/oth3r/sit/SitClient.java +++ b/src/main/java/one/oth3r/sit/SitClient.java @@ -20,6 +20,6 @@ public class SitClient implements ClientModInitializer { } public static void sendPackets() { Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - new PacketBuilder(gson.toJson(Utl.getHandSettings())).send(); + new PacketBuilder(gson.toJson(Utl.HandSettings.getHandSettings())).send(); } } diff --git a/src/main/java/one/oth3r/sit/Utl.java b/src/main/java/one/oth3r/sit/Utl.java index 3045ec1..ed69d96 100644 --- a/src/main/java/one/oth3r/sit/Utl.java +++ b/src/main/java/one/oth3r/sit/Utl.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import net.minecraft.server.network.ServerPlayerEntity; +import one.oth3r.sit.file.Config; import java.lang.reflect.Type; import java.util.ArrayList; @@ -11,35 +12,59 @@ import java.util.HashMap; import java.util.List; public class Utl { - enum HandType { - main, - off + public static class HandSettings { + public static HashMap getHandSettings() { + Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + HashMap settings = new HashMap<>(); + settings.put("hand.main.requirement",String.valueOf(Config.mainReq)); + settings.put("hand.main.block",String.valueOf(Config.mainBlock)); + settings.put("hand.main.food",String.valueOf(Config.mainFood)); + settings.put("hand.main.usable",String.valueOf(Config.mainUsable)); + settings.put("hand.main.whitelist",gson.toJson(Config.mainWhitelist)); + settings.put("hand.main.blacklist",gson.toJson(Config.mainBlacklist)); + settings.put("hand.off.requirement",String.valueOf(Config.offReq)); + settings.put("hand.off.block",String.valueOf(Config.offBlock)); + settings.put("hand.off.food",String.valueOf(Config.offFood)); + settings.put("hand.off.usable",String.valueOf(Config.offUsable)); + settings.put("hand.off.whitelist",gson.toJson(Config.offWhitelist)); + settings.put("hand.off.blacklist",gson.toJson(Config.offBlacklist)); + return settings; + } + + public static Config.HandRequirement getReq(ServerPlayerEntity player, HandType type) { + return Config.HandRequirement.get(Sit.playerSettings.get(player).get("hand."+type+".requirement")); + } + + public static List getList(ServerPlayerEntity player, HandType type, String setting) { + Type listType = new TypeToken>() {}.getType(); + return new Gson().fromJson(Sit.playerSettings.get(player).get("hand."+type+"."+setting),listType); + } + + public static boolean getBool(ServerPlayerEntity player, HandType type, String setting) { + return Boolean.parseBoolean(Sit.playerSettings.get(player).get("hand."+type+"."+setting)); + } + + public enum HandType { + main, + off + } } - public static HashMap getHandSettings() { - Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - HashMap settings = new HashMap<>(); - settings.put("hand.main.requirement",String.valueOf(config.mainReq)); - settings.put("hand.main.block",String.valueOf(config.mainBlock)); - settings.put("hand.main.food",String.valueOf(config.mainFood)); - settings.put("hand.main.usable",String.valueOf(config.mainUsable)); - settings.put("hand.main.whitelist",gson.toJson(config.mainWhitelist)); - settings.put("hand.main.blacklist",gson.toJson(config.mainBlacklist)); - settings.put("hand.off.requirement",String.valueOf(config.offReq)); - settings.put("hand.off.block",String.valueOf(config.offBlock)); - settings.put("hand.off.food",String.valueOf(config.offFood)); - settings.put("hand.off.usable",String.valueOf(config.offUsable)); - settings.put("hand.off.whitelist",gson.toJson(config.offWhitelist)); - settings.put("hand.off.blacklist",gson.toJson(config.offBlacklist)); - return settings; - } - public static config.HandRequirement getReq(ServerPlayerEntity player, HandType type) { - return config.HandRequirement.get(Sit.playerSettings.get(player).get("hand."+type+".requirement")); - } - public static List getList(ServerPlayerEntity player, HandType type, String setting) { - Type listType = new TypeToken>() {}.getType(); - return new Gson().fromJson(Sit.playerSettings.get(player).get("hand."+type+"."+setting),listType); - } - public static boolean getBool(ServerPlayerEntity player, HandType type, String setting) { - return Boolean.parseBoolean(Sit.playerSettings.get(player).get("hand."+type+"."+setting)); + public static class Num { + public static boolean isInt(String string) { + try { + Integer.parseInt(string); + } catch (NumberFormatException nfe) { + return false; + } + return true; + } + public static boolean isFloat(String string) { + try { + Float.parseFloat(string); + } catch (NumberFormatException nfe) { + return false; + } + return true; + } } } From 02dd4e868c4448e3c3b758b7284accfa5aa46057 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Thu, 4 Apr 2024 21:48:04 -0500 Subject: [PATCH 15/17] YACL update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0d0acaf..f19a333 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,4 +16,4 @@ archives_base_name=sit! # Dependencies fabric_version=0.91.1+1.20.4 modmenu_version=9.0.0 -yacl_version=3.3.1+1.20.4 +yacl_version=3.3.2+1.20.4 From 890216a19acea1ff427101873f1ca2de4f7e0bc6 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Thu, 4 Apr 2024 21:53:06 -0500 Subject: [PATCH 16/17] fix ModMenu error if YACL isn't installed --- src/main/java/one/oth3r/sit/ModMenu.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/one/oth3r/sit/ModMenu.java b/src/main/java/one/oth3r/sit/ModMenu.java index 0d45772..bba82ea 100644 --- a/src/main/java/one/oth3r/sit/ModMenu.java +++ b/src/main/java/one/oth3r/sit/ModMenu.java @@ -21,6 +21,8 @@ public class ModMenu implements ModMenuApi { } @Override public ConfigScreenFactory getModConfigScreenFactory() { + // return null if YACL isn't installed to not throw an error + if (!yaclCheck()) return screen -> null; return parent -> YetAnotherConfigLib.createBuilder().save(Config::save) .title(Text.of("Sit!")) .category(ConfigCategory.createBuilder() @@ -198,4 +200,17 @@ public class ModMenu implements ModMenuApi { .build()) .build().generateScreen(parent); } + + /** + * check if YACL is installed by getting a class and seeing if it throws + * @return if YACL is installed + */ + public static boolean yaclCheck() { + try { + Class.forName("dev.isxander.yacl3.platform.fabric.YACLPlatformImpl"); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } } From 40d55a1ca332ac10f5ccc13e4a2895029c98b8a6 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Thu, 4 Apr 2024 22:02:46 -0500 Subject: [PATCH 17/17] v1.1.4 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f19a333..8b56f95 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.20.4+build.1 loader_version=0.15.0 # Mod Properties -mod_version=1.1.3+1.20.2-1.20.4 +mod_version=1.1.4+1.20.2-1.20.4 maven_group=one.oth3r archives_base_name=sit!