From 52226fa1c9767235124856ce041467f82bb79c80 Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Fri, 6 Aug 2021 14:42:15 +0200 Subject: [PATCH] Make Thing extend ThingPicker. By turning things into their own thing pickers, we can avoid creating a bunch of SingleThingPicker wrappers, which are now redundant. Because the semantics of using things and thing pickers are quite different, it does perhaps make it necessary to be a bit more careful about picking the right type. --- .../MobArena/things/SingleThingPicker.java | 21 ------------------- .../garbagemule/MobArena/things/Thing.java | 11 +++++++++- .../MobArena/things/ThingPickerManager.java | 3 +-- 3 files changed, 11 insertions(+), 24 deletions(-) delete mode 100644 src/main/java/com/garbagemule/MobArena/things/SingleThingPicker.java diff --git a/src/main/java/com/garbagemule/MobArena/things/SingleThingPicker.java b/src/main/java/com/garbagemule/MobArena/things/SingleThingPicker.java deleted file mode 100644 index 6534a5b..0000000 --- a/src/main/java/com/garbagemule/MobArena/things/SingleThingPicker.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.garbagemule.MobArena.things; - -public class SingleThingPicker implements ThingPicker { - - private final Thing thing; - - public SingleThingPicker(Thing thing) { - this.thing = thing; - } - - @Override - public Thing pick() { - return thing; - } - - @Override - public String toString() { - return thing.toString(); - } - -} diff --git a/src/main/java/com/garbagemule/MobArena/things/Thing.java b/src/main/java/com/garbagemule/MobArena/things/Thing.java index d7d0892..36f953f 100644 --- a/src/main/java/com/garbagemule/MobArena/things/Thing.java +++ b/src/main/java/com/garbagemule/MobArena/things/Thing.java @@ -12,8 +12,12 @@ import org.bukkit.entity.Player; * The interface exposes three methods that are all optional operations. An * operation returns false if it fails or if it isn't applicable to the given * thing (which is the same as failing). + *

+ * A thing is automatically a {@link ThingPicker} for itself, which means it + * can be used in any place that a thing picker is expected, avoiding the need + * to wrap things in a "dummy picker". */ -public interface Thing { +public interface Thing extends ThingPicker { /** * Give this thing to the given player. @@ -39,4 +43,9 @@ public interface Thing { */ boolean heldBy(Player player); + @Override + default Thing pick() { + return this; + } + } diff --git a/src/main/java/com/garbagemule/MobArena/things/ThingPickerManager.java b/src/main/java/com/garbagemule/MobArena/things/ThingPickerManager.java index 21bb108..38a9ba0 100644 --- a/src/main/java/com/garbagemule/MobArena/things/ThingPickerManager.java +++ b/src/main/java/com/garbagemule/MobArena/things/ThingPickerManager.java @@ -25,8 +25,7 @@ public class ThingPickerManager implements ThingPickerParser { return picker; } } - Thing thing = things.parse(s); - return new SingleThingPicker(thing); + return things.parse(s); } }