11package ru .lionzxy .fastlogblock .handlers ;
22
3+ import net .minecraft .client .resources .I18n ;
4+ import net .minecraft .entity .player .EntityPlayer ;
5+ import net .minecraft .util .math .BlockPos ;
6+ import net .minecraft .util .text .TextComponentTranslation ;
7+ import net .minecraft .world .World ;
38import net .minecraftforge .event .world .BlockEvent ;
49import net .minecraftforge .fml .common .FMLLog ;
510import net .minecraftforge .fml .common .eventhandler .SubscribeEvent ;
11+ import net .minecraftforge .fml .common .gameevent .TickEvent ;
12+ import ru .lionzxy .fastlogblock .io .ReadRunnable ;
613import ru .lionzxy .fastlogblock .models .BlockChangeEventModel ;
714import ru .lionzxy .fastlogblock .models .BlockChangeEventModelWithWorld ;
15+ import ru .lionzxy .fastlogblock .models .FindTask ;
16+ import ru .lionzxy .fastlogblock .models .FindTaskResult ;
817
918import java .io .IOException ;
10- import java .util .concurrent .Executor ;
19+ import java .text .SimpleDateFormat ;
20+ import java .util .Date ;
21+ import java .util .UUID ;
22+ import java .util .concurrent .BlockingQueue ;
23+ import java .util .concurrent .ExecutorService ;
1124import java .util .concurrent .Executors ;
25+ import java .util .concurrent .LinkedBlockingQueue ;
1226
1327public class EventHandlingManager {
14- private final Executor executor = Executors .newCachedThreadPool ();
28+ private final ExecutorService executor = Executors .newCachedThreadPool ();
29+ private final BlockingQueue <FindTaskResult > findTaskResults = new LinkedBlockingQueue <>();
30+ private final ReadRunnable readRunnable ;
1531 private final SplitterRunnable splitterRunnable ;
1632
1733 public EventHandlingManager () throws IOException {
1834 this .splitterRunnable = new SplitterRunnable ();
35+ this .readRunnable = splitterRunnable .getReadRunnable ();
1936 splitterRunnable .runWorkers (executor );
2037 executor .execute (splitterRunnable );
38+ executor .execute (readRunnable );
2139 }
2240
2341 @ SubscribeEvent
@@ -43,4 +61,62 @@ public void onBlockPlace(final BlockEvent.PlaceEvent event) {
4361 FMLLog .log .debug (blockChangeEventModel .toString ());
4462 splitterRunnable .addEvent (blockChangeEventModel );
4563 }
64+
65+ @ SubscribeEvent
66+ public void flushUIWait (TickEvent .ServerTickEvent event ) {
67+ if (findTaskResults .isEmpty ()) {
68+ return ;
69+ }
70+ FindTaskResult findTaskResult ;
71+ while ((findTaskResult = findTaskResults .poll ()) != null ) {
72+ for (BlockChangeEventModel blockEvent : findTaskResult .getBlockChangeEventModels ()) {
73+ notifyAboutEvent (blockEvent , findTaskResult .getEntityPlayer ());
74+ }
75+ if (findTaskResult .getBlockChangeEventModels ().isEmpty ()) {
76+ findTaskResult .getEntityPlayer ().sendMessage (new TextComponentTranslation ("message.fastlogblock:blockinfo.event.empty" ));
77+ } else {
78+ findTaskResult .getEntityPlayer ().sendMessage (new TextComponentTranslation ("message.fastlogblock:blockinfo.event.done" ));
79+ }
80+ }
81+ }
82+
83+ public void handleLogByPos (EntityPlayer entityPlayer , BlockPos blockPos , World world ) {
84+ final FindTask findTask = new FindTask (blockPos , (list , player ) -> {
85+ findTaskResults .add (new FindTaskResult (list , player ));
86+ }, world );
87+ findTask .setEntityPlayer (entityPlayer );
88+ readRunnable .addTaskForSearch (findTask );
89+ }
90+
91+ public void stop () {
92+ executor .shutdownNow ();
93+ }
94+
95+ private void notifyAboutEvent (BlockChangeEventModel blockEvent , EntityPlayer entityPlayer ) {
96+ final String dateformat = I18n .format ("message.fastlogblock:blockinfo.event.dateformat" );
97+ final EntityPlayer playerEvent = entityPlayer .getEntityWorld ().getPlayerEntityByUUID (UUID .fromString (blockEvent .getPlayernick ().toString ()));
98+ String nickname ;
99+ if (playerEvent == null ) {
100+ if (entityPlayer .getEntityWorld ().getMinecraftServer ().isSinglePlayer ()) {
101+ nickname = entityPlayer .getDisplayNameString ();
102+ } else {
103+ nickname = "Unknown(UUID: " + blockEvent .getPlayernick () + ")" ;
104+ }
105+ } else {
106+ nickname = playerEvent .getDisplayNameString ();
107+ }
108+ final String [] args = new String []{new SimpleDateFormat (dateformat ).format (new Date (blockEvent .getTimestamp ().getTime ())),
109+ nickname ,
110+ blockEvent .getNameblock ().toString ()};
111+ TextComponentTranslation textComponent ;
112+ switch (blockEvent .getBlockChangeType ()) {
113+ default :
114+ case INSERT :
115+ textComponent = new TextComponentTranslation ("message.fastlogblock:blockinfo.event.insert" , (Object []) args );
116+ break ;
117+ case REMOVE :
118+ textComponent = new TextComponentTranslation ("message.fastlogblock:blockinfo.event.remove" , (Object []) args );
119+ }
120+ entityPlayer .sendMessage (textComponent );
121+ }
46122}
0 commit comments