Changed ore Set to a HashMap and now keeping track of how many ore blocks there are. Removed Unique getMessage and instead just Shadowing the original.
This commit is contained in:
@ -24,6 +24,7 @@ import net.minecraft.world.level.chunk.LevelChunkSection;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Overwrite;
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -42,7 +43,7 @@ public abstract class IGMineralTestingItemMixin extends IGGenericItem implements
|
|||||||
* @reason Tweaking geologist pick usage logic.
|
* @reason Tweaking geologist pick usage logic.
|
||||||
*/
|
*/
|
||||||
@Overwrite
|
@Overwrite
|
||||||
public InteractionResult useOn(UseOnContext context) {
|
public @NotNull InteractionResult useOn(UseOnContext context) {
|
||||||
Player player = context.getPlayer();
|
Player player = context.getPlayer();
|
||||||
ItemStack stack = context.getItemInHand();
|
ItemStack stack = context.getItemInHand();
|
||||||
if (player == null || !stack.getItem().equals(this)) {
|
if (player == null || !stack.getItem().equals(this)) {
|
||||||
@ -73,9 +74,9 @@ public abstract class IGMineralTestingItemMixin extends IGGenericItem implements
|
|||||||
int sectionMin = level.getSectionIndex(minBuildHeight);
|
int sectionMin = level.getSectionIndex(minBuildHeight);
|
||||||
int sectionMax = level.getSectionIndex(maxBuildHeight);
|
int sectionMax = level.getSectionIndex(maxBuildHeight);
|
||||||
|
|
||||||
Set<MaterialInterface<?>> oreSet = new HashSet<>();
|
HashMap<MaterialInterface<?>, Integer> oreMap = new HashMap<>();
|
||||||
TagKey<Block> allOresTag = BlockCategoryFlags.ORE_BLOCK.getCategoryTag();
|
TagKey<Block> allOresTag = BlockCategoryFlags.ORE_BLOCK.getCategoryTag();
|
||||||
chunkScan: for (int dx = -1; dx <= 1; dx++) {
|
for (int dx = -1; dx <= 1; dx++) {
|
||||||
for (int dz = -1; dz <= 1; dz++) {
|
for (int dz = -1; dz <= 1; dz++) {
|
||||||
ChunkAccess chunk = level.getChunk(centerChunkX + dx, centerChunkZ + dz);
|
ChunkAccess chunk = level.getChunk(centerChunkX + dx, centerChunkZ + dz);
|
||||||
|
|
||||||
@ -96,10 +97,7 @@ public abstract class IGMineralTestingItemMixin extends IGGenericItem implements
|
|||||||
BlockState blockState = section.getBlockState(x, y, z);
|
BlockState blockState = section.getBlockState(x, y, z);
|
||||||
if (blockState.is(allOresTag)) {
|
if (blockState.is(allOresTag)) {
|
||||||
IOreBlock ore = (IOreBlock) blockState.getBlock();
|
IOreBlock ore = (IOreBlock) blockState.getBlock();
|
||||||
oreSet.add(ore.getOreMaterial());
|
oreMap.put(ore.getOreMaterial(), oreMap.getOrDefault(ore.getOreMaterial(), 0) + 1);
|
||||||
if (oreSet.size() >= 3) {
|
|
||||||
break chunkScan;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,7 +106,7 @@ public abstract class IGMineralTestingItemMixin extends IGGenericItem implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component message = geologist_pick_tweaks_1_20_1$getMessage(oreSet);
|
Component message = getMessage(oreMap.keySet());
|
||||||
|
|
||||||
player.displayClientMessage(message, true);
|
player.displayClientMessage(message, true);
|
||||||
geologist_pick_tweaks_1_20_1$mineralCache.put(centerChunkPos, cachedEntry);
|
geologist_pick_tweaks_1_20_1$mineralCache.put(centerChunkPos, cachedEntry);
|
||||||
@ -116,30 +114,9 @@ public abstract class IGMineralTestingItemMixin extends IGGenericItem implements
|
|||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique
|
@Shadow
|
||||||
private static @NotNull Component geologist_pick_tweaks_1_20_1$getMessage(Set<MaterialInterface<?>> oreSet) {
|
@NotNull
|
||||||
Component message;
|
private static Component getMessage(Set<MaterialInterface<?>> oreSet) {
|
||||||
if (oreSet.isEmpty()) {
|
return Component.empty();
|
||||||
message = Component.translatable("immersivegeology.prospecting_pick.nothing");
|
|
||||||
} else {
|
|
||||||
List<MaterialInterface<?>> found = new ArrayList<>(oreSet);
|
|
||||||
String messageKey = "immersivegeology.prospecting_pick.found";
|
|
||||||
String materialsText;
|
|
||||||
|
|
||||||
switch (found.size()) {
|
|
||||||
case 1:
|
|
||||||
materialsText = "Found Traces of " + found.get(0);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
materialsText = "Found Traces of " + found.get(0) + " and " + found.get(1);
|
|
||||||
break;
|
|
||||||
default: // 3 or more
|
|
||||||
materialsText = "Found Cluster of " + found.get(0) + ", " + found.get(1) + " and " + found.get(2);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
message = Component.translatable(messageKey, materialsText);
|
|
||||||
}
|
|
||||||
return message;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user