Compare commits
1 Commits
Lobby/refa
...
BauSystem/
| Author | SHA1 | Date | |
|---|---|---|---|
| 7c9d7dfafa |
@@ -21,23 +21,77 @@ package de.steamwar.bausystem.region;
|
|||||||
|
|
||||||
import de.steamwar.bausystem.region.flags.Flag;
|
import de.steamwar.bausystem.region.flags.Flag;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
import yapion.hierarchy.types.YAPIONObject;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public interface FlagStorage {
|
public abstract class FlagStorage {
|
||||||
|
|
||||||
|
protected final Map<Flag<?>, Flag.Value<?>> flagMap = new HashMap<>();
|
||||||
|
protected final YAPIONObject data;
|
||||||
|
protected final Runnable onChange;
|
||||||
|
|
||||||
|
protected FlagStorage(YAPIONObject data, Runnable onChange) {
|
||||||
|
this.data = data;
|
||||||
|
this.onChange = onChange;
|
||||||
|
initialize();
|
||||||
|
for (final Flag flag : Flag.getFlags()) {
|
||||||
|
if (!has(flag).isWritable()) continue;
|
||||||
|
try {
|
||||||
|
String s = data.getPlainValue(flag.name());
|
||||||
|
flagMap.put(flag, flag.valueOfValue(s));
|
||||||
|
} catch (Exception e) {
|
||||||
|
flagMap.put(flag, (Flag.Value<?>) flag.getDefaultValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
<T extends Enum<T> & Flag.Value<T>> RegionFlagPolicy has(@NonNull Flag<T> flag);
|
public abstract <T extends Enum<T> & Flag.Value<T>> RegionFlagPolicy has(@NonNull Flag<T> flag);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the flag was changed and did not already contain the provided value
|
* Returns true if the flag was changed and did not already contain the provided value
|
||||||
*/
|
*/
|
||||||
<T extends Enum<T> & Flag.Value<T>> boolean set(@NonNull Flag<T> flag, @NonNull T value);
|
public final <T extends Enum<T> & Flag.Value<T>> boolean set(@NonNull Flag<T> flag, @NonNull T value) {
|
||||||
|
if (has(flag).isWritable()) {
|
||||||
|
boolean hasChanged = flagMap.put(flag, value) != value;
|
||||||
|
if (hasChanged) {
|
||||||
|
data.put(flag.name(), value.name());
|
||||||
|
onChange.run();
|
||||||
|
}
|
||||||
|
return hasChanged;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
<T extends Enum<T> & Flag.Value<T>> FlagOptional<T> get(@NonNull Flag<T> flag);
|
public final <T extends Enum<T> & Flag.Value<T>> FlagOptional<T> get(@NonNull Flag<T> flag) {
|
||||||
|
return FlagOptional.of(flag, (T) flagMap.get(flag));
|
||||||
void clear();
|
}
|
||||||
|
|
||||||
Map<Flag<?>, Flag.Value<?>> getBackedMap();
|
public final void clear() {
|
||||||
|
for (Flag flag : Flag.getFlags()) {
|
||||||
|
if (has(flag).isWritable()) {
|
||||||
|
flagMap.remove(flag);
|
||||||
|
data.remove(flag.name());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onChange.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public final Map<Flag<?>, Flag.Value<?>> getBackedMap() {
|
||||||
|
return flagMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final String toString() {
|
||||||
|
return getClass().getSimpleName() + "{" +
|
||||||
|
"flagMap=" + flagMap +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.region;
|
package de.steamwar.bausystem.region;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.worlddata.WorldData;
|
||||||
import de.steamwar.sql.SchematicNode;
|
import de.steamwar.sql.SchematicNode;
|
||||||
import yapion.hierarchy.types.YAPIONObject;
|
import yapion.hierarchy.types.YAPIONObject;
|
||||||
|
|
||||||
|
|||||||
@@ -19,34 +19,17 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.region.fixed;
|
package de.steamwar.bausystem.region.fixed;
|
||||||
|
|
||||||
import de.steamwar.bausystem.region.FlagOptional;
|
|
||||||
import de.steamwar.bausystem.region.FlagStorage;
|
import de.steamwar.bausystem.region.FlagStorage;
|
||||||
import de.steamwar.bausystem.region.RegionFlagPolicy;
|
import de.steamwar.bausystem.region.RegionFlagPolicy;
|
||||||
import de.steamwar.bausystem.region.flags.Flag;
|
import de.steamwar.bausystem.region.flags.Flag;
|
||||||
import de.steamwar.bausystem.worlddata.WorldData;
|
|
||||||
import de.steamwar.core.Core;
|
import de.steamwar.core.Core;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import yapion.hierarchy.types.YAPIONObject;
|
import yapion.hierarchy.types.YAPIONObject;
|
||||||
|
|
||||||
import java.util.HashMap;
|
public class FixedFlagStorage extends FlagStorage {
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class FixedFlagStorage implements FlagStorage {
|
public FixedFlagStorage(YAPIONObject data, Runnable onChange) {
|
||||||
|
super(data, onChange);
|
||||||
private Map<Flag<?>, Flag.Value<?>> flagMap = new HashMap<>();
|
|
||||||
private YAPIONObject data;
|
|
||||||
|
|
||||||
public FixedFlagStorage(YAPIONObject data) {
|
|
||||||
this.data = data;
|
|
||||||
for (final Flag flag : Flag.getFlags()) {
|
|
||||||
if (!has(flag).isWritable()) continue;
|
|
||||||
try {
|
|
||||||
String s = data.getPlainValue(flag.name());
|
|
||||||
flagMap.put(flag, flag.valueOfValue(s));
|
|
||||||
} catch (Exception e) {
|
|
||||||
flagMap.put(flag, (Flag.Value<?>) flag.getDefaultValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -62,45 +45,4 @@ public class FixedFlagStorage implements FlagStorage {
|
|||||||
}
|
}
|
||||||
return RegionFlagPolicy.NOT_APPLICABLE;
|
return RegionFlagPolicy.NOT_APPLICABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T extends Enum<T> & Flag.Value<T>> boolean set(@NonNull Flag<T> flag, @NonNull T value) {
|
|
||||||
if (has(flag).isWritable()) {
|
|
||||||
boolean hasChanged = flagMap.put(flag, value) != value;
|
|
||||||
if (hasChanged) {
|
|
||||||
data.put(flag.name(), value.name());
|
|
||||||
WorldData.write();
|
|
||||||
}
|
|
||||||
return hasChanged;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NonNull <T extends Enum<T> & Flag.Value<T>> FlagOptional<T> get(@NonNull Flag<T> flag) {
|
|
||||||
return FlagOptional.of(flag, (T) flagMap.get(flag));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clear() {
|
|
||||||
for (Flag flag : Flag.getFlags()) {
|
|
||||||
if (flag == Flag.TESTBLOCK) continue;
|
|
||||||
if (flag == Flag.COLOR) continue;
|
|
||||||
if (flag == Flag.CHANGED) continue;
|
|
||||||
flagMap.remove(flag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<Flag<?>, Flag.Value<?>> getBackedMap() {
|
|
||||||
return flagMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "FixedFlagStorage{" +
|
|
||||||
"flagMap=" + flagMap +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,43 +19,32 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.region.fixed;
|
package de.steamwar.bausystem.region.fixed;
|
||||||
|
|
||||||
import de.steamwar.bausystem.region.FlagOptional;
|
|
||||||
import de.steamwar.bausystem.region.FlagStorage;
|
import de.steamwar.bausystem.region.FlagStorage;
|
||||||
import de.steamwar.bausystem.region.RegionFlagPolicy;
|
import de.steamwar.bausystem.region.RegionFlagPolicy;
|
||||||
import de.steamwar.bausystem.region.flags.ColorMode;
|
import de.steamwar.bausystem.region.flags.ColorMode;
|
||||||
import de.steamwar.bausystem.region.flags.Flag;
|
import de.steamwar.bausystem.region.flags.Flag;
|
||||||
import de.steamwar.bausystem.region.flags.ProtectMode;
|
import de.steamwar.bausystem.region.flags.ProtectMode;
|
||||||
import de.steamwar.bausystem.region.flags.TNTMode;
|
import de.steamwar.bausystem.region.flags.TNTMode;
|
||||||
import de.steamwar.bausystem.worlddata.WorldData;
|
|
||||||
import de.steamwar.core.Core;
|
import de.steamwar.core.Core;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import yapion.hierarchy.types.YAPIONObject;
|
import yapion.hierarchy.types.YAPIONObject;
|
||||||
|
|
||||||
import java.util.HashMap;
|
public class FixedGlobalFlagStorage extends FlagStorage {
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class FixedGlobalFlagStorage implements FlagStorage {
|
public FixedGlobalFlagStorage(YAPIONObject data, Runnable onChange) {
|
||||||
|
super(data, onChange);
|
||||||
|
}
|
||||||
|
|
||||||
private Map<Flag<?>, Flag.Value<?>> flagMap = new HashMap<>();
|
@Override
|
||||||
private YAPIONObject data;
|
protected void initialize() {
|
||||||
|
|
||||||
public FixedGlobalFlagStorage(YAPIONObject data) {
|
|
||||||
flagMap.put(Flag.TNT, TNTMode.DENY);
|
flagMap.put(Flag.TNT, TNTMode.DENY);
|
||||||
this.data = data;
|
flagMap.put(Flag.COLOR, ColorMode.YELLOW);
|
||||||
for (final Flag flag : Flag.getFlags()) {
|
flagMap.put(Flag.PROTECT, ProtectMode.INACTIVE);
|
||||||
if (!has(flag).isWritable()) continue;
|
|
||||||
try {
|
|
||||||
String s = data.getPlainValue(flag.name());
|
|
||||||
flagMap.put(flag, flag.valueOfValue(s));
|
|
||||||
} catch (Exception e) {
|
|
||||||
flagMap.put(flag, (Flag.Value<?>) flag.getDefaultValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull <T extends Enum<T> & Flag.Value<T>> RegionFlagPolicy has(@NonNull Flag<T> flag) {
|
public @NonNull <T extends Enum<T> & Flag.Value<T>> RegionFlagPolicy has(@NonNull Flag<T> flag) {
|
||||||
if (flag.oneOf(Flag.COLOR)) {
|
if (flag.oneOf(Flag.COLOR, Flag.PROTECT)) {
|
||||||
return RegionFlagPolicy.READ_ONLY;
|
return RegionFlagPolicy.READ_ONLY;
|
||||||
}
|
}
|
||||||
if (flag.oneOf(Flag.ITEMS) && Core.getVersion() >= 20) {
|
if (flag.oneOf(Flag.ITEMS) && Core.getVersion() >= 20) {
|
||||||
@@ -66,48 +55,4 @@ public class FixedGlobalFlagStorage implements FlagStorage {
|
|||||||
}
|
}
|
||||||
return RegionFlagPolicy.NOT_APPLICABLE;
|
return RegionFlagPolicy.NOT_APPLICABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T extends Enum<T> & Flag.Value<T>> boolean set(@NonNull Flag<T> flag, @NonNull T value) {
|
|
||||||
if (has(flag).isWritable()) {
|
|
||||||
data.put(flag.name(), value.name());
|
|
||||||
WorldData.write();
|
|
||||||
return flagMap.put(flag, value) != value;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NonNull <T extends Enum<T> & Flag.Value<T>> FlagOptional<T> get(@NonNull Flag<T> flag) {
|
|
||||||
if (flag.oneOf(Flag.COLOR)) {
|
|
||||||
return FlagOptional.of((Flag) flag, ColorMode.YELLOW);
|
|
||||||
}
|
|
||||||
if (flag.oneOf(Flag.PROTECT)) {
|
|
||||||
return FlagOptional.of((Flag) flag, ProtectMode.INACTIVE);
|
|
||||||
}
|
|
||||||
return FlagOptional.of(flag, (T) flagMap.get(flag));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clear() {
|
|
||||||
for (Flag flag : Flag.getFlags()) {
|
|
||||||
if (flag == Flag.TESTBLOCK) continue;
|
|
||||||
if (flag == Flag.COLOR) continue;
|
|
||||||
if (flag == Flag.CHANGED) continue;
|
|
||||||
flagMap.remove(flag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<Flag<?>, Flag.Value<?>> getBackedMap() {
|
|
||||||
return flagMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "FixedGlobalFlagStorage{" +
|
|
||||||
"flagMap=" + flagMap +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
package de.steamwar.bausystem.region.fixed;
|
package de.steamwar.bausystem.region.fixed;
|
||||||
|
|
||||||
import de.steamwar.bausystem.region.FixedRegionSystem;
|
import de.steamwar.bausystem.region.FixedRegionSystem;
|
||||||
|
import de.steamwar.bausystem.worlddata.WorldData;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import yapion.hierarchy.types.YAPIONObject;
|
import yapion.hierarchy.types.YAPIONObject;
|
||||||
@@ -216,7 +217,7 @@ public class Prototype {
|
|||||||
} else {
|
} else {
|
||||||
prototype = PROTOTYPE_MAP.get(regionConfig.getPlainValue("prototype"));
|
prototype = PROTOTYPE_MAP.get(regionConfig.getPlainValue("prototype"));
|
||||||
}
|
}
|
||||||
FixedFlagStorage flagStorage = new FixedFlagStorage(regionData.getObjectOrSetDefault("flagStorage", new YAPIONObject()));
|
FixedFlagStorage flagStorage = new FixedFlagStorage(regionData.getObjectOrSetDefault("flagStorage", new YAPIONObject()), WorldData::write);
|
||||||
FixedRegionSystem.addRegion(new FixedRegion(name, flagStorage, prototype, regionConfig, regionData));
|
FixedRegionSystem.addRegion(new FixedRegion(name, flagStorage, prototype, regionConfig, regionData));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,6 +80,6 @@ public class RegionLoader {
|
|||||||
globalOptions = new YAPIONObject();
|
globalOptions = new YAPIONObject();
|
||||||
optionsYapionObject.add("global", globalOptions);
|
optionsYapionObject.add("global", globalOptions);
|
||||||
}
|
}
|
||||||
FixedGlobalRegion.setFLAG_STORAGE(new FixedGlobalFlagStorage(globalOptions.getObjectOrSetDefault("flagStorage", new YAPIONObject())));
|
FixedGlobalRegion.setFLAG_STORAGE(new FixedGlobalFlagStorage(globalOptions.getObjectOrSetDefault("flagStorage", new YAPIONObject()), WorldData::write));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user