Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.

1.21.5 port

+159 -130
+5 -4
common/src/main/java/net/lerariemann/infinity/block/custom/InfinityPortalBlock.java
··· 18 18 import net.minecraft.block.*; 19 19 import net.minecraft.block.entity.BlockEntity; 20 20 import net.minecraft.entity.Entity; 21 + import net.minecraft.entity.EntityCollisionHandler; 21 22 import net.minecraft.entity.ItemEntity; 22 23 import net.minecraft.entity.SpawnReason; 23 24 import net.minecraft.entity.player.PlayerEntity; ··· 117 118 @Environment(EnvType.CLIENT) @Override 118 119 public void randomDisplayTick(BlockState state, World world, BlockPos pos, net.minecraft.util.math.random.Random random) { 119 120 if (random.nextInt(100) == 0) { 120 - world.playSound((double)pos.getX() + 0.5, (double)pos.getY() + 0.5, (double)pos.getZ() + 0.5, SoundEvents.BLOCK_BEACON_AMBIENT, SoundCategory.BLOCKS, 1.0F, random.nextFloat() * 0.4F + 0.8F, false); 121 + world.playSound(null, (double)pos.getX() + 0.5, (double)pos.getY() + 0.5, (double)pos.getZ() + 0.5, SoundEvents.BLOCK_BEACON_AMBIENT, SoundCategory.BLOCKS, 1.0F, random.nextFloat() * 0.4F + 0.8F); 121 122 } 122 123 123 124 for(int i = 0; i < 4; ++i) { ··· 145 146 eff = new DustParticleEffect(colorInt, 1.0f); 146 147 } 147 148 148 - world.addParticle(eff, d, e, f, g, h, j); 149 + world.addParticleClient(eff, d, e, f, g, h, j); 149 150 } 150 151 } 151 152 ··· 153 154 * Adds logic for portal-based recipes. 154 155 */ 155 156 @Override 156 - public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity) { 157 + public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity, EntityCollisionHandler handler) { 157 158 AtomicBoolean bl = new AtomicBoolean(false); 158 159 if (w instanceof ServerWorld world 159 160 && world.getBlockEntity(pos) instanceof InfinityPortalBlockEntity ipbe) { ··· 189 190 } 190 191 } 191 192 } 192 - if (!bl.get()) super.onEntityCollision(state, w, pos, entity); 193 + if (!bl.get()) super.onEntityCollision(state, w, pos, entity, handler); 193 194 } 194 195 /** 195 196 * Spawns chaos pawns in the portal.
+1 -1
common/src/main/java/net/lerariemann/infinity/block/custom/NotesBlock.java
··· 106 106 if (noteBlockInstrument.canBePitched()) { 107 107 int i = world.random.nextInt(24); 108 108 f = NoteBlock.getNotePitch(i); 109 - world.addParticle(ParticleTypes.NOTE, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, i / 24.0, 0.0F, 0.0F); 109 + world.addParticleClient(ParticleTypes.NOTE, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, i / 24.0, 0.0F, 0.0F); 110 110 } else { 111 111 f = 1.0F; 112 112 }
+2 -1
common/src/main/java/net/lerariemann/infinity/block/entity/BiomeBottleBlockEntity.java
··· 8 8 import net.minecraft.block.BlockState; 9 9 import net.minecraft.block.entity.BlockEntity; 10 10 import net.minecraft.component.ComponentMap; 11 + import net.minecraft.component.ComponentsAccess; 11 12 import net.minecraft.item.ItemStack; 12 13 import net.minecraft.nbt.NbtCompound; 13 14 import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; ··· 83 84 } 84 85 85 86 @Override 86 - protected void readComponents(BlockEntity.ComponentsAccess components) { 87 + protected void readComponents(ComponentsAccess components) { 87 88 super.readComponents(components); 88 89 this.biome = components.getOrDefault(ModComponentTypes.BIOME_CONTENTS.get(), BiomeBottleBlock.defaultBiome()); 89 90 this.color = components.getOrDefault(ModComponentTypes.COLOR.get(), 0xFFFFFF);
+5 -4
common/src/main/java/net/lerariemann/infinity/block/entity/ChromaticBlockEntity.java
··· 9 9 import net.minecraft.block.BlockState; 10 10 import net.minecraft.block.entity.BlockEntity; 11 11 import net.minecraft.component.ComponentMap; 12 + import net.minecraft.component.ComponentsAccess; 12 13 import net.minecraft.item.DyeItem; 13 14 import net.minecraft.item.ItemStack; 14 15 import net.minecraft.item.Items; ··· 79 80 componentMapBuilder.add(ModComponentTypes.COLOR.get(), color); 80 81 } 81 82 @Override 82 - protected void readComponents(BlockEntity.ComponentsAccess components) { 83 + protected void readComponents(ComponentsAccess components) { 83 84 super.readComponents(components); 84 85 setColor(components.getOrDefault(ModComponentTypes.COLOR.get(), 0xFFFFFF)); 85 86 } ··· 160 161 @Override 161 162 public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) { 162 163 super.readNbt(nbt, registryLookup); 163 - if (nbt.getType("color") == NbtElement.INT_TYPE) 164 - setColor(nbt.getInt("color")); 165 - else if (nbt.getType("color") == NbtElement.COMPOUND_TYPE) { 164 + if (nbt.get("color").getType() == NbtElement.INT_TYPE) 165 + setColor(nbt.getInt("color").get()); 166 + else if (nbt.get("color").getType() == NbtElement.COMPOUND_TYPE) { 166 167 NbtCompound color = NbtUtils.getCompound(nbt, "color"); 167 168 hue = NbtUtils.getShort(color, "h"); 168 169 saturation = NbtUtils.getShort(color, "s");
+2 -2
common/src/main/java/net/lerariemann/infinity/block/entity/InfinityPortalBlockEntity.java
··· 154 154 155 155 public void readNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { 156 156 super.readNbt(tag, registryLookup); 157 - if (tag.getType("Dimension") == NbtElement.NUMBER_TYPE) { //conversion from legacy formats 157 + if (tag.get("Dimension").getType() == NbtElement.INT_TYPE) { //conversion from legacy formats 158 158 this.portalColor = NbtUtils.getInt(tag, "Dimension") & 0xFFFFFF; 159 159 if (tag.contains("DimensionName")) { 160 160 this.dimension = Identifier.of(NbtUtils.getString(tag, "DimensionName")); 161 161 } 162 162 else this.dimension = InfinityMethods.getDimId(this.portalColor); 163 163 } 164 - else if (tag.getType("Dimension") == NbtElement.STRING_TYPE) { //new better format 164 + else if (tag.get("Dimension").getType() == NbtElement.STRING_TYPE) { //new better format 165 165 this.dimension = Identifier.of(NbtUtils.getString(tag, "Dimension")); 166 166 this.portalColor = NbtUtils.getInt(tag, "Color", (world instanceof ServerWorld serverWorld ? PortalColorApplier.of(dimension, serverWorld.getServer()) : 167 167 PortalColorApplier.of(dimension, new NbtCompound())).apply(pos) & 0xFFFFFF);
+3 -3
common/src/main/java/net/lerariemann/infinity/compat/cloth/AmendmentConfigFactory.java
··· 113 113 114 114 static void amendmentSetter(String name, String newValue, int amendmentIndex) { 115 115 NbtCompound elements = readNbt(configPath()+("/amendments.json")); 116 - NbtCompound amendment = elements.getList("elements", 10).getCompound(amendmentIndex); 116 + NbtCompound amendment = elements.getList("elements").get().getCompound(amendmentIndex).get(); 117 117 // Check if an amendment should be changed before writing 118 118 if (!Objects.equals(NbtUtils.getString(amendment, name), newValue)) { 119 119 amendment.putString(name, newValue); ··· 123 123 124 124 static void amendmentSetter(String name, Double newValue, int amendmentIndex) { 125 125 NbtCompound elements = readNbt(configPath()+("/amendments.json")); 126 - NbtCompound amendment = elements.getList("elements", 10).getCompound(amendmentIndex); 126 + NbtCompound amendment = elements.getList("elements").get().getCompound(amendmentIndex).get(); 127 127 // Check if an amendment should be changed before writing 128 128 if (NbtUtils.getDouble(amendment, name) != newValue) { 129 129 amendment.putDouble(name, newValue); ··· 135 135 if (Objects.equals(newValue.getLast(), "")) 136 136 newValue.removeLast(); 137 137 NbtCompound elements = readNbt(configPath()+("/amendments.json")); 138 - NbtCompound amendment = elements.getList("elements", NbtElement.COMPOUND_TYPE).getCompound(amendmentIndex); 138 + NbtCompound amendment = elements.getList("elements").get().getCompound(amendmentIndex).get(); 139 139 // TODO Check if an amendment should be changed before writing 140 140 amendment.put(name, convertNbtList(newValue)); 141 141 CommonIO.write(elements, configPath(), "amendments.json");
+1 -1
common/src/main/java/net/lerariemann/infinity/compat/cloth/ClothConfigFactory.java
··· 339 339 */ 340 340 public static NbtCompound readNbt(String file) { 341 341 try { 342 - return StringNbtReader.parse(readConfig(file)); 342 + return StringNbtReader.readCompound(readConfig(file)); 343 343 } catch (CommandSyntaxException e) { 344 344 throw new RuntimeException(e); 345 345 }
+2 -2
common/src/main/java/net/lerariemann/infinity/compat/cloth/EasterConfigFactory.java
··· 51 51 } 52 52 // If a dimension should be disabled... 53 53 else { 54 - if (!rootConfig.getList("disabledDimensions", 8).contains(NbtString.of(name))) { 54 + if (!rootConfig.getList("disabledDimensions").get().contains(NbtString.of(name))) { 55 55 // remove it from the list of disabled dimensions. 56 - rootConfig.getList("disabledDimensions", 8).add(NbtString.of(name)); 56 + rootConfig.getList("disabledDimensions").get().add(NbtString.of(name)); 57 57 58 58 CommonIO.write(rootConfig, configPath(), "infinity.json"); 59 59 }
+4 -3
common/src/main/java/net/lerariemann/infinity/compat/eiv/iridescence_crafting/IridescenceCraftingServerRecipe.java
··· 4 4 import de.crafty.eiv.common.api.recipe.IEivServerRecipe; 5 5 import de.crafty.eiv.common.recipe.util.EivTagUtil; 6 6 import net.lerariemann.infinity.util.InfinityMethods; 7 + import net.lerariemann.infinity.util.core.NbtUtils; 7 8 import net.minecraft.item.ItemStack; 8 9 import net.minecraft.nbt.NbtCompound; 9 10 import net.minecraft.nbt.NbtString; ··· 47 48 48 49 @Override 49 50 public void loadFromTag(NbtCompound tag) { 50 - this.input = EivTagUtil.readIngredient(tag.getCompound("ingredient")); 51 - this.output = EivTagUtil.decodeItemStack(tag.getCompound("result")); 52 - this.lore = tag.getString("lore"); 51 + this.input = EivTagUtil.readIngredient(NbtUtils.getCompound(tag, "ingredient")); 52 + this.output = EivTagUtil.decodeItemStack(NbtUtils.getCompound(tag, "result")); 53 + this.lore = NbtUtils.getString(tag,"lore"); 53 54 } 54 55 55 56 @Override
+4 -3
common/src/main/java/net/lerariemann/infinity/compat/eiv/portal_crafting/PortalCraftingServerRecipe.java
··· 4 4 import de.crafty.eiv.common.api.recipe.IEivServerRecipe; 5 5 import de.crafty.eiv.common.recipe.util.EivTagUtil; 6 6 import net.lerariemann.infinity.util.InfinityMethods; 7 + import net.lerariemann.infinity.util.core.NbtUtils; 7 8 import net.minecraft.item.ItemStack; 8 9 import net.minecraft.nbt.NbtCompound; 9 10 import net.minecraft.nbt.NbtString; ··· 49 50 50 51 @Override 51 52 public void loadFromTag(NbtCompound tag) { 52 - this.input = EivTagUtil.readIngredient(tag.getCompound("ingredient")); 53 - this.output = EivTagUtil.decodeItemStack(tag.getCompound("result")); 54 - this.lore = tag.getString("lore"); 53 + this.input = EivTagUtil.readIngredient(NbtUtils.getCompound(tag, "ingredient")); 54 + this.output = EivTagUtil.decodeItemStack(NbtUtils.getCompound(tag, "result")); 55 + this.lore = NbtUtils.getString(tag, "lore"); 55 56 } 56 57 57 58 @Override
+1 -1
common/src/main/java/net/lerariemann/infinity/dimensions/RandomBiome.java
··· 45 45 46 46 void rollAndPutSafe(NbtCompound res, String key, NbtElement randomSound) { 47 47 if (roll(key)) { 48 - if (randomSound != null && !randomSound.asString().isBlank()) 48 + if (randomSound != null && !randomSound.asString().orElse("").isBlank()) 49 49 res.put(key, randomSound); 50 50 } 51 51 }
+1 -1
common/src/main/java/net/lerariemann/infinity/dimensions/RandomDimension.java
··· 369 369 Map<String, NbtList> tags = new HashMap<>(); 370 370 for (String s : structure_ids.keySet()) for (String ss : dictionary.getKeys()) if (s.contains(ss)) { 371 371 for (NbtElement e : (NbtList) Objects.requireNonNull(dictionary.get(ss))) { 372 - String t = e.asString(); 372 + String t = e.asString().get(); 373 373 if (!tags.containsKey(t)) tags.put(t, new NbtList()); 374 374 structure_ids.get(s).forEach(fullname -> tags.get(t).add(NbtString.of(fullname))); 375 375 }
+1 -1
common/src/main/java/net/lerariemann/infinity/dimensions/features/vegetation/RandomSurfacePatch.java
··· 30 30 int tries_max = (xz_spread+1)*(xz_spread+1); 31 31 NbtCompound config = CommonIO.readAndFormat(InfinityMod.utilPath + "/preplacements/surfacepatch.json", 32 32 CommonIO.compoundToString(PROVIDER.randomElement(random, ConfigType.BLOCKS_FEATURES)), 33 - parent.surface_block.getString("Name"), Math.min(256, random.nextInt(tries_max)), xz_spread, y_spread); 33 + parent.surface_block.getString("Name").get(), Math.min(256, random.nextInt(tries_max)), xz_spread, y_spread); 34 34 return feature(config); 35 35 } 36 36 }
+2 -2
common/src/main/java/net/lerariemann/infinity/entity/client/AntModel.java
··· 40 40 ModelData modelData = new ModelData(); 41 41 ModelPartData root = modelData.getRoot(); 42 42 ModelPartData body = root.addChild("body", ModelPartBuilder.create().uv(0, 11).cuboid(-2.0F, -5.75F, 3.0F, 4.0F, 4.0F, 4.0F, new Dilation(0.0F)) 43 - .uv(0, 0).cuboid(-1.0F, -4.0F, -5.0F, 2.0F, 2.0F, 9.0F, new Dilation(0.0F)), ModelTransform.pivot(0.0F, 24.0F, 0.0F)); 43 + .uv(0, 0).cuboid(-1.0F, -4.0F, -5.0F, 2.0F, 2.0F, 9.0F, new Dilation(0.0F)), ModelTransform.rotation(0.0F, 24.0F, 0.0F)); 44 44 45 45 body.addChild("head", ModelPartBuilder.create().uv(16, 11).cuboid(-1.5F, -1.75F, -3.0F, 3.0F, 3.0F, 3.0F, new Dilation(0.0F)) 46 46 .uv(0, 0) 47 47 .cuboid(2.0F, -3.75F, -1.0F, -1.0F, 3.0F, 1.0F, new Dilation(0.0F)) 48 48 .uv(0, 0) 49 49 .cuboid(-1.0F, -3.75F, -1.0F, -1.0F, 3.0F, 1.0F, new Dilation(0.0F)), 50 - ModelTransform.pivot(0.0F, -3.0F, -4.0F)); 50 + ModelTransform.rotation(0.0F, -3.0F, -4.0F)); 51 51 52 52 body.addChild("front_left_leg", ModelPartBuilder.create() 53 53 .uv(16, 17)
+7 -7
common/src/main/java/net/lerariemann/infinity/entity/client/BishopModel.java
··· 20 20 root.addChild("body", 21 21 ModelPartBuilder.create().uv(16, 16) 22 22 .cuboid(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, Dilation.NONE), 23 - ModelTransform.pivot(0.0F, 0.0F, 0.0F)); 23 + ModelTransform.rotation(0.0F, 0.0F, 0.0F)); 24 24 25 25 root.addChild("head", 26 26 ModelPartBuilder.create() ··· 34 34 .cuboid(-1.0F, -17.0F, -1.0F, 2.0F, 4.0F, 2.0F, Dilation.NONE) 35 35 .uv(54, 59) 36 36 .cuboid(-1.0F, -19.0F, -1.0F, 2.0F, 2.0F, 2.0F, new Dilation(0.5F)), 37 - ModelTransform.pivot(0.0F, 0.0F, 0.0F)); 37 + ModelTransform.rotation(0.0F, 0.0F, 0.0F)); 38 38 root.addChild("hat", ModelPartBuilder.create() 39 39 .uv(32, 35) 40 40 .cuboid(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new Dilation(0.5F)), 41 - ModelTransform.pivot(0.0F, 0.0F, 0.0F)); 41 + ModelTransform.rotation(0.0F, 0.0F, 0.0F)); 42 42 43 43 root.addChild("right_arm", ModelPartBuilder.create() 44 44 .uv(0, 16) 45 45 .cuboid(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, Dilation.NONE), 46 - ModelTransform.pivot(-5.0F, 2.0F, 0.0F)); 46 + ModelTransform.rotation(-5.0F, 2.0F, 0.0F)); 47 47 root.addChild("left_arm", ModelPartBuilder.create() 48 48 .uv(16, 48) 49 49 .cuboid(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, Dilation.NONE), 50 - ModelTransform.pivot(5.0F, 2.0F, 0.0F)); 50 + ModelTransform.rotation(5.0F, 2.0F, 0.0F)); 51 51 root.addChild("right_leg", ModelPartBuilder.create() 52 52 .uv(0, 16) 53 53 .cuboid(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, Dilation.NONE), 54 - ModelTransform.pivot(-1.9F, 12.0F, 0.0F)); 54 + ModelTransform.rotation(-1.9F, 12.0F, 0.0F)); 55 55 root.addChild("left_leg", ModelPartBuilder.create() 56 56 .uv(16, 48) 57 57 .cuboid(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, Dilation.NONE), 58 - ModelTransform.pivot(1.9F, 12.0F, 0.0F)); 58 + ModelTransform.rotation(1.9F, 12.0F, 0.0F)); 59 59 60 60 return TexturedModelData.of(modelData, 64, 64); 61 61 }
+2 -1
common/src/main/java/net/lerariemann/infinity/entity/client/ChaosPawnTint.java
··· 5 5 import net.lerariemann.infinity.entity.custom.ChaosPawn; 6 6 import net.lerariemann.infinity.entity.custom.TintableEntity; 7 7 import net.lerariemann.infinity.util.InfinityMethods; 8 + import net.lerariemann.infinity.util.core.NbtUtils; 8 9 import net.minecraft.client.MinecraftClient; 9 10 import net.minecraft.client.model.ModelPart; 10 11 import net.minecraft.client.render.RenderLayer; ··· 29 30 30 31 public void renderOneLayer(MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay, ChaosPawnRenderState livingEntity, ModelPart part, String name) { 31 32 int color; 32 - color = livingEntity.colors.getInt(name); 33 + color = NbtUtils.getInt(livingEntity.colors, name); 33 34 if (livingEntity.customName != null) { 34 35 String s = livingEntity.customName.toString(); 35 36 if ("jeb_".equals(s)) {
+5 -3
common/src/main/java/net/lerariemann/infinity/entity/client/DimensionalSlimeCoreRenderer.java
··· 1 1 package net.lerariemann.infinity.entity.client; 2 2 3 + import net.fabricmc.fabric.api.renderer.v1.render.FabricBlockModelRenderer; 3 4 import net.lerariemann.infinity.entity.client.state.ChaosSlimeRenderState; 4 5 import net.lerariemann.infinity.entity.custom.ChaosSlime; 5 6 import net.minecraft.block.BlockState; ··· 11 12 import net.minecraft.client.render.entity.feature.FeatureRenderer; 12 13 import net.minecraft.client.render.entity.feature.FeatureRendererContext; 13 14 import net.minecraft.client.render.entity.model.SlimeEntityModel; 14 - import net.minecraft.client.render.model.BakedModel; 15 + import net.minecraft.client.render.model.BlockStateModel; 15 16 import net.minecraft.client.util.math.MatrixStack; 17 + import net.minecraft.util.math.BlockPos; 16 18 17 19 public class DimensionalSlimeCoreRenderer extends FeatureRenderer<ChaosSlimeRenderState, SlimeEntityModel> { 18 20 private final BlockRenderManager blockRenderManager; ··· 37 39 } 38 40 39 41 private void renderCore(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, BlockState coreState, int overlay) { 40 - BakedModel coreModel = this.blockRenderManager.getModel(coreState); 41 - this.blockRenderManager.getModelRenderer().render(matrices.peek(), vertexConsumers.getBuffer(RenderLayers.getBlockLayer(coreState)), coreState, coreModel, 1.0f, 1.0f, 1.0f, light, overlay); 42 + BlockStateModel coreModel = this.blockRenderManager.getModel(coreState); 43 + FabricBlockModelRenderer.render(matrices.peek(), vertexConsumers, coreModel, 1.0f, 1.0f, 1.0f, light, overlay, null, BlockPos.ORIGIN, coreState); 42 44 } 43 45 }
+1 -1
common/src/main/java/net/lerariemann/infinity/entity/custom/AntEntity.java
··· 206 206 protected void tickControlled(PlayerEntity controllingPlayer, Vec3d movementInput) { 207 207 super.tickControlled(controllingPlayer, movementInput); 208 208 this.setRotation(controllingPlayer.getYaw(),controllingPlayer.getPitch() * 0.5F); 209 - this.prevYaw = this.bodyYaw = this.headYaw = this.getYaw(); 209 + this.lastYaw = this.bodyYaw = this.headYaw = this.getYaw(); 210 210 } 211 211 212 212 public static class AntBattleGoal<T extends LivingEntity> extends ActiveTargetGoal<T> {
+3 -3
common/src/main/java/net/lerariemann/infinity/entity/custom/ChaosCreeper.java
··· 26 26 import net.minecraft.nbt.NbtCompound; 27 27 import net.minecraft.registry.RegistryKey; 28 28 import net.minecraft.registry.RegistryKeys; 29 - import net.minecraft.registry.RegistryPair; 29 + import net.minecraft.registry.entry.LazyRegistryEntryReference; 30 30 import net.minecraft.registry.tag.EntityTypeTags; 31 31 import net.minecraft.server.MinecraftServer; 32 32 import net.minecraft.server.world.ServerWorld; ··· 165 165 Identifier song = Identifier.of(InfinityMod.provider.randomName(world.random, ConfigType.JUKEBOXES)); 166 166 var color = (int)InfinityMethods.getNumericFromId(song); 167 167 stack.applyComponentsFrom(ComponentMap.builder() 168 - .add(DataComponentTypes.JUKEBOX_PLAYABLE, new JukeboxPlayableComponent(new RegistryPair<>( 169 - RegistryKey.of(RegistryKeys.JUKEBOX_SONG, song)), true)) 168 + .add(DataComponentTypes.JUKEBOX_PLAYABLE, new JukeboxPlayableComponent(new LazyRegistryEntryReference<>( 169 + RegistryKey.of(RegistryKeys.JUKEBOX_SONG, song)))) 170 170 .add(ModComponentTypes.COLOR.get(), color).add(DataComponentTypes.CUSTOM_MODEL_DATA, new CustomModelDataComponent(List.of(), List.of(), List.of(), List.of(color, InfinityMethods.invertColor(color)))).build()); 171 171 this.dropStack(world, stack); 172 172 }
+3 -2
common/src/main/java/net/lerariemann/infinity/entity/custom/ChaosPawn.java
··· 3 3 import net.lerariemann.infinity.InfinityMod; 4 4 import net.lerariemann.infinity.iridescence.Iridescence; 5 5 import net.lerariemann.infinity.util.core.ConfigType; 6 + import net.lerariemann.infinity.util.core.NbtUtils; 6 7 import net.lerariemann.infinity.util.core.RandomProvider; 7 8 import net.minecraft.block.BlockState; 8 9 import net.minecraft.block.Blocks; ··· 95 96 @Override 96 97 public void readCustomDataFromNbt(NbtCompound nbt) { 97 98 super.readCustomDataFromNbt(nbt); 98 - this.setColors(nbt.getCompound("colors")); 99 - this.dataTracker.set(special_case, nbt.getInt("case")); 99 + this.setColors(NbtUtils.getCompound(nbt, "colors")); 100 + this.dataTracker.set(special_case, NbtUtils.getInt(nbt, "case")); 100 101 } 101 102 102 103 // TODO mojang plz
+2 -1
common/src/main/java/net/lerariemann/infinity/entity/custom/ChaosSkeleton.java
··· 189 189 potionEffect.putString("id", effect); 190 190 potionEffect.putInt("duration", duration); 191 191 List<StatusEffectInstance> customEffects = new ArrayList<>(); 192 - customEffects.add(StatusEffectInstance.fromNbt(potionEffect)); 192 + // TODO 1.21.5 PUT THIS BACK 193 + // customEffects.add(StatusEffectInstance.fromNbt(potionEffect)); 193 194 stack.set(DataComponentTypes.POTION_CONTENTS, new PotionContentsComponent(Optional.empty(), Optional.of(color), customEffects, Optional.of(I18n.translate("potion.infinity.skeleton")))); stack.set(DataComponentTypes.ITEM_NAME, Text.translatable("potion.infinity.skeleton")); 194 195 return stack; 195 196 }
+2 -2
common/src/main/java/net/lerariemann/infinity/entity/custom/TintableEntity.java
··· 21 21 int p = n % o; 22 22 int q = (n + 1) % o; 23 23 float r = (float)(age % 25) / 25.0F; 24 - int s = SheepEntity.getRgbColor(DyeColor.byId(p)); 25 - int t = SheepEntity.getRgbColor(DyeColor.byId(q)); 24 + int s = SheepEntity.getRgbColor(DyeColor.byIndex(p)); 25 + int t = SheepEntity.getRgbColor(DyeColor.byIndex(q)); 26 26 return ColorHelper.lerp(r, s, t); 27 27 } 28 28
+2 -2
common/src/main/java/net/lerariemann/infinity/iridescence/Iridescence.java
··· 103 103 DyeColor.PINK); 104 104 105 105 static Block getRandomColorBlock(WorldAccess world, String str) { 106 - return Registries.BLOCK.get(Identifier.of(dyeColors.get(world.getRandom().nextInt(dyeColors.size())).getName() + "_" + str)); 106 + return Registries.BLOCK.get(Identifier.of(dyeColors.get(world.getRandom().nextInt(dyeColors.size())).name() + "_" + str)); 107 107 } 108 108 static Block getRandomColorBlock(double d, String str) { 109 - return Registries.BLOCK.get(Identifier.of(dyeColors.get((int)(d* dyeColors.size())).getName() + "_" + str)); 109 + return Registries.BLOCK.get(Identifier.of(dyeColors.get((int)(d* dyeColors.size())).name() + "_" + str)); 110 110 } 111 111 112 112 static int getAmplifierOnApply(LivingEntity entity, int original, boolean willingly) {
+3 -2
common/src/main/java/net/lerariemann/infinity/iridescence/IridescenceLiquidBlock.java
··· 6 6 import net.lerariemann.infinity.util.core.RandomProvider; 7 7 import net.minecraft.block.BlockState; 8 8 import net.minecraft.entity.Entity; 9 + import net.minecraft.entity.EntityCollisionHandler; 9 10 import net.minecraft.entity.ItemEntity; 10 11 import net.minecraft.entity.LivingEntity; 11 12 import net.minecraft.entity.mob.MobEntity; ··· 23 24 } 24 25 25 26 @Override 26 - public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { 27 - super.onEntityCollision(state, world, pos, entity); 27 + public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler) { 28 + super.onEntityCollision(state, world, pos, entity, handler); 28 29 if (world.getFluidState(pos).getLevel() > 3 && world instanceof ServerWorld w) switch (entity) { 29 30 case PlayerEntity player -> Iridescence.tryBeginJourney(player, RandomProvider.ruleInt("iridescenceContactLevel"), false); 30 31 case MobEntity ent -> Iridescence.tryApplyEffect(ent);
+7 -5
common/src/main/java/net/lerariemann/infinity/item/BiomeBottleItem.java
··· 3 3 import net.lerariemann.infinity.block.custom.BiomeBottleBlock; 4 4 import net.lerariemann.infinity.registry.core.ModComponentTypes; 5 5 import net.minecraft.block.Block; 6 + import net.minecraft.component.type.TooltipDisplayComponent; 6 7 import net.minecraft.item.BlockItem; 7 8 import net.minecraft.item.Item; 8 9 import net.minecraft.item.ItemStack; ··· 14 15 import net.minecraft.util.Util; 15 16 16 17 import java.util.List; 18 + import java.util.function.Consumer; 17 19 18 20 public class BiomeBottleItem extends BlockItem { 19 21 public BiomeBottleItem(Block block, Settings settings) { ··· 21 23 } 22 24 23 25 @Override 24 - public void appendTooltip(ItemStack stack, Item.TooltipContext context, List<Text> tooltip, TooltipType type) { 25 - super.appendTooltip(stack, context, tooltip, type); 26 + public void appendTooltip(ItemStack stack, TooltipContext context, TooltipDisplayComponent displayComponent, Consumer<Text> tooltip, TooltipType type) { 27 + super.appendTooltip(stack, context, displayComponent, tooltip, type); 26 28 Identifier biome = stack.getComponents().get(ModComponentTypes.BIOME_CONTENTS.get()); 27 29 if (biome != null) { 28 - tooltip.add(Text.translatable(Util.createTranslationKey("biome", biome)).formatted(Formatting.GRAY)); 30 + tooltip.accept(Text.translatable(Util.createTranslationKey("biome", biome)).formatted(Formatting.GRAY)); 29 31 } 30 32 else { 31 33 MutableText mutableText = Text.translatable("caption.infinity.biomebottle.empty"); 32 - tooltip.add(mutableText.formatted(Formatting.GRAY)); 34 + tooltip.accept(mutableText.formatted(Formatting.GRAY)); 33 35 } 34 36 if (type.isAdvanced()) { 35 - tooltip.add(Text.translatable("caption.infinity.biomebottle.charge", BiomeBottleBlock.getCharge(stack)).formatted(Formatting.GRAY)); 37 + tooltip.accept(Text.translatable("caption.infinity.biomebottle.charge", BiomeBottleBlock.getCharge(stack)).formatted(Formatting.GRAY)); 36 38 } 37 39 } 38 40 }
+2 -2
common/src/main/java/net/lerariemann/infinity/item/ChromaticItem.java
··· 75 75 return ComponentChanges.builder() 76 76 .add(ModComponentTypes.COLOR.get(), color) 77 77 .add(DataComponentTypes.CUSTOM_MODEL_DATA, InfinityMethods.getColoredModel(color)) 78 - .add(ModComponentTypes.DYE_COLOR.get(), dyeColor.getName()) 78 + .add(ModComponentTypes.DYE_COLOR.get(), dyeColor.name()) 79 79 .remove(ModComponentTypes.HUE.get()) 80 80 .build(); 81 81 } ··· 109 109 else { //copy color from vanilla blocks 110 110 DyeColor dyeColor = ColorLogic.getColorByState(oldState); 111 111 if (dyeColor != null && 112 - !dyeColor.getName().equals(newStack.getOrDefault(ModComponentTypes.DYE_COLOR.get(), "null"))) { 112 + !dyeColor.name().equals(newStack.getOrDefault(ModComponentTypes.DYE_COLOR.get(), "null"))) { 113 113 newStack.applyChanges(ofDye(dyeColor)); 114 114 } 115 115 else return false;
+6 -4
common/src/main/java/net/lerariemann/infinity/item/F4Item.java
··· 10 10 import net.minecraft.block.Blocks; 11 11 import net.minecraft.block.NetherPortalBlock; 12 12 import net.minecraft.component.ComponentMap; 13 + import net.minecraft.component.type.TooltipDisplayComponent; 13 14 import net.minecraft.entity.player.PlayerEntity; 14 15 import net.minecraft.item.Item; 15 16 import net.minecraft.item.ItemStack; ··· 27 28 import net.minecraft.world.World; 28 29 29 30 import java.util.*; 31 + import java.util.function.Consumer; 30 32 31 33 public class F4Item extends Item implements PortalDataHolder.Destinable { 32 34 static final BlockState OBSIDIAN = Blocks.OBSIDIAN.getDefaultState(); ··· 54 56 } 55 57 56 58 @Override 57 - public void appendTooltip(ItemStack stack, Item.TooltipContext context, List<Text> tooltip, TooltipType type) { 58 - super.appendTooltip(stack, context, tooltip, type); 59 + public void appendTooltip(ItemStack stack, TooltipContext context, TooltipDisplayComponent displayComponent, Consumer<Text> tooltip, TooltipType type) { 60 + super.appendTooltip(stack, context, displayComponent, tooltip, type); 59 61 Identifier dimension = stack.getComponents().get(ModComponentTypes.DESTINATION.get()); 60 62 MutableText mutableText = getDimensionTooltip(dimension); 61 - tooltip.add(mutableText.formatted(Formatting.GRAY)); 63 + tooltip.accept(mutableText.formatted(Formatting.GRAY)); 62 64 MutableText mutableText2 = Text.translatable("tooltip.infinity.f4.charges", getCharge(stack)); 63 - tooltip.add(mutableText2.formatted(Formatting.GRAY)); 65 + tooltip.accept(mutableText2.formatted(Formatting.GRAY)); 64 66 } 65 67 66 68 public static ItemStack placePortal(World world, PlayerEntity player, ItemStack stack, BlockPos lowerCenter,
+4 -2
common/src/main/java/net/lerariemann/infinity/item/IridescentPotionItem.java
··· 5 5 import net.lerariemann.infinity.registry.core.ModStatusEffects; 6 6 import net.minecraft.advancement.criterion.Criteria; 7 7 import net.minecraft.component.type.PotionContentsComponent; 8 + import net.minecraft.component.type.TooltipDisplayComponent; 8 9 import net.minecraft.entity.LivingEntity; 9 10 import net.minecraft.entity.effect.StatusEffectInstance; 10 11 import net.minecraft.entity.player.PlayerEntity; ··· 23 24 import net.minecraft.world.event.GameEvent; 24 25 25 26 import java.util.List; 27 + import java.util.function.Consumer; 26 28 27 29 public class IridescentPotionItem extends Item { 28 30 public IridescentPotionItem(Settings settings) { ··· 66 68 } 67 69 68 70 @Override 69 - public void appendTooltip(ItemStack stack, Item.TooltipContext context, List<Text> tooltip, TooltipType type) { 71 + public void appendTooltip(ItemStack stack, TooltipContext context, TooltipDisplayComponent displayComponent, Consumer<Text> tooltip, TooltipType type) { 70 72 int level = stack.getOrDefault(ModComponentTypes.CHARGE.get(), 0); 71 73 List<StatusEffectInstance> effects = List.of(new StatusEffectInstance(ModStatusEffects.IRIDESCENT_EFFECT, 72 74 Iridescence.getFullEffectLength(level), level)); 73 - PotionContentsComponent.buildTooltip(effects, tooltip::add, 1.0F, context.getUpdateTickRate()); 75 + PotionContentsComponent.buildTooltip(effects, tooltip::accept, 1.0F, context.getUpdateTickRate()); 74 76 } 75 77 }
+5 -3
common/src/main/java/net/lerariemann/infinity/item/TransfiniteKeyItem.java
··· 8 8 import net.minecraft.component.ComponentChanges; 9 9 import net.minecraft.component.DataComponentTypes; 10 10 import net.minecraft.component.type.CustomModelDataComponent; 11 + import net.minecraft.component.type.TooltipDisplayComponent; 11 12 import net.minecraft.entity.ItemEntity; 12 13 import net.minecraft.item.Item; 13 14 import net.minecraft.item.ItemStack; ··· 23 24 import java.util.List; 24 25 import java.util.Objects; 25 26 import java.util.Optional; 27 + import java.util.function.Consumer; 26 28 27 29 public class TransfiniteKeyItem extends Item implements PortalDataHolder.Destinable { 28 30 public TransfiniteKeyItem(Settings settings) { ··· 63 65 } 64 66 65 67 @Override 66 - public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) { 67 - super.appendTooltip(stack, context, tooltip, type); 68 + public void appendTooltip(ItemStack stack, TooltipContext context, TooltipDisplayComponent displayComponent, Consumer<Text> tooltip, TooltipType type) { 69 + super.appendTooltip(stack, context, displayComponent, tooltip, type); 68 70 Identifier dimension = stack.getComponents().get(ModComponentTypes.DESTINATION.get()); 69 71 MutableText mutableText = (dimension != null) 70 72 ? InfinityMethods.getDimensionNameAsText(dimension) 71 73 : Text.translatable("tooltip.infinity.key.randomise"); 72 - tooltip.add(mutableText.formatted(Formatting.GRAY)); 74 + tooltip.accept(mutableText.formatted(Formatting.GRAY)); 73 75 } 74 76 75 77 public CustomModelDataComponent getDataForClientItem(ItemStack stack) {
+3 -2
common/src/main/java/net/lerariemann/infinity/mixin/core/NetherPortalBlockMixin.java
··· 10 10 import net.minecraft.block.Blocks; 11 11 import net.minecraft.block.NetherPortalBlock; 12 12 import net.minecraft.entity.Entity; 13 + import net.minecraft.entity.EntityCollisionHandler; 13 14 import net.minecraft.entity.ItemEntity; 14 15 import net.minecraft.server.world.ServerWorld; 15 16 import net.minecraft.state.property.EnumProperty; ··· 30 31 @Shadow @Final public static EnumProperty<Direction.Axis> AXIS; 31 32 32 33 /* The root hook for "throw a book in the portal" logic. */ 33 - @Inject(at = @At("HEAD"), method = "onEntityCollision(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/Entity;)V") 34 - private void injected(BlockState state, World world, BlockPos pos, Entity entity, CallbackInfo info) { 34 + @Inject(at = @At("HEAD"), method = "onEntityCollision") 35 + private void injected(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, CallbackInfo ci) { 35 36 if (world instanceof ServerWorld w && entity instanceof ItemEntity e) { 36 37 PortalCreator.tryCreatePortalFromItem(w, pos, e); 37 38 }
+1 -1
common/src/main/java/net/lerariemann/infinity/mixin/core/ServerPlayerEntityMixin.java
··· 43 43 @Unique private Identifier infinity$idForWarp; 44 44 45 45 @Inject(method="findRespawnPosition", at = @At("HEAD"), cancellable = true) 46 - private static void injected(ServerWorld world, BlockPos pos, float angle, boolean forced, boolean alive, CallbackInfoReturnable<Optional<Vec3d>> cir) { 46 + private static void injected(ServerWorld world, ServerPlayerEntity.Respawn respawn, boolean bl, CallbackInfoReturnable<Optional<?>> cir) { 47 47 if (InfinityMethods.isTimebombed(world)) cir.setReturnValue(Optional.empty()); 48 48 } 49 49
+3 -2
common/src/main/java/net/lerariemann/infinity/mixin/iridescence/StatusEffectInstanceMixin.java
··· 5 5 import net.minecraft.entity.effect.StatusEffect; 6 6 import net.minecraft.entity.effect.StatusEffectInstance; 7 7 import net.minecraft.registry.entry.RegistryEntry; 8 + import net.minecraft.server.world.ServerWorld; 8 9 import org.spongepowered.asm.mixin.Mixin; 9 10 import org.spongepowered.asm.mixin.Shadow; 10 11 import org.spongepowered.asm.mixin.injection.At; ··· 20 21 @Shadow private int amplifier; 21 22 22 23 /* Hook for unconventional status effect ticking logic */ 23 - @Inject(method = "update", at = @At(target = "Lnet/minecraft/entity/effect/StatusEffectInstance;updateDuration()I", value = "INVOKE")) 24 - void inj(LivingEntity entity, Runnable overwriteCallback, CallbackInfoReturnable<Boolean> cir) { 24 + @Inject(method = "update", at = @At(target = "Lnet/minecraft/entity/effect/StatusEffectInstance;updateDuration()V", value = "INVOKE")) 25 + void inj(ServerWorld world, LivingEntity entity, Runnable hiddenEffectCallback, CallbackInfoReturnable<Boolean> cir) { 25 26 if (getEffectType().value() instanceof ModStatusEffects.SpecialEffect eff) { 26 27 eff.tryApplySpecial(entity, duration, amplifier); 27 28 }
+2 -2
common/src/main/java/net/lerariemann/infinity/mixin/mobs/LivingEntityMixin.java
··· 46 46 47 47 /* Handle fall damage in dimensions with custom mavity */ 48 48 @Inject(method = "computeFallDamage", at = @At(value = "HEAD"), cancellable = true) 49 - protected void inj2(float fallDistance, float damageMultiplier, CallbackInfoReturnable<Integer> cir) { 49 + protected void inj2(double fallDistance, float damagePerDistance, CallbackInfoReturnable<Integer> cir) { 50 50 InfinityOptions options = InfinityOptions.access(getWorld()); 51 51 if (!options.isEmpty()) { 52 52 if (this.getType().isIn(EntityTypeTags.FALL_DAMAGE_IMMUNE)) cir.setReturnValue(0); ··· 55 55 double clampedMavity = Math.clamp(options.getMavity(), 0.01, 2); 56 56 double g = fallDistance * clampedMavity - f; 57 57 cir.setReturnValue(MathHelper.ceil( 58 - (g * damageMultiplier) * this.getAttributeValue(EntityAttributes.FALL_DAMAGE_MULTIPLIER))); 58 + (g * damagePerDistance) * this.getAttributeValue(EntityAttributes.FALL_DAMAGE_MULTIPLIER))); 59 59 } 60 60 } 61 61 }
+1 -1
common/src/main/java/net/lerariemann/infinity/mixin/mobs/SheepEntityMixin.java
··· 46 46 setColor(DyeColor.WHITE); 47 47 } 48 48 else if (InfinityMethods.isBiomeInfinity(world, getBlockPos())) { 49 - setColor(DyeColor.byId(world.getRandom().nextInt(16))); 49 + setColor(DyeColor.byIndex(world.getRandom().nextInt(16))); 50 50 } 51 51 } 52 52 }
+2 -2
common/src/main/java/net/lerariemann/infinity/options/InfinityOptions.java
··· 172 172 return data.contains("moons") && ((NbtCompound)(NbtUtils.getList(data, "moons", NbtElement.COMPOUND_TYPE).get(i))).contains(key); 173 173 } 174 174 public float fullLunarTest(String key, int i, float def) { 175 - return lunarTest(key, i) ? ((NbtCompound)(NbtUtils.getList(data, "moons", NbtElement.COMPOUND_TYPE).get(i))).getFloat(key) : def; 175 + return lunarTest(key, i) ? ((NbtCompound)(NbtUtils.getList(data, "moons", NbtElement.COMPOUND_TYPE).get(i))).getFloat(key, def) : def; 176 176 } 177 177 public float getLunarSize(int i) { 178 178 return fullLunarTest("lunar_size", i, 20.0f); ··· 184 184 return fullLunarTest("lunar_tilt_z", i, 0.0f); 185 185 } 186 186 public Vector3f getLunarTint(int i) { 187 - int color = lunarTest("lunar_tint", i) ? ((NbtCompound)(NbtUtils.getList(data, "moons", NbtElement.COMPOUND_TYPE).get(i))).getInt("lunar_tint") : 16777215; 187 + int color = lunarTest("lunar_tint", i) ? ((NbtCompound)(NbtUtils.getList(data, "moons", NbtElement.COMPOUND_TYPE).get(i))).getInt("lunar_tint", 16777215) : 16777215; 188 188 return new Vector3f((float)(color >> 16 & 0xFF) / 255.0f, (float)(color >> 8 & 0xFF) / 255.0f, (float)(color & 0xFF) / 255.0f); 189 189 } 190 190 public Identifier getLunarTexture(int i) {
+1 -1
common/src/main/java/net/lerariemann/infinity/options/PortalColorApplier.java
··· 24 24 } 25 25 static PortalColorApplier of(NbtCompound data, int defaultColor) { 26 26 if (!data.contains("portal_color")) return new PortalColorApplier.Simple(defaultColor); 27 - if (data.getType("portal_color") == NbtElement.INT_TYPE) return new PortalColorApplier.Simple(NbtUtils.getInt(data, "portal_color")); 27 + if (data.get("portal_color").getType() == NbtElement.INT_TYPE) return new PortalColorApplier.Simple(NbtUtils.getInt(data, "portal_color")); 28 28 NbtCompound applierData = NbtUtils.getCompound(data, "portal_color"); 29 29 return switch (NbtUtils.getString(applierData, "type", "")) { 30 30 case "simple" -> new PortalColorApplier.Simple(NbtUtils.getInt(applierData, "value"));
+1 -1
common/src/main/java/net/lerariemann/infinity/options/RandomInfinityOptions.java
··· 125 125 public static NbtCompound effect(Random r, RandomProvider provider) { 126 126 NbtCompound res = new NbtCompound(); 127 127 NbtCompound effect = provider.randomElement(r, ConfigType.EFFECTS); 128 - if (effect.getBoolean("Instant")) return new NbtCompound(); 128 + if (NbtUtils.getBoolean(effect, "Instant")) return new NbtCompound(); 129 129 int amplifier = Math.min(5, (int)(0.5*r.nextExponential())); 130 130 res.putString("id", NbtUtils.getString(effect, "Name")); 131 131 res.putInt("amplifier", amplifier);
+1 -1
common/src/main/java/net/lerariemann/infinity/util/config/Amendment.java
··· 45 45 case "matching" -> new MatchingSelector(NbtUtils.getString(data, "matching")); 46 46 case "matching_block_tag" -> new MatchingBlockTagSelector(NbtUtils.getString(data, "matching")); 47 47 case "matching_any" -> new MatchingAnySelector(NbtUtils.getList(data, "matching", NbtElement.STRING_TYPE) 48 - .stream().map(e->(NbtString)e).map(NbtString::asString).toList()); 48 + .stream().map(e->(NbtString)e).map((string)-> string.asString().get()).toList()); 49 49 default -> { 50 50 InfinityMod.LOGGER.warn("Unknown amendment selector type: {}", selectorType); 51 51 yield null;
+6 -5
common/src/main/java/net/lerariemann/infinity/util/config/ConfigGenerator.java
··· 32 32 import net.minecraft.state.property.Properties; 33 33 import net.minecraft.util.Identifier; 34 34 import net.minecraft.util.collection.Pool; 35 + import net.minecraft.util.collection.Weighted; 35 36 import net.minecraft.util.math.BlockPos; 36 37 import net.minecraft.world.StructureSpawns; 37 38 import net.minecraft.world.WorldView; ··· 272 273 return lst; 273 274 } 274 275 275 - static NbtCompound genEntry(SpawnSettings.SpawnEntry entry) { 276 + static NbtCompound genEntry(Weighted<SpawnSettings.SpawnEntry> entry) { 276 277 NbtCompound res = new NbtCompound(); 277 - res.putString("type", Registries.ENTITY_TYPE.getId(entry.type).toString()); 278 - res.putInt("maxCount", entry.maxGroupSize); 279 - res.putInt("minCount", entry.minGroupSize); 280 - res.putInt("weight", entry.getWeight().getValue()); 278 + res.putString("type", Registries.ENTITY_TYPE.getId(entry.value().type()).toString()); 279 + res.putInt("maxCount", entry.value().maxGroupSize()); 280 + res.putInt("minCount", entry.value().minGroupSize()); 281 + res.putInt("weight", entry.weight()); 281 282 return res; 282 283 } 283 284
+2 -2
common/src/main/java/net/lerariemann/infinity/util/config/ConfigManager.java
··· 134 134 NbtList l = NbtUtils.getList(c,"content", NbtElement.STRING_TYPE); 135 135 try { 136 136 for (NbtElement e : l) { 137 - Path path1 = configPath.resolve(e.asString()); 137 + Path path1 = configPath.resolve(e.asString().get()); 138 138 LogManager.getLogger().info(path1); 139 139 if (path1.toFile().exists()) { 140 - Path path2 = configPath.resolve("evicted").resolve(e.asString()); 140 + Path path2 = configPath.resolve("evicted").resolve(e.asString().get()); 141 141 Files.createDirectories(path2); 142 142 Files.copy(path1, path2, REPLACE_EXISTING); 143 143 Files.delete(path1);
+1 -1
common/src/main/java/net/lerariemann/infinity/util/config/SoundScanner.java
··· 54 54 //the client unpacks a non-empty payload only when needed, meaning only if it doesn't have necessary files yet 55 55 if (!songIds.isEmpty() && !Files.exists(cl.getResourcePackDir().resolve("infinity/assets/infinity/sounds.json"))) { 56 56 cl.execute(() -> saveResourcePack(cl, NbtUtils.getList(songIds, "entries", NbtElement.STRING_TYPE).stream() 57 - .map(NbtElement::asString).map(Identifier::of), false)); 57 + .map(NbtElement::asString).map((str)-> Identifier.of(str.get())), false)); 58 58 } 59 59 else if (isPreloaded()) { 60 60 cl.execute(() -> {
+1 -1
common/src/main/java/net/lerariemann/infinity/util/config/SurfaceRuleScanner.java
··· 85 85 else { 86 86 TreeLeaf l = addOfRule(next, where, true); 87 87 if(Objects.requireNonNull(c.get("biome_is")).getNbtType().equals(NbtList.TYPE)) { 88 - NbtUtils.getList(c, "biome_is", NbtElement.STRING_TYPE).forEach(e -> addBiomeLoc(e.asString(), l.i)); 88 + NbtUtils.getList(c, "biome_is", NbtElement.STRING_TYPE).forEach(e -> addBiomeLoc(e.asString().get(), l.i)); 89 89 } 90 90 } 91 91 }
+6 -4
common/src/main/java/net/lerariemann/infinity/util/core/CommonIO.java
··· 1 1 package net.lerariemann.infinity.util.core; 2 2 3 + import com.mojang.brigadier.StringReader; 3 4 import com.mojang.brigadier.exceptions.CommandSyntaxException; 4 5 import dev.architectury.platform.Platform; 5 6 import net.minecraft.nbt.*; ··· 81 82 try { 82 83 if (file.exists()) { 83 84 content = FileUtils.readFileToString(file, StandardCharsets.UTF_8); 84 - NbtCompound c = SaferStringReader.parse(content); 85 + // TODO 1.21.5 reimplement saferstringreader 86 + NbtCompound c = StringNbtReader.readCompound(content); 85 87 c.remove("infinity_version"); 86 88 return c; 87 89 } ··· 95 97 File file = new File(path); 96 98 try { 97 99 String content = String.valueOf((new Formatter(Locale.US)).format(FileUtils.readFileToString(file, StandardCharsets.UTF_8), args)); 98 - NbtCompound c = StringNbtReader.parse(content); 100 + NbtCompound c = StringNbtReader.readCompound(content); 99 101 c.remove("infinity_version"); 100 102 return c; 101 103 } catch (IOException | CommandSyntaxException e) { ··· 120 122 int i = content.lastIndexOf("%"); 121 123 if (i == -1) { 122 124 try { 123 - return StringNbtReader.parse(content); 125 + return StringNbtReader.readCompound(content); 124 126 } catch (CommandSyntaxException e) { 125 127 throw new RuntimeException(e); 126 128 } ··· 168 170 case NbtLong nbtLong -> String.valueOf(boundsCheck(nbtLong.longValue())); 169 171 case NbtInt nbtInt -> String.valueOf(boundsCheck(nbtInt.intValue())); 170 172 case NbtShort nbtShort -> String.valueOf(boundsCheck(nbtShort.shortValue())); 171 - case NbtString nbtString -> "\"" + nbtString.asString().replace("\"", "\\\"") + "\""; 173 + case NbtString nbtString -> "\"" + nbtString.asString().get().replace("\"", "\\\"") + "\""; 172 174 default -> base.toString(); 173 175 }; 174 176 }
+3 -3
common/src/main/java/net/lerariemann/infinity/util/core/Easterizer.java
··· 30 30 name = NbtUtils.getString(compound, "name"); 31 31 if (compound.contains("type")) 32 32 typeMap.put(name, NbtUtils.getString(compound, "type")); 33 - if (compound.getType("aliases") == NbtElement.LIST_TYPE) { 33 + if (NbtUtils.getType(compound, "aliases") == NbtElement.LIST_TYPE) { 34 34 String finalName = name; 35 35 NbtUtils.getList(compound, "aliases", NbtElement.STRING_TYPE) 36 36 .stream() 37 37 .map(e -> (NbtString)e) 38 38 .map(NbtString::asString) 39 - .forEach(alias -> aliasMap.put(alias, finalName)); 39 + .forEach(alias -> aliasMap.put(alias.orElse(""), finalName)); 40 40 } 41 - else if (compound.getType("aliases") == NbtElement.STRING_TYPE) 41 + else if (NbtUtils.getType(compound, "aliases") == NbtElement.STRING_TYPE) 42 42 aliasMap.put(NbtUtils.getString(compound, "aliases"), name); 43 43 if (compound.contains("options")) { 44 44 optionmap.put(name, NbtUtils.getCompound(compound, "options"));
+22 -16
common/src/main/java/net/lerariemann/infinity/util/core/NbtUtils.java
··· 10 10 /** Contains various common use methods for working with {@link NbtCompound} objects. */ 11 11 public interface NbtUtils { 12 12 static String getString(NbtCompound data, String key, String def) { 13 - return data.contains(key, NbtElement.STRING_TYPE) ? data.getString(key) : def; 13 + return (NbtUtils.getType(data, key) == NbtElement.STRING_TYPE) ? NbtUtils.getString(data, key) : def; 14 14 } 15 15 static NbtCompound getCompound(NbtCompound data, String key, NbtCompound def) { 16 - return data.contains(key, NbtElement.COMPOUND_TYPE) ? data.getCompound(key) : def; 16 + return (NbtUtils.getType(data, key) == NbtElement.COMPOUND_TYPE) ? NbtUtils.getCompound(data, key) : def; 17 17 } 18 18 static float getFloat(NbtCompound data, String key, float def) { 19 - return data.contains(key, NbtElement.DOUBLE_TYPE) ? data.getFloat(key) : def; 19 + return (NbtUtils.getType(data, key) == NbtElement.FLOAT_TYPE) ? NbtUtils.getFloat(data, key) : def; 20 20 } 21 21 static int getInt(NbtCompound data, String key, int def) { 22 - return data.contains(key, NbtElement.INT_TYPE) ? data.getInt(key) : def; 22 + return (NbtUtils.getType(data, key) == NbtElement.INT_TYPE) ? NbtUtils.getInt(data, key) : def; 23 23 } 24 24 static double getDouble(NbtCompound data, String key, double def) { 25 - return data.contains(key, NbtElement.DOUBLE_TYPE) ? data.getDouble(key) : def; 25 + return (NbtUtils.getType(data, key) == NbtElement.DOUBLE_TYPE) ? NbtUtils.getDouble(data, key) : def; 26 26 } 27 27 static boolean getBoolean(NbtCompound data, String key, boolean def) { 28 - return data.contains(key) ? data.getBoolean(key) : def; 28 + return (data.contains(key)) ? NbtUtils.getBoolean(data, key) : def; 29 29 } 30 30 31 31 static String getString(NbtCompound data, String key) { 32 - return data.getString(key); 32 + return data.getString(key).orElse(""); 33 33 } 34 34 static NbtCompound getCompound(NbtCompound data, String key) { 35 - return data.getCompound(key); 35 + return data.getCompound(key).orElse(new NbtCompound()); 36 36 } 37 37 static float getFloat(NbtCompound data, String key) { 38 - return data.getFloat(key); 38 + return data.getFloat(key).orElse(0f); 39 39 } 40 40 static int getInt(NbtCompound data, String key) { 41 - return data.getInt(key); 41 + return data.getInt(key).orElse(0); 42 42 } 43 43 static double getDouble(NbtCompound data, String key) { 44 - return data.getDouble(key); 44 + return data.getDouble(key).orElse(0d); 45 45 } 46 46 static boolean getBoolean(NbtCompound data, String key) { 47 - return data.getBoolean(key); 47 + return data.getBoolean(key).orElse(false); 48 48 } 49 49 static short getShort(NbtCompound data, String key) { 50 - return data.getShort(key); 50 + return data.getShort(key).get(); 51 51 } 52 52 static NbtList getList(NbtCompound data, String key, byte nbttype) { 53 - return data.getList(key, nbttype); 53 + return data.getList(key).orElse(new NbtList()); 54 54 } 55 55 static int getInt(NbtList data, int key) { 56 - return data.getInt(key); 56 + return data.getInt(key).orElse(0); 57 + } 58 + static int getType(NbtCompound data, String key) { 59 + var d = data.get(key); 60 + if (d != null) 61 + return d.getType(); 62 + else return -1; 57 63 } 58 64 59 65 static String elementToName(NbtElement e) { 60 66 if (e instanceof NbtCompound compound) return NbtUtils.getString(compound, "Name"); 61 - else return e.asString(); 67 + else return e.asString().orElse(""); 62 68 } 63 69 static NbtCompound nameToElement(String block) { 64 70 NbtCompound res = new NbtCompound();
+2 -2
common/src/main/java/net/lerariemann/infinity/util/core/RandomProvider.java
··· 65 65 return applier2.apply(rules, key); 66 66 } 67 67 public static boolean rule(String key) { 68 - return getStaticRule((p, k) -> p.gameRules.getOrDefault(k, false), NbtCompound::getBoolean, key, false); 68 + return getStaticRule((p, k) -> p.gameRules.getOrDefault(k, false), NbtUtils::getBoolean, key, false); 69 69 } 70 70 public static int ruleInt(String key) { 71 71 return getStaticRule(RandomProvider::_ruleInt, (p, k) -> ((AbstractNbtNumber) Objects.requireNonNull(p.get(k))).intValue(), key, -1); ··· 138 138 139 139 NbtList disabledDimensions = NbtUtils.getList(rootConfig, "disabledDimensions", NbtElement.STRING_TYPE); 140 140 for (NbtElement jsonElement : disabledDimensions) { 141 - this.disabledDimensions.add(String.valueOf(jsonElement)); 141 + this.disabledDimensions.add((jsonElement.toString())); 142 142 } 143 143 } 144 144
+1 -2
common/src/main/java/net/lerariemann/infinity/util/core/SaferStringReader.java
··· 12 12 13 13 public static NbtCompound parse(String string) throws CommandSyntaxException { 14 14 SaferStringReader readerInner = new SaferStringReader(string); 15 - StringNbtReader reader = new StringNbtReader(readerInner); 16 15 17 - NbtCompound nbtCompound = reader.parseCompound(); 16 + NbtCompound nbtCompound = StringNbtReader.readCompound(string); 18 17 readerInner.skipWhitespace(); 19 18 if (readerInner.canRead()) { 20 19 throw StringNbtReader.TRAILING.createWithContext(readerInner);
+1 -1
common/src/main/java/net/lerariemann/infinity/util/screen/F4ScreenHandler.java
··· 78 78 79 79 public Factory(PlayerEntity player) { 80 80 f4 = player.getStackInHand(Hand.MAIN_HAND); 81 - slot = player.getInventory().selectedSlot; 81 + slot = player.getInventory().getSelectedSlot(); 82 82 Identifier id = f4.get(ModComponentTypes.DESTINATION.get()); 83 83 destination = id == null ? "" : id.toString(); 84 84 }
+1 -1
common/src/main/java/net/lerariemann/infinity/util/teleport/PortalCreator.java
··· 323 323 String key = id.getPath(); 324 324 if (comp.contains(key)) { 325 325 NbtList l; 326 - if (comp.getType(key) == NbtElement.STRING_TYPE) { 326 + if (comp.get(key).getType() == NbtElement.STRING_TYPE) { 327 327 l = new NbtList(); 328 328 l.add(comp.get(key)); 329 329 }
+3 -3
common/src/main/java/net/lerariemann/infinity/util/var/ColorLogic.java
··· 33 33 int defaultPortal = 0x00EEFF; 34 34 35 35 static int getChromaticColor(DyeColor dye) { 36 - return chromaticColors.getOrDefault(dye.getName(), 0xFFFFFF); 36 + return chromaticColors.getOrDefault(dye.name(), 0xFFFFFF); 37 37 } 38 38 39 39 static int getPureHue(double hue) { ··· 59 59 .replace("$", color))); 60 60 } 61 61 static Block getBlockByColor(DyeColor color, TagKey<Block> type) { 62 - return getBlockByColor(color.getName(), type); 62 + return getBlockByColor(color.name(), type); 63 63 } 64 64 65 65 static DyeColor getColorByState(BlockState state) { 66 66 for (TagKey<Block> key : supportedBlockTypes.keySet()) if (state.isIn(key)) { 67 67 Identifier id = Registries.BLOCK.getId(state.getBlock()); 68 - return DyeColor.byName( 68 + return DyeColor.byId( 69 69 id.getPath().replace(supportedBlockTypes.get(key).replace("$", ""), ""), 70 70 null); 71 71 }
+1 -1
fabric/src/main/resources/fabric.mod.json
··· 38 38 "depends": { 39 39 "fabricloader": ">=0.15.11", 40 40 "fabric-api": "*", 41 - "minecraft": "1.21.4", 41 + "minecraft": "1.21.5", 42 42 "java": ">=21", 43 43 "architectury": "*" 44 44 },
+6 -6
gradle.properties
··· 10 10 tbversion = 0 11 11 12 12 # Minecraft properties 13 - minecraft_version = 1.21.4 14 - yarn_mappings = 8 13 + minecraft_version = 1.21.5 14 + yarn_mappings = 1 15 15 16 16 # Dependencies 17 - architectury_api_version = 15.0.3 17 + architectury_api_version = 16.1.4 18 18 19 19 # Fabric Dependencies 20 20 fabric_loader_version = 0.16.13 21 - fabric_api_version = 0.119.3+1.21.4 21 + fabric_api_version = 0.128.1+1.21.5 22 22 23 23 # NeoForge Dependencies 24 - neoforge_version = 21.4.141 24 + neoforge_version = 21.5.81 25 25 yarn_mappings_patch_neoforge_version = 1.21+build.4 26 26 # Forgified Fabric API module versions 27 27 forgified_fabric_api_base_version = 0.4.42+d1308ded19 ··· 37 37 # Optional Dependencies 38 38 catalogue_version = 5631367 39 39 cloth_version = 17.0.144 40 - modmenu_version = 13.0.3 40 + modmenu_version = 14.0.0-rc.2 41 41 emi_version = 1.1.18 42 42 cct_version = 1.115.0 43 43 dimlib_version = v1.1.0-mc1.21.1