mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-08-16 00:05:59 +00:00
make ItemsAdderDataProvider more reliable when adding items & blocks
This commit is contained in:
parent
bd1b06c761
commit
e5f3bbd69e
@ -4,10 +4,10 @@ import com.volmit.iris.Iris;
|
|||||||
import com.volmit.iris.core.link.ExternalDataProvider;
|
import com.volmit.iris.core.link.ExternalDataProvider;
|
||||||
import com.volmit.iris.core.link.Identifier;
|
import com.volmit.iris.core.link.Identifier;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.util.collection.KList;
|
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.data.B;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.data.IrisCustomData;
|
import com.volmit.iris.util.data.IrisCustomData;
|
||||||
|
import com.volmit.iris.util.scheduling.J;
|
||||||
import dev.lone.itemsadder.api.CustomBlock;
|
import dev.lone.itemsadder.api.CustomBlock;
|
||||||
import dev.lone.itemsadder.api.CustomStack;
|
import dev.lone.itemsadder.api.CustomStack;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -18,10 +18,12 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.MissingResourceException;
|
import java.util.MissingResourceException;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class ItemAdderDataProvider extends ExternalDataProvider {
|
public class ItemAdderDataProvider extends ExternalDataProvider {
|
||||||
|
|
||||||
private KList<String> itemNamespaces, blockNamespaces;
|
private final KSet<String> itemNamespaces = new KSet<>();
|
||||||
|
private final KSet<String> blockNamespaces = new KSet<>();
|
||||||
|
|
||||||
public ItemAdderDataProvider() {
|
public ItemAdderDataProvider() {
|
||||||
super("ItemsAdder");
|
super("ItemsAdder");
|
||||||
@ -29,15 +31,11 @@ public class ItemAdderDataProvider extends ExternalDataProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
this.itemNamespaces = new KList<>();
|
try {
|
||||||
this.blockNamespaces = new KList<>();
|
updateNamespaces();
|
||||||
|
} catch (Throwable e) {
|
||||||
for (Identifier i : getTypes(DataType.ITEM)) {
|
Iris.warn("Failed to update ItemAdder namespaces: " + e.getMessage());
|
||||||
itemNamespaces.addIfMissing(i.namespace());
|
J.s(this::updateNamespaces, 20);
|
||||||
}
|
|
||||||
for (Identifier i : getTypes(DataType.BLOCK)) {
|
|
||||||
blockNamespaces.addIfMissing(i.namespace());
|
|
||||||
Iris.info("Found ItemAdder Block: " + i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,7 +46,7 @@ public class ItemAdderDataProvider extends ExternalDataProvider {
|
|||||||
if (block == null) {
|
if (block == null) {
|
||||||
throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key());
|
throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key());
|
||||||
}
|
}
|
||||||
return new IrisCustomData(B.getAir(), blockId);
|
return new IrisCustomData(block.getBaseBlockData(), blockId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@ -70,17 +68,30 @@ public class ItemAdderDataProvider extends ExternalDataProvider {
|
|||||||
public @NotNull Collection<@NotNull Identifier> getTypes(@NotNull DataType dataType) {
|
public @NotNull Collection<@NotNull Identifier> getTypes(@NotNull DataType dataType) {
|
||||||
return switch (dataType) {
|
return switch (dataType) {
|
||||||
case ENTITY -> List.of();
|
case ENTITY -> List.of();
|
||||||
case ITEM -> CustomStack.getNamespacedIdsInRegistry()
|
case ITEM -> updateNamespaces(dataType, CustomStack.getNamespacedIdsInRegistry()
|
||||||
.stream()
|
.stream()
|
||||||
.map(Identifier::fromString)
|
.map(Identifier::fromString)
|
||||||
.toList();
|
.toList());
|
||||||
case BLOCK -> CustomBlock.getNamespacedIdsInRegistry()
|
case BLOCK -> updateNamespaces(dataType, CustomBlock.getNamespacedIdsInRegistry()
|
||||||
.stream()
|
.stream()
|
||||||
.map(Identifier::fromString)
|
.map(Identifier::fromString)
|
||||||
.toList();
|
.toList());
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateNamespaces() {
|
||||||
|
getTypes(DataType.ITEM);
|
||||||
|
getTypes(DataType.BLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<Identifier> updateNamespaces(DataType dataType, Collection<Identifier> ids) {
|
||||||
|
var namespaces = ids.stream().map(Identifier::namespace).collect(Collectors.toSet());
|
||||||
|
var currentNamespaces = dataType == DataType.ITEM ? itemNamespaces : blockNamespaces;
|
||||||
|
currentNamespaces.removeIf(n -> !namespaces.contains(n));
|
||||||
|
currentNamespaces.addAll(namespaces);
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isValidProvider(@NotNull Identifier id, DataType dataType) {
|
public boolean isValidProvider(@NotNull Identifier id, DataType dataType) {
|
||||||
if (dataType == DataType.ENTITY) return false;
|
if (dataType == DataType.ENTITY) return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user