PocketAddon WIP stuff

This commit is contained in:
CreepyCre 2021-02-19 21:40:08 +01:00
parent 053dbb4f42
commit d41c002991
6 changed files with 192 additions and 0 deletions

View file

@ -0,0 +1,63 @@
package org.dimdev.dimdoors.world.pocket.type.addon;
import net.fabricmc.fabric.api.util.NbtType;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
import net.minecraft.util.Identifier;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public abstract class AddonContainer<T extends ContainedAddon> implements PocketAddon {
protected Identifier id;
protected List<T> addons = new ArrayList<>();
public AddonContainer() {
}
public void setId(Identifier id) {
this.id = id;
}
public void addAll(Collection<T> addons) {
this.addons.addAll(addons);
}
public void add(T addon) {
this.addons.add(addon);
}
@Override
public PocketAddon fromTag(CompoundTag tag) {
this.id = Identifier.tryParse(tag.getString("id"));
if (tag.contains("addons", NbtType.LIST)) {
for (Tag addonTag : tag.getList("addons", NbtType.COMPOUND)) {
addons.add((T) PocketAddon.deserialize((CompoundTag) addonTag));
}
}
return this;
}
@Override
public CompoundTag toTag(CompoundTag tag) {
PocketAddon.super.toTag(tag);
ListTag addonsTag = new ListTag();
for(T addon : addons) {
addonsTag.add(addon.toTag(new CompoundTag()));
}
tag.put("addons", addonsTag);
return null;
}
@Override
public Identifier getId() {
return id;
}
}

View file

@ -0,0 +1,23 @@
package org.dimdev.dimdoors.world.pocket.type.addon;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;
import java.io.IOException;
abstract public class AutoSyncedAddonContainer<T extends ContainedAddon & AutoSyncedAddon> extends AddonContainer<T> implements AutoSyncedAddon {
@Override
public AutoSyncedAddon read(PacketByteBuf buf) throws IOException {
id = Identifier.tryParse(buf.readString());
addons = AutoSyncedAddon.readAutoSyncedAddonList(buf);
return this;
}
@Override
public PacketByteBuf write(PacketByteBuf buf) throws IOException {
buf.writeString(id.toString());
AutoSyncedAddon.writeAutoSyncedAddonList(buf, addons);
return buf;
}
}

View file

@ -0,0 +1,36 @@
package org.dimdev.dimdoors.world.pocket.type.addon;
import net.minecraft.util.Identifier;
import org.dimdev.dimdoors.world.pocket.type.Pocket;
import java.util.Map;
public interface ContainedAddon extends PocketAddon {
Identifier getContainerId();
@Override
default void addAddon(Map<Identifier, PocketAddon> addons) {
throw new UnsupportedOperationException("ContainedEventListenerAddons cannot be attach to a Pocket directly");
}
interface ContainedBuilderAddon<T extends ContainedAddon> extends PocketAddon.PocketBuilderAddon<T> {
Identifier getContainerId();
AddonContainer<T> supplyContainer();
@Override
default void apply(Pocket pocket) {
AddonContainer<T> container;
if (pocket.hasAddon(getContainerId())) {
container = pocket.getAddon(getContainerId());
} else {
container = supplyContainer();
pocket.addAddon(container);
}
container.add(buildAddon());
}
T buildAddon();
}
}

View file

@ -0,0 +1,15 @@
package org.dimdev.dimdoors.world.pocket.type.addon.blockbreak;
import net.minecraft.util.Identifier;
import org.dimdev.dimdoors.world.pocket.type.addon.AutoSyncedAddonContainer;
import org.dimdev.dimdoors.world.pocket.type.addon.PocketAddon;
// TODO
public class BlockBreakContainer extends AutoSyncedAddonContainer<TryBlockBreakEventAddon> {
public static Identifier ID = new Identifier("dimdoors", "block_break_container");
@Override
public PocketAddonType<? extends PocketAddon> getType() {
return PocketAddonType.BLOCK_BREAK_CONTAINER;
}
}

View file

@ -0,0 +1,45 @@
package org.dimdev.dimdoors.world.pocket.type.addon.blockbreak;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;
import org.dimdev.dimdoors.world.pocket.type.addon.AutoSyncedAddon;
import org.dimdev.dimdoors.world.pocket.type.addon.ContainedAddon;
import org.dimdev.dimdoors.world.pocket.type.addon.PocketAddon;
import java.io.IOException;
// TODO
public class BlockBreakRegexBlacklistAddon implements AutoSyncedAddon, ContainedAddon { //TODO
@Override
public AutoSyncedAddon read(PacketByteBuf buf) throws IOException {
this.fromTag(buf.readCompoundTag());
return this;
}
@Override
public PacketByteBuf write(PacketByteBuf buf) throws IOException {
buf.writeCompoundTag(this.toTag(new CompoundTag()));
return buf;
}
@Override
public Identifier getContainerId() {
return BlockBreakContainer.ID;
}
@Override
public PocketAddon fromTag(CompoundTag tag) {
return null;
}
@Override
public PocketAddonType<? extends PocketAddon> getType() {
return null;
}
@Override
public Identifier getId() {
return null;
}
}

View file

@ -0,0 +1,10 @@
package org.dimdev.dimdoors.world.pocket.type.addon.blockbreak;
import net.fabricmc.fabric.api.event.player.AttackBlockCallback;
import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
import org.dimdev.dimdoors.world.pocket.type.addon.AutoSyncedAddon;
import org.dimdev.dimdoors.world.pocket.type.addon.ContainedAddon;
// TODO
public interface TryBlockBreakEventAddon extends AttackBlockCallback, PlayerBlockBreakEvents.Before, ContainedAddon, AutoSyncedAddon {
}