mirror of
https://github.com/GTNewHorizons/StructureLib.git
synced 2026-11-11 15:57:39 +00:00
Add channel desc and channel indicator item. Its meaning and development examples has been added to overview page in javadoc. Also removes gt_no_hatch and show_error special button from GUI as they are now a candidate in the dropdown menu. one day we will move this to MUI2, but for now let's stick to existing infra that is known to work https://github.com/user-attachments/assets/814edbb6-c4b4-4309-8798-787d9ed1aeef Note: channels in demo video are from GT5. if you boot the pack without the modified gt5 you won't see most of the channels. --------- Signed-off-by: Glease <4586901+Glease@users.noreply.github.com>
95 lines
3.7 KiB
Java
95 lines
3.7 KiB
Java
package com.gtnewhorizon.structurelib;
|
|
|
|
import java.util.AbstractMap;
|
|
import java.util.Collection;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Locale;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.stream.Collectors;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import com.gtnewhorizon.gtnhlib.util.map.ItemStackMap;
|
|
|
|
import cpw.mods.fml.common.Loader;
|
|
|
|
// this is not an API! go check StructureLibAPI instead!
|
|
public class ChannelDescription {
|
|
|
|
private static final ItemStackMap<Set<ChannelDescription>> itemToChannels = new ItemStackMap<>(true);
|
|
private static final Map<String, ChannelDescription> registry = new HashMap<>();
|
|
private final String channel;
|
|
private final Map<String, String> descriptions = new HashMap<>();
|
|
private final ItemStackMap<Integer> items = new ItemStackMap<>(true);
|
|
|
|
public static ChannelDescription get(final String channel) {
|
|
if (StructureLibAPI.isDebugEnabled() && !channel.toLowerCase(Locale.ROOT).equals(channel))
|
|
throw new IllegalArgumentException("Channel name can be lower case ONLY");
|
|
return registry.computeIfAbsent(channel, ChannelDescription::new);
|
|
}
|
|
|
|
public static boolean has(final String channel) {
|
|
if (StructureLibAPI.isDebugEnabled() && !channel.toLowerCase(Locale.ROOT).equals(channel))
|
|
throw new IllegalArgumentException("Channel name can be lower case ONLY");
|
|
return registry.containsKey(channel);
|
|
}
|
|
|
|
public static Collection<Map.Entry<String, Integer>> iterate(final ItemStack block) {
|
|
Set<ChannelDescription> channels = itemToChannels.get(block);
|
|
if (channels == null) return Collections.emptySet();
|
|
return channels.stream().map(d -> new AbstractMap.SimpleImmutableEntry<>(d.channel, d.items.get(block)))
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
public static void set(final String channel, final String modid, final String description) {
|
|
if (StructureLibAPI.isDebugEnabled() && !channel.toLowerCase(Locale.ROOT).equals(channel))
|
|
throw new IllegalArgumentException("Channel name can be lower case ONLY");
|
|
registry.computeIfAbsent(channel, ChannelDescription::new).add(modid, description);
|
|
}
|
|
|
|
public static void item(final String channel, int channelValue, ItemStack stack) {
|
|
if (StructureLibAPI.isDebugEnabled()) {
|
|
if (!channel.toLowerCase(Locale.ROOT).equals(channel)) {
|
|
throw new IllegalArgumentException("Channel name can be lower case ONLY");
|
|
}
|
|
if (channelValue <= 0) {
|
|
throw new IllegalArgumentException("Channel value must be greater than 0");
|
|
}
|
|
}
|
|
ChannelDescription inst = registry.computeIfAbsent(channel, ChannelDescription::new);
|
|
inst.items.put(stack, channelValue);
|
|
itemToChannels.computeIfAbsent(stack, s -> new HashSet<>()).add(inst);
|
|
}
|
|
|
|
public static Map<String, ChannelDescription> getAll() {
|
|
return Collections.unmodifiableMap(registry);
|
|
}
|
|
|
|
private ChannelDescription(String channel) {
|
|
this.channel = channel;
|
|
}
|
|
|
|
public String getChannel() {
|
|
return channel;
|
|
}
|
|
|
|
public ChannelDescription add(String modid, String description) {
|
|
if (Loader.instance().getIndexedModList().get(modid) == null) {
|
|
throw new IllegalArgumentException("Mod not found: " + modid);
|
|
}
|
|
descriptions.put(modid, description);
|
|
return this;
|
|
}
|
|
|
|
public Map<String, String> getDescriptions() {
|
|
return Collections.unmodifiableMap(descriptions);
|
|
}
|
|
|
|
public Map<ItemStack, Integer> getItems() {
|
|
return Collections.unmodifiableMap(items);
|
|
}
|
|
}
|