11package gollorum .signpost ;
22
3- import java .util .Map .Entry ;
4- import java .util .UUID ;
5-
63import gollorum .signpost .blocks .BaseModelPost ;
74import gollorum .signpost .blocks .BasePost ;
85import gollorum .signpost .blocks .SuperPostPost ;
118import gollorum .signpost .blocks .tiles .SuperPostPostTile ;
129import gollorum .signpost .items .CalibratedPostWrench ;
1310import gollorum .signpost .items .PostWrench ;
14- import gollorum .signpost .management .ClientConfigStorage ;
15- import gollorum .signpost .management .PlayerProvider ;
16- import gollorum .signpost .management .PlayerStore ;
17- import gollorum .signpost .management .PostHandler ;
18- import gollorum .signpost .management .WorldSigns ;
11+ import gollorum .signpost .management .*;
1912import gollorum .signpost .network .NetworkHandler ;
2013import gollorum .signpost .network .messages .InitPlayerResponseMessage ;
2114import gollorum .signpost .network .messages .SendAllBigPostBasesMessage ;
2215import gollorum .signpost .network .messages .SendAllPostBasesMessage ;
2316import gollorum .signpost .util .BoolRun ;
2417import gollorum .signpost .util .MyBlockPos ;
25- import gollorum .signpost .util .MyBlockPosSet ;
26- import gollorum .signpost .util .collections .Lurchpaerchensauna ;
27- import gollorum .signpost .util .collections .Lurchsauna ;
28- import gollorum .signpost .util .collections .Pair ;
18+ import gollorum .signpost .util .collections .CollectionUtils ;
2919import net .minecraft .entity .Entity ;
3020import net .minecraft .entity .player .EntityPlayerMP ;
3121import net .minecraft .init .Blocks ;
4434import net .minecraftforge .fml .common .gameevent .TickEvent ;
4535import net .minecraftforge .fml .relauncher .Side ;
4636
37+ import java .util .*;
38+
4739public class SPEventHandler {
4840
49- private static Lurchpaerchensauna <Runnable , Integer > serverTasks = new Lurchpaerchensauna <Runnable , Integer >();
50- private static Lurchsauna <BoolRun > serverPredicatedTasks = new Lurchsauna <BoolRun >();
41+ private static Map <Runnable , Integer > serverTasks = new HashMap <Runnable , Integer >();
42+ private static Collection <BoolRun > serverPredicatedTasks = new ArrayList <BoolRun >();
5143
52- private static Lurchpaerchensauna <Runnable , Integer > clientTasks = new Lurchpaerchensauna <Runnable , Integer >();
53- private static Lurchsauna <BoolRun > clientPredicatedTasks = new Lurchsauna <BoolRun >();
44+ private static Map <Runnable , Integer > clientTasks = new HashMap <Runnable , Integer >();
45+ private static Collection <BoolRun > clientPredicatedTasks = new ArrayList <BoolRun >();
5446
5547 public static final SPEventHandler INSTANCE = new SPEventHandler ();
5648 private SPEventHandler (){}
@@ -92,53 +84,35 @@ public void onServerTick(TickEvent event) {
9284 if (!(event instanceof TickEvent .ServerTickEvent )) {
9385 return ;
9486 }
95- Lurchpaerchensauna <Runnable , Integer > serverTasksTEMP = serverTasks ;
96- Lurchsauna <BoolRun > serverPredicatedTasksTEMP = serverPredicatedTasks ;
97- serverTasks = new Lurchpaerchensauna <Runnable , Integer >();
98- serverPredicatedTasks = new Lurchsauna <BoolRun >();
99-
100- // time++;
101- for (Entry <Runnable , Integer > now : serverTasksTEMP .entrySet ()) {
102- int val = now .getValue ()-1 ;
103- if (val < 2 ) {
104- now .getKey ().run ();
105- }else {
106- serverTasks .put (now .getKey (), val );
107- }
108- }
109-
110- for (BoolRun now : serverPredicatedTasksTEMP ){
111- if (!now .run ()){
112- serverPredicatedTasks .add (now );
113- }
114- }
87+ Map <Runnable , Integer > oldTasks = serverTasks ;
88+ serverTasks = new HashMap <>();
89+ serverTasks .putAll (CollectionUtils .mutateOr (
90+ oldTasks ,
91+ (task , delay ) -> delay > 1 , // condition
92+ (task , delay ) -> delay - 1 , // mutation
93+ (task , delay ) -> task .run () // elseAction
94+ ));
95+ Collection <BoolRun > oldPredicateTasks = serverPredicatedTasks ;
96+ serverPredicatedTasks = new HashSet <>();
97+ serverPredicatedTasks .addAll (CollectionUtils .where (oldPredicateTasks , boolRun -> !boolRun .run ()));
11598 }
11699
117100 @ SubscribeEvent
118101 public void onClientTick (TickEvent event ) {
119102 if (!(event instanceof TickEvent .ClientTickEvent )) {
120103 return ;
121104 }
122- Lurchpaerchensauna <Runnable , Integer > clientTasksTEMP = clientTasks ;
123- Lurchsauna <BoolRun > clientPredicatedTasksTEMP = clientPredicatedTasks ;
124- clientTasks = new Lurchpaerchensauna <Runnable , Integer >();
125- clientPredicatedTasks = new Lurchsauna <BoolRun >();
126-
127- // time++;
128- for (Entry <Runnable , Integer > now : clientTasksTEMP .entrySet ()) {
129- int val = now .getValue ()-1 ;
130- if (val < 2 ) {
131- now .getKey ().run ();
132- }else {
133- clientTasks .put (now .getKey (), val );
134- }
135- }
136-
137- for (BoolRun now : clientPredicatedTasksTEMP ){
138- if (!now .run ()){
139- clientPredicatedTasks .add (now );
140- }
141- }
105+ Map <Runnable , Integer > oldTasks = clientTasks ;
106+ clientTasks = new HashMap <>();
107+ clientTasks .putAll (CollectionUtils .mutateOr (
108+ oldTasks ,
109+ (task , delay ) -> delay > 1 , // condition
110+ (task , delay ) -> delay - 1 , // mutation
111+ (task , delay ) -> task .run () // elseAction
112+ ));
113+ Collection <BoolRun > oldPredicateTasks = clientPredicatedTasks ;
114+ clientPredicatedTasks = new HashSet <>();
115+ clientPredicatedTasks .addAll (CollectionUtils .where (oldPredicateTasks , boolRun -> !boolRun .run ()));
142116 }
143117
144118 // ServerSide
@@ -179,56 +153,55 @@ public void onSave(WorldEvent.Save event) {
179153
180154 @ SubscribeEvent
181155 public void oBlockPlace (PlaceEvent event ){
156+ MyBlockPos blockPos = new MyBlockPos (event .getPos (), event .getPlayer ().dimension );
182157 if (!(event .getPlayer () instanceof EntityPlayerMP )){
183158 if (event .getState ().getBlock () instanceof BasePost ){
184- BasePost .placeClient (event .getWorld (), new MyBlockPos ( "" , event . getPos (), event . getPlayer (). dimension ) , event .getPlayer ());
159+ BasePost .placeClient (event .getWorld (), blockPos , event .getPlayer ());
185160 }else if (event .getState ().getBlock () instanceof BaseModelPost ){
186- BaseModelPost .placeClient (event .getWorld (), new MyBlockPos ( "" , event . getPos (), event . getPlayer (). dimension ) , event .getPlayer ());
161+ BaseModelPost .placeClient (event .getWorld (), blockPos , event .getPlayer ());
187162 }else if (event .getState ().getBlock () instanceof SuperPostPost ){
188- SuperPostPost .placeClient (event .getWorld (), new MyBlockPos ( "" , event . getPos (), event . getPlayer (). dimension ) , event .getPlayer ());
163+ SuperPostPost .placeClient (event .getWorld (), blockPos , event .getPlayer ());
189164 }
190165 return ;
191166 }
192167 EntityPlayerMP player = (EntityPlayerMP )event .getPlayer ();
168+ MyBlockPos eventPos = new MyBlockPos (event .getPos (), player .dimension );
193169 if (event .getState ().getBlock () instanceof BasePost ){
194170 BasePostTile tile = BasePost .getWaystoneRootTile (event .getWorld (), event .getPos ());
195171 if (!(ClientConfigStorage .INSTANCE .getSecurityLevelWaystone ().canPlace (player ) && checkWaystoneCount (player ))){
196- tile .onBlockDestroy (new MyBlockPos ( event . getWorld (), event . getPos (), player . dimension ) );
172+ tile .onBlockDestroy (eventPos );
197173 event .setCanceled (true );
198174 }else {
199- BasePost .placeServer (event .getWorld (), new MyBlockPos ( event . getWorld (). getWorldInfo (). getWorldName (), event . getPos (), event . getPlayer (). dimension ) , (EntityPlayerMP ) event .getPlayer ());
175+ BasePost .placeServer (event .getWorld (), eventPos , (EntityPlayerMP ) event .getPlayer ());
200176 }
201177 }else if (event .getState ().getBlock () instanceof BaseModelPost ){
202178 BasePostTile tile = BaseModelPost .getWaystoneRootTile (event .getWorld (), event .getPos ());
203179 if (!(ClientConfigStorage .INSTANCE .getSecurityLevelWaystone ().canPlace (player ) && checkWaystoneCount (player ))){
204- tile .onBlockDestroy (new MyBlockPos ( event . getWorld (), event . getPos (), player . dimension ) );
180+ tile .onBlockDestroy (eventPos );
205181 event .setCanceled (true );
206182 }else {
207- BaseModelPost .placeServer (event .getWorld (), new MyBlockPos ( event . getWorld (). getWorldInfo (). getWorldName (), event . getPos (), event . getPlayer (). dimension ) , (EntityPlayerMP ) event .getPlayer ());
183+ BaseModelPost .placeServer (event .getWorld (), eventPos , (EntityPlayerMP ) event .getPlayer ());
208184 }
209185 }else if (event .getState ().getBlock () instanceof SuperPostPost ){
210186 SuperPostPostTile tile = SuperPostPost .getSuperTile (event .getWorld (), event .getPos ());
211187 if (!(ClientConfigStorage .INSTANCE .getSecurityLevelSignpost ().canPlace (player ) && checkSignpostCount (player ))){
212- tile .onBlockDestroy (new MyBlockPos ( event . getWorld (), event . getPos (), player . dimension ) );
188+ tile .onBlockDestroy (eventPos );
213189 event .setCanceled (true );
214190 }else {
215- SuperPostPost .placeServer (event .getWorld (), new MyBlockPos ( event . getWorld (). getWorldInfo (). getWorldName (), event . getPos (), event . getPlayer (). dimension ) , (EntityPlayerMP ) event .getPlayer ());
191+ SuperPostPost .placeServer (event .getWorld (), eventPos , (EntityPlayerMP ) event .getPlayer ());
216192 }
217193 }
218194 }
219195
220196 public boolean checkWaystoneCount (EntityPlayerMP player ){
221- Pair < MyBlockPosSet , Pair < Integer , Integer >> pair = PostHandler .playerKnownWaystonePositions . get (player .getUniqueID ());
222- int remaining = pair . b . a ;
197+ PlayerRestrictions restrictions = PostHandler .getPlayerKnownWaystonePositions (player .getUniqueID ());
198+ int remaining = restrictions . remainingWaystones ;
223199 if (remaining == 0 ){
224200 player .sendMessage (new TextComponentString ("You are not allowed to place more waystones" ));
225201 return false ;
226- }else {
227- if (remaining > 0 ){
228- pair .b .a --;
229- }
230- return true ;
231202 }
203+ if (remaining > 0 ) restrictions .remainingWaystones --;
204+ return true ;
232205 }
233206
234207 public void updateWaystoneCount (WaystoneContainer tile ){
@@ -239,33 +212,30 @@ public void updateWaystoneCount(WaystoneContainer tile){
239212 if (owner == null ){
240213 return ;
241214 }
242- Pair < MyBlockPosSet , Pair < Integer , Integer >> pair = PostHandler .playerKnownWaystonePositions . get (owner );
243- if (pair != null && pair . b . a >= 0 ){
244- pair . b . a ++;
215+ PlayerRestrictions restrictions = PostHandler .getPlayerKnownWaystonePositions (owner );
216+ if (restrictions . remainingWaystones >= 0 ){
217+ restrictions . remainingWaystones ++;
245218 }
246219 }
247220
248221 private boolean checkSignpostCount (EntityPlayerMP player ){
249- Pair < MyBlockPosSet , Pair < Integer , Integer >> pair = PostHandler .playerKnownWaystonePositions . get (player .getUniqueID ());
250- int remaining = pair . b . b ;
222+ PlayerRestrictions restrictions = PostHandler .getPlayerKnownWaystonePositions (player .getUniqueID ());
223+ int remaining = restrictions . remainingSignposts ;
251224 if (remaining == 0 ){
252225 player .sendMessage (new TextComponentString ("You are not allowed to place more signposts" ));
253226 return false ;
254- }else {
255- if (remaining > 0 ){
256- pair .b .b --;
257- }
258- return true ;
259227 }
228+ if (remaining > 0 ) restrictions .remainingSignposts --;
229+ return true ;
260230 }
261231
262232 private void updateSignpostCount (SuperPostPostTile tile ){
263233 if (tile == null || tile .owner == null ){
264234 return ;
265235 }
266- Pair < MyBlockPosSet , Pair < Integer , Integer >> pair = PostHandler .playerKnownWaystonePositions . get (tile .owner );
267- if (pair . b . b >= 0 ){
268- pair . b . b ++;
236+ PlayerRestrictions restrictions = PostHandler .getPlayerKnownWaystonePositions (tile .owner );
237+ if (restrictions . remainingSignposts >= 0 ){
238+ restrictions . remainingSignposts ++;
269239 }
270240 }
271241
@@ -294,23 +264,23 @@ public void onBlockBreak(BreakEvent event){
294264 event .setCanceled (true );
295265 }else {
296266 updateWaystoneCount (t );
297- t .onBlockDestroy (new MyBlockPos (event .getWorld (), event . getPos (), player .dimension ));
267+ t .onBlockDestroy (new MyBlockPos (event .getPos (), player .dimension ));
298268 }
299269 }else if (event .getState ().getBlock () instanceof BaseModelPost ){
300270 BasePostTile t = BaseModelPost .getWaystoneRootTile (event .getWorld (), event .getPos ());
301271 if (!ClientConfigStorage .INSTANCE .getSecurityLevelWaystone ().canUse (player , "" +t .getBaseInfo ().owner )){
302272 event .setCanceled (true );
303273 }else {
304274 updateWaystoneCount (t );
305- t .onBlockDestroy (new MyBlockPos (event .getWorld (), event . getPos (), player .dimension ));
275+ t .onBlockDestroy (new MyBlockPos (event .getPos (), player .dimension ));
306276 }
307277 }else if (event .getState ().getBlock () instanceof SuperPostPost ){
308278 SuperPostPostTile t = SuperPostPost .getSuperTile (event .getWorld (), event .getPos ());
309279 if (!ClientConfigStorage .INSTANCE .getSecurityLevelSignpost ().canUse (player , "" +t .owner )){
310280 event .setCanceled (true );
311281 }else {
312282 updateSignpostCount (t );
313- t .onBlockDestroy (new MyBlockPos (event .getWorld (), event . getPos (), player .dimension ));
283+ t .onBlockDestroy (new MyBlockPos (event .getPos (), player .dimension ));
314284 }
315285 }
316286 }catch (Exception e ){}
0 commit comments