mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-29 21:02:59 +00:00 
			
		
		
		
	Use a single upgrade type for modems
Replace turtle_modem_{normal,advanced} with a single turtle_modem
upgrade (and likewise for pocket upgrades). This is slightly more
complex (we now need a custom codec), but I think is more idiomatic.
			
			
This commit is contained in:
		| @@ -13,8 +13,7 @@ import net.minecraft.core.component.DataComponentPatch; | ||||
| import net.minecraft.resources.ResourceLocation; | ||||
| 
 | ||||
| import javax.annotation.Nullable; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.stream.Stream; | ||||
| 
 | ||||
| /** | ||||
|  * Provides models for a {@link ITurtleUpgrade}. | ||||
| @@ -41,17 +40,17 @@ public interface TurtleUpgradeModeller<T extends ITurtleUpgrade> { | ||||
|     TransformedModel getModel(T upgrade, @Nullable ITurtleAccess turtle, TurtleSide side, DataComponentPatch data); | ||||
| 
 | ||||
|     /** | ||||
|      * Get a list of models that this turtle modeller depends on. | ||||
|      * Get the models that this turtle modeller depends on. | ||||
|      * <p> | ||||
|      * Models included in this list will be loaded and baked alongside item and block models, and so may be referenced | ||||
|      * Models included in this stream will be loaded and baked alongside item and block models, and so may be referenced | ||||
|      * by {@link TransformedModel#of(ResourceLocation)}. You do not need to override this method if you will load models | ||||
|      * by other means. | ||||
|      * | ||||
|      * @return A list of models that this modeller depends on. | ||||
|      * @see UnbakedModel#getDependencies() | ||||
|      */ | ||||
|     default Collection<ResourceLocation> getDependencies() { | ||||
|         return List.of(); | ||||
|     default Stream<ResourceLocation> getDependencies() { | ||||
|         return Stream.of(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @@ -85,8 +84,8 @@ public interface TurtleUpgradeModeller<T extends ITurtleUpgrade> { | ||||
|             } | ||||
| 
 | ||||
|             @Override | ||||
|             public Collection<ResourceLocation> getDependencies() { | ||||
|                 return List.of(left, right); | ||||
|             public Stream<ResourceLocation> getDependencies() { | ||||
|                 return Stream.of(left, right); | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
|   | ||||
| @@ -125,8 +125,7 @@ public final class ClientRegistry { | ||||
|             new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_crafting_table_left"), | ||||
|             new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_crafting_table_right") | ||||
|         )); | ||||
|         register.register(ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM_NORMAL.get(), new TurtleModemModeller(false)); | ||||
|         register.register(ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM_ADVANCED.get(), new TurtleModemModeller(true)); | ||||
|         register.register(ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM.get(), new TurtleModemModeller()); | ||||
|         register.register(ModRegistry.TurtleUpgradeTypes.TOOL.get(), TurtleUpgradeModeller.flatItem()); | ||||
|     } | ||||
| 
 | ||||
|   | ||||
| @@ -15,44 +15,46 @@ import net.minecraft.core.component.DataComponentPatch; | ||||
| import net.minecraft.resources.ResourceLocation; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| 
 | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.stream.Stream; | ||||
| 
 | ||||
| /** | ||||
|  * A {@link TurtleUpgradeModeller} for modems, providing different models depending on if the modem is on/off. | ||||
|  */ | ||||
| public class TurtleModemModeller implements TurtleUpgradeModeller<TurtleModem> { | ||||
|     private final ResourceLocation leftOffModel; | ||||
|     private final ResourceLocation rightOffModel; | ||||
|     private final ResourceLocation leftOnModel; | ||||
|     private final ResourceLocation rightOnModel; | ||||
| 
 | ||||
|     public TurtleModemModeller(boolean advanced) { | ||||
|         if (advanced) { | ||||
|             leftOffModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_advanced_off_left"); | ||||
|             rightOffModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_advanced_off_right"); | ||||
|             leftOnModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_advanced_on_left"); | ||||
|             rightOnModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_advanced_on_right"); | ||||
|         } else { | ||||
|             leftOffModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_normal_off_left"); | ||||
|             rightOffModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_normal_off_right"); | ||||
|             leftOnModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_normal_on_left"); | ||||
|             rightOnModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_normal_on_right"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public TransformedModel getModel(TurtleModem upgrade, @Nullable ITurtleAccess turtle, TurtleSide side, DataComponentPatch data) { | ||||
|         var component = data.get(ModRegistry.DataComponents.ON.get()); | ||||
|         var active = component != null && component.isPresent() && component.get(); | ||||
| 
 | ||||
|         var models = upgrade.advanced() ? ModemModels.ADVANCED : ModemModels.NORMAL; | ||||
|         return side == TurtleSide.LEFT | ||||
|             ? TransformedModel.of(active ? leftOnModel : leftOffModel) | ||||
|             : TransformedModel.of(active ? rightOnModel : rightOffModel); | ||||
|             ? TransformedModel.of(active ? models.leftOnModel() : models.leftOffModel()) | ||||
|             : TransformedModel.of(active ? models.rightOnModel() : models.rightOffModel()); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public Collection<ResourceLocation> getDependencies() { | ||||
|         return List.of(leftOffModel, rightOffModel, leftOnModel, rightOnModel); | ||||
|     public Stream<ResourceLocation> getDependencies() { | ||||
|         return Stream.of(ModemModels.NORMAL, ModemModels.ADVANCED).flatMap(ModemModels::getDependencies); | ||||
|     } | ||||
| 
 | ||||
|     private record ModemModels( | ||||
|         ResourceLocation leftOffModel, ResourceLocation rightOffModel, | ||||
|         ResourceLocation leftOnModel, ResourceLocation rightOnModel | ||||
|     ) { | ||||
|         private static final ModemModels NORMAL = create("normal"); | ||||
|         private static final ModemModels ADVANCED = create("advanced"); | ||||
| 
 | ||||
|         public static ModemModels create(String type) { | ||||
|             return new ModemModels( | ||||
|                 new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_" + type + "_off_left"), | ||||
|                 new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_" + type + "_off_right"), | ||||
|                 new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_" + type + "_on_left"), | ||||
|                 new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_" + type + "_on_right") | ||||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         public Stream<ResourceLocation> getDependencies() { | ||||
|             return Stream.of(leftOffModel, rightOffModel, leftOnModel, rightOnModel); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -75,6 +75,6 @@ public final class TurtleUpgradeModellers { | ||||
| 
 | ||||
|     public static Stream<ResourceLocation> getDependencies() { | ||||
|         fetchedModels = true; | ||||
|         return turtleModels.values().stream().flatMap(x -> x.getDependencies().stream()); | ||||
|         return turtleModels.values().stream().flatMap(TurtleUpgradeModeller::getDependencies); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| {"type": "computercraft:wireless_modem_advanced", "item": "computercraft:wireless_modem_advanced"} | ||||
| {"type": "computercraft:wireless_modem", "advanced": true, "item": "computercraft:wireless_modem_advanced"} | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| {"type": "computercraft:wireless_modem_normal", "item": "computercraft:wireless_modem_normal"} | ||||
| {"type": "computercraft:wireless_modem", "advanced": false, "item": "computercraft:wireless_modem_normal"} | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| {"type": "computercraft:wireless_modem_advanced", "item": "computercraft:wireless_modem_advanced"} | ||||
| {"type": "computercraft:wireless_modem", "advanced": true, "item": "computercraft:wireless_modem_advanced"} | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| {"type": "computercraft:wireless_modem_normal", "item": "computercraft:wireless_modem_normal"} | ||||
| {"type": "computercraft:wireless_modem", "advanced": false, "item": "computercraft:wireless_modem_normal"} | ||||
|   | ||||
| @@ -392,10 +392,8 @@ public final class ModRegistry { | ||||
|             REGISTRY.register("speaker", () -> UpgradeType.simpleWithCustomItem(TurtleSpeaker::new)); | ||||
|         public static final RegistryEntry<UpgradeType<TurtleCraftingTable>> WORKBENCH = | ||||
|             REGISTRY.register("workbench", () -> UpgradeType.simpleWithCustomItem(TurtleCraftingTable::new)); | ||||
|         public static final RegistryEntry<UpgradeType<TurtleModem>> WIRELESS_MODEM_NORMAL = | ||||
|             REGISTRY.register("wireless_modem_normal", () -> UpgradeType.simpleWithCustomItem(item -> new TurtleModem(item, false))); | ||||
|         public static final RegistryEntry<UpgradeType<TurtleModem>> WIRELESS_MODEM_ADVANCED = | ||||
|             REGISTRY.register("wireless_modem_advanced", () -> UpgradeType.simpleWithCustomItem(item -> new TurtleModem(item, true))); | ||||
|         public static final RegistryEntry<UpgradeType<TurtleModem>> WIRELESS_MODEM = | ||||
|             REGISTRY.register("wireless_modem", () -> UpgradeType.create(TurtleModem.CODEC)); | ||||
| 
 | ||||
|         public static final RegistryEntry<UpgradeType<TurtleTool>> TOOL = REGISTRY.register("tool", () -> UpgradeType.create(TurtleTool.CODEC)); | ||||
|     } | ||||
| @@ -405,10 +403,7 @@ public final class ModRegistry { | ||||
| 
 | ||||
|         public static final RegistryEntry<UpgradeType<PocketSpeaker>> SPEAKER = | ||||
|             REGISTRY.register("speaker", () -> UpgradeType.simpleWithCustomItem(PocketSpeaker::new)); | ||||
|         public static final RegistryEntry<UpgradeType<PocketModem>> WIRELESS_MODEM_NORMAL = | ||||
|             REGISTRY.register("wireless_modem_normal", () -> UpgradeType.simpleWithCustomItem(item -> new PocketModem(item, false))); | ||||
|         public static final RegistryEntry<UpgradeType<PocketModem>> WIRELESS_MODEM_ADVANCED = | ||||
|             REGISTRY.register("wireless_modem_advanced", () -> UpgradeType.simpleWithCustomItem(item -> new PocketModem(item, true))); | ||||
|         public static final RegistryEntry<UpgradeType<PocketModem>> WIRELESS_MODEM = REGISTRY.register("wireless_modem", () -> UpgradeType.create(PocketModem.CODEC)); | ||||
|     } | ||||
| 
 | ||||
|     public static class Menus { | ||||
|   | ||||
| @@ -4,17 +4,26 @@ | ||||
| 
 | ||||
| package dan200.computercraft.shared.pocket.peripherals; | ||||
| 
 | ||||
| import com.mojang.serialization.Codec; | ||||
| import com.mojang.serialization.MapCodec; | ||||
| import com.mojang.serialization.codecs.RecordCodecBuilder; | ||||
| import dan200.computercraft.api.peripheral.IPeripheral; | ||||
| import dan200.computercraft.api.pocket.AbstractPocketUpgrade; | ||||
| import dan200.computercraft.api.pocket.IPocketAccess; | ||||
| import dan200.computercraft.api.upgrades.UpgradeType; | ||||
| import dan200.computercraft.shared.ModRegistry; | ||||
| import dan200.computercraft.shared.peripheral.modem.wireless.WirelessModemPeripheral; | ||||
| import net.minecraft.core.registries.BuiltInRegistries; | ||||
| import net.minecraft.world.item.ItemStack; | ||||
| 
 | ||||
| import javax.annotation.Nullable; | ||||
| 
 | ||||
| public class PocketModem extends AbstractPocketUpgrade { | ||||
|     public static final MapCodec<PocketModem> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( | ||||
|         BuiltInRegistries.ITEM.byNameCodec().fieldOf("item").forGetter(x -> x.getCraftingItem().getItem()), | ||||
|         Codec.BOOL.fieldOf("advanced").forGetter(x -> x.advanced) | ||||
|     ).apply(instance, (item, advanced) -> new PocketModem(new ItemStack(item), advanced))); | ||||
| 
 | ||||
|     private final boolean advanced; | ||||
| 
 | ||||
|     public PocketModem(ItemStack stack, boolean advanced) { | ||||
| @@ -40,8 +49,6 @@ public class PocketModem extends AbstractPocketUpgrade { | ||||
| 
 | ||||
|     @Override | ||||
|     public UpgradeType<PocketModem> getType() { | ||||
|         return advanced | ||||
|             ? ModRegistry.PocketUpgradeTypes.WIRELESS_MODEM_ADVANCED.get() | ||||
|             : ModRegistry.PocketUpgradeTypes.WIRELESS_MODEM_NORMAL.get(); | ||||
|         return ModRegistry.PocketUpgradeTypes.WIRELESS_MODEM.get(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -4,6 +4,9 @@ | ||||
| 
 | ||||
| package dan200.computercraft.shared.turtle.upgrades; | ||||
| 
 | ||||
| import com.mojang.serialization.Codec; | ||||
| import com.mojang.serialization.MapCodec; | ||||
| import com.mojang.serialization.codecs.RecordCodecBuilder; | ||||
| import dan200.computercraft.api.peripheral.IPeripheral; | ||||
| import dan200.computercraft.api.turtle.*; | ||||
| import dan200.computercraft.api.upgrades.UpgradeType; | ||||
| @@ -12,6 +15,7 @@ import dan200.computercraft.shared.peripheral.modem.ModemState; | ||||
| import dan200.computercraft.shared.peripheral.modem.wireless.WirelessModemPeripheral; | ||||
| import net.minecraft.core.Direction; | ||||
| import net.minecraft.core.component.DataComponentPatch; | ||||
| import net.minecraft.core.registries.BuiltInRegistries; | ||||
| import net.minecraft.world.item.ItemStack; | ||||
| import net.minecraft.world.level.Level; | ||||
| import net.minecraft.world.phys.Vec3; | ||||
| @@ -19,6 +23,11 @@ import net.minecraft.world.phys.Vec3; | ||||
| import javax.annotation.Nullable; | ||||
| 
 | ||||
| public class TurtleModem extends AbstractTurtleUpgrade { | ||||
|     public static final MapCodec<TurtleModem> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( | ||||
|         BuiltInRegistries.ITEM.byNameCodec().fieldOf("item").forGetter(x -> x.getCraftingItem().getItem()), | ||||
|         Codec.BOOL.fieldOf("advanced").forGetter(TurtleModem::advanced) | ||||
|     ).apply(instance, (item, advanced) -> new TurtleModem(new ItemStack(item), advanced))); | ||||
| 
 | ||||
|     private static class Peripheral extends WirelessModemPeripheral { | ||||
|         private final ITurtleAccess turtle; | ||||
| 
 | ||||
| @@ -55,6 +64,10 @@ public class TurtleModem extends AbstractTurtleUpgrade { | ||||
|         this.advanced = advanced; | ||||
|     } | ||||
| 
 | ||||
|     public boolean advanced() { | ||||
|         return advanced; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public IPeripheral createPeripheral(ITurtleAccess turtle, TurtleSide side) { | ||||
|         return new Peripheral(turtle, advanced); | ||||
| @@ -86,8 +99,6 @@ public class TurtleModem extends AbstractTurtleUpgrade { | ||||
| 
 | ||||
|     @Override | ||||
|     public UpgradeType<TurtleModem> getType() { | ||||
|         return advanced | ||||
|             ? ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM_ADVANCED.get() | ||||
|             : ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM_NORMAL.get(); | ||||
|         return ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM.get(); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jonathan Coates
					Jonathan Coates