mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-01-26 08:56:54 +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:
parent
06ac373e83
commit
959bdaeb61
@ -13,8 +13,7 @@ import net.minecraft.core.component.DataComponentPatch;
|
|||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Collection;
|
import java.util.stream.Stream;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides models for a {@link ITurtleUpgrade}.
|
* 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);
|
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>
|
* <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 {@link TransformedModel#of(ResourceLocation)}. You do not need to override this method if you will load models
|
||||||
* by other means.
|
* by other means.
|
||||||
*
|
*
|
||||||
* @return A list of models that this modeller depends on.
|
* @return A list of models that this modeller depends on.
|
||||||
* @see UnbakedModel#getDependencies()
|
* @see UnbakedModel#getDependencies()
|
||||||
*/
|
*/
|
||||||
default Collection<ResourceLocation> getDependencies() {
|
default Stream<ResourceLocation> getDependencies() {
|
||||||
return List.of();
|
return Stream.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,8 +84,8 @@ public interface TurtleUpgradeModeller<T extends ITurtleUpgrade> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<ResourceLocation> getDependencies() {
|
public Stream<ResourceLocation> getDependencies() {
|
||||||
return List.of(left, right);
|
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_left"),
|
||||||
new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_crafting_table_right")
|
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.get(), new TurtleModemModeller());
|
||||||
register.register(ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM_ADVANCED.get(), new TurtleModemModeller(true));
|
|
||||||
register.register(ModRegistry.TurtleUpgradeTypes.TOOL.get(), TurtleUpgradeModeller.flatItem());
|
register.register(ModRegistry.TurtleUpgradeTypes.TOOL.get(), TurtleUpgradeModeller.flatItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,44 +15,46 @@ import net.minecraft.core.component.DataComponentPatch;
|
|||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.stream.Stream;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link TurtleUpgradeModeller} for modems, providing different models depending on if the modem is on/off.
|
* A {@link TurtleUpgradeModeller} for modems, providing different models depending on if the modem is on/off.
|
||||||
*/
|
*/
|
||||||
public class TurtleModemModeller implements TurtleUpgradeModeller<TurtleModem> {
|
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
|
@Override
|
||||||
public TransformedModel getModel(TurtleModem upgrade, @Nullable ITurtleAccess turtle, TurtleSide side, DataComponentPatch data) {
|
public TransformedModel getModel(TurtleModem upgrade, @Nullable ITurtleAccess turtle, TurtleSide side, DataComponentPatch data) {
|
||||||
var component = data.get(ModRegistry.DataComponents.ON.get());
|
var component = data.get(ModRegistry.DataComponents.ON.get());
|
||||||
var active = component != null && component.isPresent() && component.get();
|
var active = component != null && component.isPresent() && component.get();
|
||||||
|
|
||||||
|
var models = upgrade.advanced() ? ModemModels.ADVANCED : ModemModels.NORMAL;
|
||||||
return side == TurtleSide.LEFT
|
return side == TurtleSide.LEFT
|
||||||
? TransformedModel.of(active ? leftOnModel : leftOffModel)
|
? TransformedModel.of(active ? models.leftOnModel() : models.leftOffModel())
|
||||||
: TransformedModel.of(active ? rightOnModel : rightOffModel);
|
: TransformedModel.of(active ? models.rightOnModel() : models.rightOffModel());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<ResourceLocation> getDependencies() {
|
public Stream<ResourceLocation> getDependencies() {
|
||||||
return List.of(leftOffModel, rightOffModel, leftOnModel, rightOnModel);
|
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() {
|
public static Stream<ResourceLocation> getDependencies() {
|
||||||
fetchedModels = true;
|
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));
|
REGISTRY.register("speaker", () -> UpgradeType.simpleWithCustomItem(TurtleSpeaker::new));
|
||||||
public static final RegistryEntry<UpgradeType<TurtleCraftingTable>> WORKBENCH =
|
public static final RegistryEntry<UpgradeType<TurtleCraftingTable>> WORKBENCH =
|
||||||
REGISTRY.register("workbench", () -> UpgradeType.simpleWithCustomItem(TurtleCraftingTable::new));
|
REGISTRY.register("workbench", () -> UpgradeType.simpleWithCustomItem(TurtleCraftingTable::new));
|
||||||
public static final RegistryEntry<UpgradeType<TurtleModem>> WIRELESS_MODEM_NORMAL =
|
public static final RegistryEntry<UpgradeType<TurtleModem>> WIRELESS_MODEM =
|
||||||
REGISTRY.register("wireless_modem_normal", () -> UpgradeType.simpleWithCustomItem(item -> new TurtleModem(item, false)));
|
REGISTRY.register("wireless_modem", () -> UpgradeType.create(TurtleModem.CODEC));
|
||||||
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<TurtleTool>> TOOL = REGISTRY.register("tool", () -> UpgradeType.create(TurtleTool.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 =
|
public static final RegistryEntry<UpgradeType<PocketSpeaker>> SPEAKER =
|
||||||
REGISTRY.register("speaker", () -> UpgradeType.simpleWithCustomItem(PocketSpeaker::new));
|
REGISTRY.register("speaker", () -> UpgradeType.simpleWithCustomItem(PocketSpeaker::new));
|
||||||
public static final RegistryEntry<UpgradeType<PocketModem>> WIRELESS_MODEM_NORMAL =
|
public static final RegistryEntry<UpgradeType<PocketModem>> WIRELESS_MODEM = REGISTRY.register("wireless_modem", () -> UpgradeType.create(PocketModem.CODEC));
|
||||||
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 class Menus {
|
public static class Menus {
|
||||||
|
@ -4,17 +4,26 @@
|
|||||||
|
|
||||||
package dan200.computercraft.shared.pocket.peripherals;
|
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.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.api.pocket.AbstractPocketUpgrade;
|
import dan200.computercraft.api.pocket.AbstractPocketUpgrade;
|
||||||
import dan200.computercraft.api.pocket.IPocketAccess;
|
import dan200.computercraft.api.pocket.IPocketAccess;
|
||||||
import dan200.computercraft.api.upgrades.UpgradeType;
|
import dan200.computercraft.api.upgrades.UpgradeType;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessModemPeripheral;
|
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessModemPeripheral;
|
||||||
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class PocketModem extends AbstractPocketUpgrade {
|
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;
|
private final boolean advanced;
|
||||||
|
|
||||||
public PocketModem(ItemStack stack, boolean advanced) {
|
public PocketModem(ItemStack stack, boolean advanced) {
|
||||||
@ -40,8 +49,6 @@ public class PocketModem extends AbstractPocketUpgrade {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UpgradeType<PocketModem> getType() {
|
public UpgradeType<PocketModem> getType() {
|
||||||
return advanced
|
return ModRegistry.PocketUpgradeTypes.WIRELESS_MODEM.get();
|
||||||
? ModRegistry.PocketUpgradeTypes.WIRELESS_MODEM_ADVANCED.get()
|
|
||||||
: ModRegistry.PocketUpgradeTypes.WIRELESS_MODEM_NORMAL.get();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
|
|
||||||
package dan200.computercraft.shared.turtle.upgrades;
|
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.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.api.turtle.*;
|
import dan200.computercraft.api.turtle.*;
|
||||||
import dan200.computercraft.api.upgrades.UpgradeType;
|
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 dan200.computercraft.shared.peripheral.modem.wireless.WirelessModemPeripheral;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.component.DataComponentPatch;
|
import net.minecraft.core.component.DataComponentPatch;
|
||||||
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
@ -19,6 +23,11 @@ import net.minecraft.world.phys.Vec3;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TurtleModem extends AbstractTurtleUpgrade {
|
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 static class Peripheral extends WirelessModemPeripheral {
|
||||||
private final ITurtleAccess turtle;
|
private final ITurtleAccess turtle;
|
||||||
|
|
||||||
@ -55,6 +64,10 @@ public class TurtleModem extends AbstractTurtleUpgrade {
|
|||||||
this.advanced = advanced;
|
this.advanced = advanced;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean advanced() {
|
||||||
|
return advanced;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPeripheral createPeripheral(ITurtleAccess turtle, TurtleSide side) {
|
public IPeripheral createPeripheral(ITurtleAccess turtle, TurtleSide side) {
|
||||||
return new Peripheral(turtle, advanced);
|
return new Peripheral(turtle, advanced);
|
||||||
@ -86,8 +99,6 @@ public class TurtleModem extends AbstractTurtleUpgrade {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UpgradeType<TurtleModem> getType() {
|
public UpgradeType<TurtleModem> getType() {
|
||||||
return advanced
|
return ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM.get();
|
||||||
? ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM_ADVANCED.get()
|
|
||||||
: ModRegistry.TurtleUpgradeTypes.WIRELESS_MODEM_NORMAL.get();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user