Skip to content

Commit d8dffaa

Browse files
committed
integers as map keys are pretty dumb. Resolves #847
1 parent 7eefe47 commit d8dffaa

File tree

6 files changed

+22
-19
lines changed

6 files changed

+22
-19
lines changed

src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package de.dafuqs.spectrum.blocks.present;
22

33
import com.mojang.serialization.*;
4+
import de.dafuqs.spectrum.api.energy.color.*;
45
import de.dafuqs.spectrum.api.item.*;
56
import de.dafuqs.spectrum.helpers.*;
67
import de.dafuqs.spectrum.networking.s2c_payloads.*;
@@ -157,7 +158,7 @@ public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource
157158
int openingTick = presentBlockEntity.openingTick();
158159
Vec3 posVec = new Vec3(pos.getX() + 0.5, pos.getY() + 0.25, pos.getZ() + 0.5);
159160
if (openingTick >= OPENING_STEPS) {
160-
spawnParticles(world, pos, presentBlockEntity.getColors());
161+
spawnParticles(world, pos, presentBlockEntity.getStack());
161162
presentBlockEntity.triggerAdvancement();
162163
if (presentBlockEntity.isEmpty()) {
163164
world.playSound(null, posVec.x, posVec.y, posVec.z, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5F, 0.8F);
@@ -179,24 +180,25 @@ public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource
179180
world.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState());
180181
} else {
181182
world.playSound(null, posVec.x, posVec.y, posVec.z, SoundEvents.SAND_PLACE, SoundSource.BLOCKS, 0.8F + openingTick * 0.1F, 1.0F);
182-
spawnParticles(world, pos, presentBlockEntity.getColors());
183+
spawnParticles(world, pos, presentBlockEntity.getStack());
183184
}
184185
}
185186
world.scheduleTick(pos, state.getBlock(), TICKS_PER_OPENING_STEP);
186187
}
187188
}
188189

189-
public static void spawnParticles(ServerLevel world, BlockPos pos, Map<Integer, Integer> colors) {
190+
public static void spawnParticles(ServerLevel world, BlockPos pos, ItemStack present) {
191+
Map<InkColor, Integer> colors = PresentBlockItem.getWrapData(present).colors();
190192
PlayPresentOpeningParticlesPayload.playPresentOpeningParticles(world, pos, colors);
191193
}
192194

193-
public static void spawnParticlesClient(Level world, BlockPos pos, Map<Integer, Integer> colors) {
195+
public static void spawnParticlesClient(Level world, BlockPos pos, Map<InkColor, Integer> colors) {
194196
if (colors.isEmpty()) {
195197
int randomColor = DyeColor.byId(world.random.nextInt(DyeColor.values().length)).getTextureDiffuseColor();
196198
spawnParticlesClient(world, pos, randomColor, 15);
197199
} else {
198-
for (Map.Entry<Integer, Integer> color : colors.entrySet()) {
199-
spawnParticlesClient(world, pos, color.getKey(), color.getValue() * 10);
200+
for (Map.Entry<InkColor, Integer> color : colors.entrySet()) {
201+
spawnParticlesClient(world, pos, color.getKey().getColorInt(), color.getValue() * 10);
200202
}
201203
}
202204
}

src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockEntity.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package de.dafuqs.spectrum.blocks.present;
22

33
import de.dafuqs.spectrum.api.block.*;
4+
import de.dafuqs.spectrum.api.energy.color.*;
45
import de.dafuqs.spectrum.blocks.*;
56
import de.dafuqs.spectrum.helpers.*;
67
import de.dafuqs.spectrum.registries.*;
@@ -97,10 +98,6 @@ public ItemStack retrievePresent() {
9798
return this.stack.copy();
9899
}
99100

100-
public Map<Integer, Integer> getColors() {
101-
return PresentBlockItem.getWrapData(this.stack).colors();
102-
}
103-
104101
public List<ItemStack> getStacks() {
105102
return PresentBlockItem.getBundledStacks(this.stack).toList();
106103
}

src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package de.dafuqs.spectrum.blocks.present;
22

33
import com.mojang.authlib.*;
4+
import de.dafuqs.spectrum.api.energy.color.*;
45
import de.dafuqs.spectrum.components.*;
56
import de.dafuqs.spectrum.registries.*;
67
import net.minecraft.*;
@@ -56,7 +57,7 @@ public static boolean isWrapped(ItemStack itemStack) {
5657
return itemStack.get(SpectrumDataComponentTypes.WRAPPED_PRESENT);
5758
}
5859

59-
public static void wrap(ItemStack itemStack, PresentBlock.WrappingPaper wrappingPaper, Map<Integer, Integer> colors) {
60+
public static void wrap(ItemStack itemStack, PresentBlock.WrappingPaper wrappingPaper, Map<InkColor, Integer> colors) {
6061
itemStack.set(SpectrumDataComponentTypes.WRAPPED_PRESENT, new WrappedPresentComponent(wrappingPaper, colors));
6162
}
6263

src/main/java/de/dafuqs/spectrum/components/WrappedPresentComponent.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mojang.serialization.*;
44
import com.mojang.serialization.codecs.*;
5+
import de.dafuqs.spectrum.api.energy.color.*;
56
import de.dafuqs.spectrum.blocks.present.*;
67
import de.dafuqs.spectrum.helpers.*;
78
import net.minecraft.network.*;
@@ -10,18 +11,18 @@
1011

1112
import java.util.*;
1213

13-
public record WrappedPresentComponent(PresentBlock.WrappingPaper variant, Map<Integer, Integer> colors) {
14+
public record WrappedPresentComponent(PresentBlock.WrappingPaper variant, Map<InkColor, Integer> colors) {
1415

1516
public static final WrappedPresentComponent DEFAULT = new WrappedPresentComponent(PresentBlock.WrappingPaper.RED, Map.of());
1617

1718
public static final Codec<WrappedPresentComponent> CODEC = RecordCodecBuilder.create(instance -> instance.group(
1819
StringRepresentable.fromEnum(PresentBlock.WrappingPaper::values).fieldOf("variant").forGetter(WrappedPresentComponent::variant),
19-
Codec.unboundedMap(Codec.INT, ExtraCodecs.POSITIVE_INT).fieldOf("colors").forGetter(WrappedPresentComponent::colors)
20+
Codec.unboundedMap(InkColor.CODEC, ExtraCodecs.POSITIVE_INT).fieldOf("colors").forGetter(WrappedPresentComponent::colors)
2021
).apply(instance, WrappedPresentComponent::new));
2122

2223
public static final StreamCodec<RegistryFriendlyByteBuf, WrappedPresentComponent> PACKET_CODEC = StreamCodec.composite(
2324
PacketCodecHelper.enumOf(PresentBlock.WrappingPaper::values), WrappedPresentComponent::variant,
24-
ByteBufCodecs.map(HashMap::new, ByteBufCodecs.VAR_INT, ByteBufCodecs.VAR_INT), WrappedPresentComponent::colors,
25+
ByteBufCodecs.map(HashMap::new, InkColor.PACKET_CODEC, ByteBufCodecs.VAR_INT), WrappedPresentComponent::colors,
2526
WrappedPresentComponent::new
2627
);
2728

src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.dafuqs.spectrum.networking.s2c_payloads;
22

3+
import de.dafuqs.spectrum.api.energy.color.*;
34
import de.dafuqs.spectrum.blocks.present.*;
45
import de.dafuqs.spectrum.networking.*;
56
import it.unimi.dsi.fastutil.objects.*;
@@ -15,17 +16,17 @@
1516

1617
import java.util.*;
1718

18-
public record PlayPresentOpeningParticlesPayload(BlockPos presentPos, Map<Integer, Integer> colors) implements CustomPacketPayload {
19+
public record PlayPresentOpeningParticlesPayload(BlockPos presentPos, Map<InkColor, Integer> colors) implements CustomPacketPayload {
1920

2021
public static final Type<PlayPresentOpeningParticlesPayload> ID = SpectrumC2SPackets.makeId("play_present_opening_particles");
2122
public static final StreamCodec<FriendlyByteBuf, PlayPresentOpeningParticlesPayload> CODEC = StreamCodec.composite(
2223
BlockPos.STREAM_CODEC, PlayPresentOpeningParticlesPayload::presentPos,
23-
ByteBufCodecs.map(Object2IntArrayMap::new, ByteBufCodecs.INT, ByteBufCodecs.INT),
24+
ByteBufCodecs.map(Object2IntArrayMap::new, InkColor.PACKET_CODEC, ByteBufCodecs.INT),
2425
PlayPresentOpeningParticlesPayload::colors,
2526
PlayPresentOpeningParticlesPayload::new
2627
);
2728

28-
public static void playPresentOpeningParticles(ServerLevel serverWorld, BlockPos presentPos, Map<Integer, Integer> colors) {
29+
public static void playPresentOpeningParticles(ServerLevel serverWorld, BlockPos presentPos, Map<InkColor, Integer> colors) {
2930
PacketDistributor.sendToPlayersTrackingChunk(serverWorld, new ChunkPos(presentPos), new PlayPresentOpeningParticlesPayload(presentPos, colors));
3031
}
3132

src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.dafuqs.spectrum.recipe.crafting.dynamic;
22

3+
import de.dafuqs.spectrum.api.energy.color.*;
34
import de.dafuqs.spectrum.blocks.present.*;
45
import de.dafuqs.spectrum.items.*;
56
import de.dafuqs.spectrum.registries.*;
@@ -60,14 +61,14 @@ public boolean matches(@NotNull CraftingInput input, Level world) {
6061
public ItemStack assemble(@NotNull CraftingInput input, HolderLookup.Provider registryLookup) {
6162
ItemStack presentStack = ItemStack.EMPTY;
6263
PresentBlock.WrappingPaper wrappingPaper = PresentBlock.WrappingPaper.RED;
63-
Map<Integer, Integer> colors = new HashMap<>();
64+
Map<InkColor, Integer> colors = new HashMap<>();
6465

6566
for (int j = 0; j < input.size(); ++j) {
6667
ItemStack stack = input.getItem(j);
6768
if (stack.getItem() instanceof PresentBlockItem) {
6869
presentStack = stack.copy();
6970
} else if (stack.getItem() instanceof PigmentItem pigmentItem) {
70-
int color = pigmentItem.getInkColor().getColorInt();
71+
InkColor color = pigmentItem.getInkColor();
7172
if (colors.containsKey(color)) {
7273
colors.put(color, colors.get(color) + 1);
7374
} else {

0 commit comments

Comments
 (0)