Fixed capabilities and setup events.
This commit is contained in:
@@ -64,7 +64,7 @@ public class EffortlessBuilding {
|
||||
instance = this;
|
||||
|
||||
// Register ourselves for server and other game events we are interested in
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
FMLJavaModLoadingContext.get().getModEventBus().register(this);
|
||||
|
||||
ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||
CONTAINERS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||
@@ -89,7 +89,6 @@ public class EffortlessBuilding {
|
||||
|
||||
@SubscribeEvent
|
||||
public void clientSetup(final FMLClientSetupEvent event) {
|
||||
|
||||
proxy.clientSetup(event);
|
||||
}
|
||||
|
||||
@@ -99,11 +98,6 @@ public class EffortlessBuilding {
|
||||
event.register(ModeCapabilityManager.IModeCapability.class);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onServerStarting(FMLServerStartingEvent event) {
|
||||
CommandReach.register(event.getServer().getCommands().getDispatcher());
|
||||
}
|
||||
|
||||
public static void log(String msg) {
|
||||
logger.info(msg);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import net.minecraftforge.event.world.BlockEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fmllegacy.network.PacketDistributor;
|
||||
import net.minecraftforge.fmlserverevents.FMLServerStartingEvent;
|
||||
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||
import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers;
|
||||
@@ -22,6 +23,7 @@ import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||
import nl.requios.effortlessbuilding.buildmodifier.UndoRedo;
|
||||
import nl.requios.effortlessbuilding.capability.ModeCapabilityManager;
|
||||
import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager;
|
||||
import nl.requios.effortlessbuilding.command.CommandReach;
|
||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
||||
import nl.requios.effortlessbuilding.network.AddUndoMessage;
|
||||
@@ -31,7 +33,7 @@ import nl.requios.effortlessbuilding.network.RequestLookAtMessage;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = EffortlessBuilding.MODID)
|
||||
@Mod.EventBusSubscriber(modid = EffortlessBuilding.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE)
|
||||
public class EventHandler {
|
||||
|
||||
@SubscribeEvent
|
||||
@@ -43,6 +45,11 @@ public class EventHandler {
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onServerStarting(FMLServerStartingEvent event) {
|
||||
CommandReach.register(event.getServer().getCommands().getDispatcher());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
//Only called serverside (except with lilypads...)
|
||||
public static void onBlockPlaced(BlockEvent.EntityPlaceEvent event) {
|
||||
|
||||
@@ -16,22 +16,30 @@ import javax.annotation.Nonnull;
|
||||
@Mod.EventBusSubscriber
|
||||
public class ModeSettingsManager {
|
||||
|
||||
//Retrieves the buildsettings of a player through the modifierCapability capability
|
||||
private static ModeSettings cache = null;
|
||||
|
||||
//Retrieves the buildsettings of a player through the modeCapability capability
|
||||
//Never returns null
|
||||
@Nonnull
|
||||
public static ModeSettings getModeSettings(Player player) {
|
||||
if (cache != null) return cache;
|
||||
|
||||
LazyOptional<ModeCapabilityManager.IModeCapability> modeCapability =
|
||||
player.getCapability(ModeCapabilityManager.modeCapability, null);
|
||||
player.getCapability(ModeCapabilityManager.MODE_CAPABILITY, null);
|
||||
|
||||
if (modeCapability.isPresent()) {
|
||||
ModeCapabilityManager.IModeCapability capability = modeCapability.orElse(null);
|
||||
if (capability.getModeData() == null) {
|
||||
capability.setModeData(new ModeSettings());
|
||||
cache = capability.getModeData();
|
||||
if (cache == null) {
|
||||
cache = new ModeSettings();
|
||||
capability.setModeData(cache);
|
||||
}
|
||||
//Add invalidation listener, to invalidate cache
|
||||
modeCapability.addListener(self -> cache = null);
|
||||
return capability.getModeData();
|
||||
}
|
||||
|
||||
//Player does not have modeCapability capability
|
||||
EffortlessBuilding.logger.warn("Player does not have modeCapability: " + player);
|
||||
//Return dummy settings
|
||||
return new ModeSettings();
|
||||
// throw new IllegalArgumentException("Player does not have modeCapability capability");
|
||||
@@ -43,7 +51,7 @@ public class ModeSettingsManager {
|
||||
return;
|
||||
}
|
||||
LazyOptional<ModeCapabilityManager.IModeCapability> modeCapability =
|
||||
player.getCapability(ModeCapabilityManager.modeCapability, null);
|
||||
player.getCapability(ModeCapabilityManager.MODE_CAPABILITY, null);
|
||||
|
||||
modeCapability.ifPresent((capability) -> {
|
||||
capability.setModeData(modeSettings);
|
||||
|
||||
@@ -17,25 +17,32 @@ import javax.annotation.Nonnull;
|
||||
@Mod.EventBusSubscriber
|
||||
public class ModifierSettingsManager {
|
||||
|
||||
private static ModifierSettings cache = null;
|
||||
|
||||
//Retrieves the buildsettings of a player through the modifierCapability capability
|
||||
//Never returns null
|
||||
@Nonnull
|
||||
public static ModifierSettings getModifierSettings(Player player) {
|
||||
if (cache != null) return cache;
|
||||
|
||||
LazyOptional<ModifierCapabilityManager.IModifierCapability> modifierCapability =
|
||||
player.getCapability(ModifierCapabilityManager.modifierCapability, null);
|
||||
player.getCapability(ModifierCapabilityManager.MODIFIER_CAPABILITY, null);
|
||||
|
||||
if (modifierCapability.isPresent()) {
|
||||
ModifierCapabilityManager.IModifierCapability capability = modifierCapability.orElse(null);
|
||||
if (capability.getModifierData() == null) {
|
||||
capability.setModifierData(new ModifierSettings());
|
||||
cache = capability.getModifierData();
|
||||
if (cache == null) {
|
||||
cache = new ModifierSettings();
|
||||
capability.setModifierData(cache);
|
||||
}
|
||||
return capability.getModifierData();
|
||||
//Add invalidation listener, to invalidate cache
|
||||
modifierCapability.addListener(self -> cache = null);
|
||||
return cache;
|
||||
}
|
||||
|
||||
//Player does not have modifierCapability capability
|
||||
EffortlessBuilding.logger.warn("Player does not have modifierCapability: " + player);
|
||||
//Return dummy settings
|
||||
return new ModifierSettings();
|
||||
// throw new IllegalArgumentException("Player does not have modifierCapability capability");
|
||||
}
|
||||
|
||||
public static void setModifierSettings(Player player, ModifierSettings modifierSettings) {
|
||||
@@ -45,7 +52,7 @@ public class ModifierSettingsManager {
|
||||
}
|
||||
|
||||
LazyOptional<ModifierCapabilityManager.IModifierCapability> modifierCapability =
|
||||
player.getCapability(ModifierCapabilityManager.modifierCapability, null);
|
||||
player.getCapability(ModifierCapabilityManager.MODIFIER_CAPABILITY, null);
|
||||
|
||||
modifierCapability.ifPresent((capability) -> {
|
||||
capability.setModifierData(modifierSettings);
|
||||
|
||||
@@ -5,6 +5,7 @@ import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.capabilities.CapabilityInject;
|
||||
import net.minecraftforge.common.capabilities.CapabilityProvider;
|
||||
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||
@@ -15,21 +16,19 @@ import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import static nl.requios.effortlessbuilding.buildmode.ModeSettingsManager.ModeSettings;
|
||||
|
||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager.ModeSettings;
|
||||
|
||||
@Mod.EventBusSubscriber
|
||||
public class ModeCapabilityManager {
|
||||
|
||||
@CapabilityInject(IModeCapability.class)
|
||||
public final static Capability<IModeCapability> modeCapability = null;
|
||||
public final static Capability<IModeCapability> MODE_CAPABILITY = null;
|
||||
|
||||
// Allows for the capability to persist after death.
|
||||
@SubscribeEvent
|
||||
public static void clonePlayer(PlayerEvent.Clone event) {
|
||||
LazyOptional<IModeCapability> original = event.getOriginal().getCapability(modeCapability, null);
|
||||
LazyOptional<IModeCapability> clone = event.getEntity().getCapability(modeCapability, null);
|
||||
LazyOptional<IModeCapability> original = event.getOriginal().getCapability(MODE_CAPABILITY, null);
|
||||
LazyOptional<IModeCapability> clone = event.getEntity().getCapability(MODE_CAPABILITY, null);
|
||||
clone.ifPresent(cloneModeCapability ->
|
||||
original.ifPresent(originalModeCapability ->
|
||||
cloneModeCapability.setModeData(originalModeCapability.getModeData())));
|
||||
@@ -55,13 +54,33 @@ public class ModeCapabilityManager {
|
||||
}
|
||||
}
|
||||
|
||||
public static class Provider implements ICapabilitySerializable<Tag> {
|
||||
IModeCapability instance = new ModeCapability();
|
||||
public static class Provider extends CapabilityProvider<Provider> implements ICapabilitySerializable<Tag> {
|
||||
|
||||
private IModeCapability instance = new ModeCapability();
|
||||
private LazyOptional<IModeCapability> modeCapabilityOptional = LazyOptional.of(() -> instance);
|
||||
|
||||
public Provider() {
|
||||
super(Provider.class);
|
||||
gatherCapabilities();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
|
||||
return modeCapability.orEmpty(cap, LazyOptional.of(() -> instance));
|
||||
if (cap == MODE_CAPABILITY) return modeCapabilityOptional.cast();
|
||||
return LazyOptional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateCaps() {
|
||||
super.invalidateCaps();
|
||||
modeCapabilityOptional.invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reviveCaps() {
|
||||
super.reviveCaps();
|
||||
modeCapabilityOptional = LazyOptional.of(() -> instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,7 +7,9 @@ import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.capabilities.CapabilityInject;
|
||||
import net.minecraftforge.common.capabilities.CapabilityProvider;
|
||||
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
|
||||
import net.minecraftforge.common.util.INBTSerializable;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
@@ -25,13 +27,13 @@ import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager.Modif
|
||||
public class ModifierCapabilityManager {
|
||||
|
||||
@CapabilityInject(IModifierCapability.class)
|
||||
public final static Capability<IModifierCapability> modifierCapability = null;
|
||||
public final static Capability<IModifierCapability> MODIFIER_CAPABILITY = null;
|
||||
|
||||
// Allows for the capability to persist after death.
|
||||
@SubscribeEvent
|
||||
public static void clonePlayer(PlayerEvent.Clone event) {
|
||||
LazyOptional<IModifierCapability> original = event.getOriginal().getCapability(modifierCapability, null);
|
||||
LazyOptional<IModifierCapability> clone = event.getEntity().getCapability(modifierCapability, null);
|
||||
LazyOptional<IModifierCapability> original = event.getOriginal().getCapability(MODIFIER_CAPABILITY, null);
|
||||
LazyOptional<IModifierCapability> clone = event.getEntity().getCapability(MODIFIER_CAPABILITY, null);
|
||||
clone.ifPresent(cloneModifierCapability ->
|
||||
original.ifPresent(originalModifierCapability ->
|
||||
cloneModifierCapability.setModifierData(originalModifierCapability.getModifierData())));
|
||||
@@ -57,14 +59,33 @@ public class ModifierCapabilityManager {
|
||||
}
|
||||
}
|
||||
|
||||
public static class Provider implements ICapabilitySerializable<Tag> {
|
||||
public static class Provider extends CapabilityProvider<Provider> implements INBTSerializable<Tag> {
|
||||
|
||||
IModifierCapability instance = new ModifierCapability();
|
||||
private final IModifierCapability instance = new ModifierCapability();
|
||||
private LazyOptional<IModifierCapability> modifierCapabilityOptional = LazyOptional.of(() -> instance);
|
||||
|
||||
public Provider() {
|
||||
super(Provider.class);
|
||||
gatherCapabilities();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
|
||||
return modifierCapability.orEmpty(cap, LazyOptional.of(() -> instance));
|
||||
if (cap == MODIFIER_CAPABILITY) return modifierCapabilityOptional.cast();
|
||||
return LazyOptional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateCaps() {
|
||||
super.invalidateCaps();
|
||||
modifierCapabilityOptional.invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reviveCaps() {
|
||||
super.reviveCaps();
|
||||
modifierCapabilityOptional = LazyOptional.of(() -> instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,12 +7,12 @@ import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||
|
||||
public class PacketHandler {
|
||||
private static final String PROTOCOL_VERSION = "1";
|
||||
public static final SimpleChannel INSTANCE = NetworkRegistry.ChannelBuilder
|
||||
.named(new ResourceLocation(EffortlessBuilding.MODID, "main_channel"))
|
||||
.clientAcceptedVersions(PROTOCOL_VERSION::equals)
|
||||
.serverAcceptedVersions(PROTOCOL_VERSION::equals)
|
||||
.networkProtocolVersion(() -> PROTOCOL_VERSION)
|
||||
.simpleChannel();
|
||||
public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel(
|
||||
new ResourceLocation(EffortlessBuilding.MODID, "main_channel"),
|
||||
() -> PROTOCOL_VERSION,
|
||||
PROTOCOL_VERSION::equals,
|
||||
PROTOCOL_VERSION::equals
|
||||
);
|
||||
|
||||
public static void register() {
|
||||
int id = 0;
|
||||
|
||||
Reference in New Issue
Block a user