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