Skip to content

Commit 4bb82be

Browse files
committed
Require ColoredBlockContainers to have a ResourceLocation ID
1 parent 5c2a130 commit 4bb82be

File tree

7 files changed

+56
-10
lines changed

7 files changed

+56
-10
lines changed

src/main/java/gregtech/api/color/ColoredBlockContainer.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,23 @@
66
import gregtech.api.color.containers.MTEColorContainer;
77
import gregtech.api.color.containers.NullColorContainer;
88
import gregtech.api.color.containers.VanillaColorContainer;
9+
import gregtech.api.util.GTUtility;
910
import gregtech.api.util.Mods;
1011

1112
import net.minecraft.entity.player.EntityPlayer;
1213
import net.minecraft.item.EnumDyeColor;
1314
import net.minecraft.util.EnumFacing;
15+
import net.minecraft.util.ResourceLocation;
1416
import net.minecraft.util.math.BlockPos;
1517
import net.minecraft.world.World;
1618

17-
import it.unimi.dsi.fastutil.objects.ObjectArraySet;
19+
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
1820
import org.jetbrains.annotations.ApiStatus;
1921
import org.jetbrains.annotations.NotNull;
2022
import org.jetbrains.annotations.Nullable;
2123

24+
import java.util.Map;
2225
import java.util.Objects;
23-
import java.util.Set;
2426

2527
/**
2628
* Used to provide a consistent interface for dealing with colored blocks, whether vanilla or modded. <br/>
@@ -30,16 +32,24 @@
3032
public abstract class ColoredBlockContainer {
3133

3234
@NotNull
33-
private static final Set<ColoredBlockContainer> CONTAINERS = new ObjectArraySet<>(4);
35+
private static final Map<ResourceLocation, ColoredBlockContainer> CONTAINERS = new Object2ObjectOpenHashMap<>(5);
3436

3537
public static void registerContainer(@NotNull ColoredBlockContainer container) {
36-
CONTAINERS.add(Objects.requireNonNull(container, "A null ColoredBlockContainer cannot be registered!"));
38+
Objects.requireNonNull(container, "A null ColoredBlockContainer cannot be registered!");
39+
ResourceLocation id = container.id;
40+
Objects.requireNonNull(id, "A null ColoredBlockContainer cannot have a null ID!");
41+
if (CONTAINERS.containsKey(id)) {
42+
throw new IllegalArgumentException(
43+
String.format("A ColoredBlockContainer with an ID of %s already exists!", id));
44+
}
45+
46+
CONTAINERS.put(id, container);
3747
}
3848

3949
public static @NotNull ColoredBlockContainer getContainer(@NotNull World world, @NotNull BlockPos pos,
4050
@NotNull EnumFacing facing,
4151
@NotNull EntityPlayer player) {
42-
for (ColoredBlockContainer container : CONTAINERS) {
52+
for (ColoredBlockContainer container : CONTAINERS.values()) {
4353
if (container.isBlockValid(world, pos, facing, player)) {
4454
return container;
4555
}
@@ -50,13 +60,20 @@ public static void registerContainer(@NotNull ColoredBlockContainer container) {
5060

5161
@ApiStatus.Internal
5262
public static void registerCEuContainers() {
53-
registerContainer(new GTPipeColorContainer());
54-
registerContainer(new MTEColorContainer());
63+
registerContainer(new GTPipeColorContainer(GTUtility.gregtechId("pipe")));
64+
registerContainer(new MTEColorContainer(GTUtility.gregtechId("mte")));
5565
if (Mods.AppliedEnergistics2.isModLoaded()) {
56-
registerContainer(new AE2ColorContainer());
66+
registerContainer(new AE2ColorContainer(GTUtility.gregtechId("ae2")));
5767
}
58-
registerContainer(new VanillaColorContainer());
59-
registerContainer(new BedColorContainer());
68+
registerContainer(new VanillaColorContainer(GTUtility.gregtechId("vanilla")));
69+
registerContainer(new BedColorContainer(GTUtility.gregtechId("bed")));
70+
}
71+
72+
@NotNull
73+
protected final ResourceLocation id;
74+
75+
public ColoredBlockContainer(@NotNull ResourceLocation id) {
76+
this.id = id;
6077
}
6178

6279
public abstract boolean isBlockValid(@NotNull World world, @NotNull BlockPos pos, @NotNull EnumFacing facing,

src/main/java/gregtech/api/color/containers/AE2ColorContainer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minecraft.item.EnumDyeColor;
77
import net.minecraft.tileentity.TileEntity;
88
import net.minecraft.util.EnumFacing;
9+
import net.minecraft.util.ResourceLocation;
910
import net.minecraft.util.math.BlockPos;
1011
import net.minecraft.world.World;
1112

@@ -16,6 +17,10 @@
1617

1718
public class AE2ColorContainer extends ColoredBlockContainer {
1819

20+
public AE2ColorContainer(@NotNull ResourceLocation id) {
21+
super(id);
22+
}
23+
1924
@Override
2025
public boolean setColor(@NotNull World world, @NotNull BlockPos pos, @NotNull EnumFacing facing,
2126
@NotNull EntityPlayer player, @Nullable EnumDyeColor newColor) {

src/main/java/gregtech/api/color/containers/BedColorContainer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import net.minecraft.tileentity.TileEntity;
1111
import net.minecraft.tileentity.TileEntityBed;
1212
import net.minecraft.util.EnumFacing;
13+
import net.minecraft.util.ResourceLocation;
1314
import net.minecraft.util.math.BlockPos;
1415
import net.minecraft.world.World;
1516

@@ -18,6 +19,10 @@
1819

1920
public class BedColorContainer extends ColoredBlockContainer {
2021

22+
public BedColorContainer(@NotNull ResourceLocation id) {
23+
super(id);
24+
}
25+
2126
@Override
2227
public boolean setColor(@NotNull World world, @NotNull BlockPos pos, @NotNull EnumFacing facing,
2328
@NotNull EntityPlayer player, @Nullable EnumDyeColor newColor) {

src/main/java/gregtech/api/color/containers/GTPipeColorContainer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import net.minecraft.entity.player.EntityPlayer;
88
import net.minecraft.item.EnumDyeColor;
99
import net.minecraft.util.EnumFacing;
10+
import net.minecraft.util.ResourceLocation;
1011
import net.minecraft.util.math.BlockPos;
1112
import net.minecraft.world.World;
1213

@@ -15,6 +16,10 @@
1516

1617
public class GTPipeColorContainer extends ColoredBlockContainer {
1718

19+
public GTPipeColorContainer(@NotNull ResourceLocation id) {
20+
super(id);
21+
}
22+
1823
@Override
1924
public boolean setColor(@NotNull World world, @NotNull BlockPos pos, @NotNull EnumFacing facing,
2025
@NotNull EntityPlayer player, @Nullable EnumDyeColor newColor) {

src/main/java/gregtech/api/color/containers/MTEColorContainer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import net.minecraft.entity.player.EntityPlayer;
88
import net.minecraft.item.EnumDyeColor;
99
import net.minecraft.util.EnumFacing;
10+
import net.minecraft.util.ResourceLocation;
1011
import net.minecraft.util.math.BlockPos;
1112
import net.minecraft.world.World;
1213

@@ -17,6 +18,10 @@
1718

1819
public class MTEColorContainer extends ColoredBlockContainer {
1920

21+
public MTEColorContainer(@NotNull ResourceLocation id) {
22+
super(id);
23+
}
24+
2025
@Override
2126
public boolean setColor(@NotNull World world, @NotNull BlockPos pos, @NotNull EnumFacing facing,
2227
@NotNull EntityPlayer player, @Nullable EnumDyeColor newColor) {

src/main/java/gregtech/api/color/containers/NullColorContainer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ public class NullColorContainer extends ColoredBlockContainer {
1515

1616
public static final NullColorContainer NULL_CONTAINER = new NullColorContainer();
1717

18+
public NullColorContainer() {
19+
super();
20+
}
21+
1822
@Override
1923
public boolean setColor(@NotNull World world, @NotNull BlockPos pos, @Nullable EnumFacing facing,
2024
@NotNull EntityPlayer player, @Nullable EnumDyeColor newColor) {

src/main/java/gregtech/api/color/containers/VanillaColorContainer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import net.minecraft.init.Blocks;
1313
import net.minecraft.item.EnumDyeColor;
1414
import net.minecraft.util.EnumFacing;
15+
import net.minecraft.util.ResourceLocation;
1516
import net.minecraft.util.math.BlockPos;
1617
import net.minecraft.world.World;
1718

@@ -35,6 +36,10 @@ public class VanillaColorContainer extends ColoredBlockContainer {
3536
Blocks.GLASS_PANE, BlockStainedGlassPane.COLOR,
3637
Blocks.HARDENED_CLAY, BlockColored.COLOR);
3738

39+
public VanillaColorContainer(@NotNull ResourceLocation id) {
40+
super(id);
41+
}
42+
3843
@Override
3944
public boolean setColor(@NotNull World world, @NotNull BlockPos pos, @NotNull EnumFacing facing,
4045
@NotNull EntityPlayer player, @Nullable EnumDyeColor newColor) {

0 commit comments

Comments
 (0)